1; RUN: opt %loadNPMPolly -polly-stmt-granularity=bb '-passes=print<polly-function-scops>' -disable-output < %s 2>&1 | FileCheck %s 2 3; Verify that we do not allow PHI nodes such as %phi, if they reference an error 4; block and are used by anything else than a terminator instruction. 5 6; CHECK: Statements { 7; CHECK-NEXT: Stmt_loop 8; CHECK-NEXT: Domain := 9; CHECK-NEXT: [p] -> { Stmt_loop[i0] : p >= 13 and 0 <= i0 <= 1025 }; 10; CHECK-NEXT: Schedule := 11; CHECK-NEXT: [p] -> { Stmt_loop[i0] -> [i0] }; 12; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] 13; CHECK-NEXT: [p] -> { Stmt_loop[i0] -> MemRef_X[0] }; 14; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] 15; CHECK-NEXT: [p] -> { Stmt_loop[i0] -> MemRef_phi[] }; 16; CHECK-NEXT: } 17 18declare void @bar() 19 20define void @foo(ptr %X, i64 %p) { 21entry: 22 br label %br 23 24br: 25 %cmp1 = icmp sle i64 %p, 12 26 br i1 %cmp1, label %A, label %br2 27 28br2: 29 %cmp3 = icmp sle i64 %p, 12 30 br i1 %cmp3, label %cond, label %loop 31 32loop: 33 %indvar = phi i64 [0, %br2], [%indvar.next, %loop] 34 %indvar.next = add nsw i64 %indvar, 1 35 store float 41.0, ptr %X 36 %cmp2 = icmp sle i64 %indvar, 1024 37 br i1 %cmp2, label %loop, label %merge 38 39cond: 40 br label %cond2 41 42cond2: 43 call void @bar() 44 br label %merge 45 46merge: 47 %phi = phi i1 [false, %cond2], [true, %loop] 48 %add = add i1 %phi, 1 49 br i1 %add, label %A, label %B 50 51A: 52 store float 42.0, ptr %X 53 br label %exit 54 55B: 56 call void @bar() 57 store float 41.0, ptr %X 58 br label %exit 59 60exit: 61 ret void 62} 63