1; This test checks -print-after/before on loop passes 2; Besides of the loop itself it should be dumping loop pre-header and exits. 3; 4; RUN: opt < %s 2>&1 -disable-output \ 5; RUN: -loop-deletion -print-before=loop-deletion \ 6; RUN: | FileCheck %s -check-prefix=DEL 7; RUN: opt < %s 2>&1 -disable-output \ 8; RUN: -loop-unroll -print-after=loop-unroll -filter-print-funcs=bar \ 9; RUN: | FileCheck %s -check-prefix=BAR 10; RUN: opt < %s 2>&1 -disable-output \ 11; RUN: -loop-unroll -print-after=loop-unroll -filter-print-funcs=foo -print-module-scope \ 12; RUN: | FileCheck %s -check-prefix=FOO-MODULE 13 14; DEL: IR Dump Before 15; DEL-SAME: dead loops 16; DEL: ; Preheader: 17; DEL-NEXT: %idx = alloca i32, align 4 18; DEL: ; Loop: 19; DEL-NEXT: loop: 20; DEL: cont: 21; DEL: ; Exit blocks 22; DEL: done: 23; DEL: IR Dump Before 24; DEL-SAME: dead loops 25; DEL: ; Preheader: 26; DEL-NEXT: br label %loop 27; DEL: ; Loop: 28; DEL-NEXT: loop: 29; DEL: ; Exit blocks 30; DEL: end: 31 32; BAR: IR Dump After 33; BAR-SAME: Unroll 34; BAR: ; Preheader: 35; BAR-NEXT: br label %loop 36; BAR: ; Loop: 37; BAR-NEXT: loop: 38; BAR: ; Exit blocks 39; BAR: end: 40; BAR-NOT: IR Dump 41; BAR-NOT: ; Loop 42 43; FOO-MODULE: IR Dump After 44; FOO-MODULE-SAME: Unroll 45; FOO-MODULE-SAME: loop: %loop 46; FOO-MODULE-NEXT: ModuleID = 47; FOO-MODULE: define void @foo 48; FOO-MODULE: define void @bar 49; FOO-MODULE-NOT: IR Dump 50 51define void @foo(){ 52 %idx = alloca i32, align 4 53 store i32 0, i32* %idx, align 4 54 br label %loop 55 56loop: 57 %1 = load i32, i32* %idx, align 4 58 %2 = icmp slt i32 %1, 10 59 br i1 %2, label %cont, label %done 60 61cont: 62 %3 = load i32, i32* %idx, align 4 63 %4 = add nsw i32 %3, 1 64 store i32 %4, i32* %idx, align 4 65 br label %loop 66 67done: 68 ret void 69} 70 71define void @bar(){ 72 br label %loop 73loop: 74 br i1 1, label %loop, label %end 75end: 76 ret void 77} 78