|  | ; This test checks -print-after/before on loop passes | 
|  | ; Besides of the loop itself it should be dumping loop pre-header and exits. | 
|  | ; | 
|  | ; RUN: opt < %s 2>&1 -disable-output \ | 
|  | ; RUN: 	   -loop-deletion -print-before=loop-deletion \ | 
|  | ; RUN:	   | FileCheck %s -check-prefix=DEL | 
|  | ; RUN: opt < %s 2>&1 -disable-output \ | 
|  | ; RUN: 	   -loop-unroll -print-after=loop-unroll -filter-print-funcs=bar \ | 
|  | ; RUN:	   | FileCheck %s -check-prefix=BAR | 
|  | ; RUN: opt < %s 2>&1 -disable-output \ | 
|  | ; RUN: 	   -loop-unroll -print-after=loop-unroll -filter-print-funcs=foo -print-module-scope \ | 
|  | ; RUN:	   | FileCheck %s -check-prefix=FOO-MODULE | 
|  |  | 
|  | ; DEL:	    IR Dump Before | 
|  | ; DEL-SAME: dead loops | 
|  | ; DEL: 	    ; Preheader: | 
|  | ; DEL-NEXT:  %idx = alloca i32, align 4 | 
|  | ; DEL:      ; Loop: | 
|  | ; DEL-NEXT:  loop: | 
|  | ; DEL:	     cont: | 
|  | ; DEL:	    ; Exit blocks | 
|  | ; DEL:	     done: | 
|  | ; DEL:	    IR Dump Before | 
|  | ; DEL-SAME: dead loops | 
|  | ; DEL: 	    ; Preheader: | 
|  | ; DEL-NEXT:  br label %loop | 
|  | ; DEL:      ; Loop: | 
|  | ; DEL-NEXT:  loop: | 
|  | ; DEL:	    ; Exit blocks | 
|  | ; DEL:	     end: | 
|  |  | 
|  | ; BAR:	    IR Dump After | 
|  | ; BAR-SAME: Unroll | 
|  | ; BAR: 	    ; Preheader: | 
|  | ; BAR-NEXT:  br label %loop | 
|  | ; BAR:      ; Loop: | 
|  | ; BAR-NEXT:  loop: | 
|  | ; BAR:	    ; Exit blocks | 
|  | ; BAR:	     end: | 
|  | ; BAR-NOT: IR Dump | 
|  | ; BAR-NOT:  ; Loop | 
|  |  | 
|  | ; FOO-MODULE: IR Dump After | 
|  | ; FOO-MODULE-SAME: Unroll | 
|  | ; FOO-MODULE-SAME: loop: %loop | 
|  | ; FOO-MODULE-NEXT: ModuleID = | 
|  | ; FOO-MODULE: define void @foo | 
|  | ; FOO-MODULE: define void @bar | 
|  | ; FOO-MODULE-NOT: IR Dump | 
|  |  | 
|  | define void @foo(){ | 
|  | %idx = alloca i32, align 4 | 
|  | store i32 0, i32* %idx, align 4 | 
|  | br label %loop | 
|  |  | 
|  | loop: | 
|  | %1 = load i32, i32* %idx, align 4 | 
|  | %2 = icmp slt i32 %1, 10 | 
|  | br i1 %2, label %cont, label %done | 
|  |  | 
|  | cont: | 
|  | %3 = load i32, i32* %idx, align 4 | 
|  | %4 = add nsw i32 %3, 1 | 
|  | store i32 %4, i32* %idx, align 4 | 
|  | br label %loop | 
|  |  | 
|  | done: | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define void @bar(){ | 
|  | br label %loop | 
|  | loop: | 
|  | br i1 1, label %loop, label %end | 
|  | end: | 
|  | ret void | 
|  | } |