xref: /llvm-project/polly/test/ScopInfo/condition-after-error-block-2.ll (revision e1f056f692d869708c1898d9d65a69ac5584a0ed)
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