236
|
1 ; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-print-scops \
|
|
2 ; RUN: -polly-invariant-load-hoisting=true \
|
|
3 ; RUN: -disable-output < %s 2>&1 | FileCheck %s
|
150
|
4 ;
|
|
5 ; CHECK: Low complexity assumption: { : false }
|
|
6 ;
|
|
7 ; The IR is a modified version of the following C:
|
|
8 ;
|
|
9 ; void f(int *A) {
|
|
10 ; Begin:
|
|
11 ; if (A[0] == 1 | A[1] == 1 | A[2] == 1 | A[3] == 1 | A[4] == 1 | A[5] == 1 |
|
|
12 ; A[6] == 1 | A[7] == 1 | A[8] == 1 | A[9] == 1 | A[10] == 1 | A[11] == 1 |
|
|
13 ; A[12] == 1 | A[13] == 1 | A[14] == 1 | A[15] == 1 | A[16] == 1 |
|
|
14 ; A[17] == 1 | A[18] == 1 | A[19] == 1 | A[20] == 1 | A[21] == 1 |
|
|
15 ; A[22] == 1 | A[23]) {
|
|
16 ; A[-1]++;
|
|
17 ; } else {
|
|
18 ; A[-1]--;
|
|
19 ; }
|
|
20 ; End:
|
|
21 ; return;
|
|
22 ; }
|
|
23 ;
|
|
24 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
25
|
252
|
26 define void @f(ptr %A) {
|
150
|
27 entry:
|
|
28 br label %Begin
|
|
29
|
|
30 Begin: ; preds = %entry
|
252
|
31 %tmp = load i32, ptr %A, align 4
|
150
|
32 %cmp = icmp eq i32 %tmp, 1
|
252
|
33 %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 1
|
|
34 %tmp1 = load i32, ptr %arrayidx1, align 4
|
150
|
35 %cmp2 = icmp eq i32 %tmp1, 1
|
|
36 %or = or i1 %cmp, %cmp2
|
252
|
37 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 2
|
|
38 %tmp2 = load i32, ptr %arrayidx4, align 4
|
150
|
39 %cmp5 = icmp eq i32 %tmp2, 1
|
|
40 %or7 = or i1 %or, %cmp5
|
252
|
41 %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 3
|
|
42 %tmp3 = load i32, ptr %arrayidx8, align 4
|
150
|
43 %cmp9 = icmp eq i32 %tmp3, 1
|
|
44 %or11 = or i1 %or7, %cmp9
|
252
|
45 %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 4
|
|
46 %tmp4 = load i32, ptr %arrayidx12, align 4
|
150
|
47 %cmp13 = icmp eq i32 %tmp4, 1
|
|
48 %or15 = or i1 %or11, %cmp13
|
252
|
49 %arrayidx16 = getelementptr inbounds i32, ptr %A, i64 5
|
|
50 %tmp5 = load i32, ptr %arrayidx16, align 4
|
150
|
51 %cmp17 = icmp eq i32 %tmp5, 1
|
|
52 %or19 = or i1 %or15, %cmp17
|
252
|
53 %arrayidx20 = getelementptr inbounds i32, ptr %A, i64 6
|
|
54 %tmp6 = load i32, ptr %arrayidx20, align 4
|
150
|
55 %cmp21 = icmp eq i32 %tmp6, 1
|
|
56 %or23 = or i1 %or19, %cmp21
|
252
|
57 %arrayidx24 = getelementptr inbounds i32, ptr %A, i64 7
|
|
58 %tmp7 = load i32, ptr %arrayidx24, align 4
|
150
|
59 %cmp25 = icmp eq i32 %tmp7, 1
|
|
60 %or27 = or i1 %or23, %cmp25
|
252
|
61 %arrayidx28 = getelementptr inbounds i32, ptr %A, i64 8
|
|
62 %tmp8 = load i32, ptr %arrayidx28, align 4
|
150
|
63 %cmp29 = icmp eq i32 %tmp8, 1
|
|
64 %or31 = or i1 %or27, %cmp29
|
252
|
65 %arrayidx32 = getelementptr inbounds i32, ptr %A, i64 9
|
|
66 %tmp9 = load i32, ptr %arrayidx32, align 4
|
150
|
67 %cmp33 = icmp eq i32 %tmp9, 1
|
|
68 %or35 = or i1 %or31, %cmp33
|
252
|
69 %arrayidx36 = getelementptr inbounds i32, ptr %A, i64 10
|
|
70 %tmp10 = load i32, ptr %arrayidx36, align 4
|
150
|
71 %cmp37 = icmp eq i32 %tmp10, 1
|
|
72 %or39 = or i1 %or35, %cmp37
|
252
|
73 %arrayidx40 = getelementptr inbounds i32, ptr %A, i64 11
|
|
74 %tmp11 = load i32, ptr %arrayidx40, align 4
|
150
|
75 %cmp41 = icmp eq i32 %tmp11, 1
|
|
76 %or43 = or i1 %or39, %cmp41
|
252
|
77 %arrayidx44 = getelementptr inbounds i32, ptr %A, i64 12
|
|
78 %tmp12 = load i32, ptr %arrayidx44, align 4
|
150
|
79 %cmp45 = icmp eq i32 %tmp12, 1
|
|
80 %or47 = or i1 %or43, %cmp45
|
252
|
81 %arrayidx48 = getelementptr inbounds i32, ptr %A, i64 13
|
|
82 %tmp13 = load i32, ptr %arrayidx48, align 4
|
150
|
83 %cmp49 = icmp eq i32 %tmp13, 1
|
|
84 %or51 = or i1 %or47, %cmp49
|
252
|
85 %arrayidx52 = getelementptr inbounds i32, ptr %A, i64 14
|
|
86 %tmp14 = load i32, ptr %arrayidx52, align 4
|
150
|
87 %cmp53 = icmp eq i32 %tmp14, 1
|
|
88 %or55 = or i1 %or51, %cmp53
|
252
|
89 %arrayidx56 = getelementptr inbounds i32, ptr %A, i64 15
|
|
90 %tmp15 = load i32, ptr %arrayidx56, align 4
|
150
|
91 %cmp57 = icmp eq i32 %tmp15, 1
|
|
92 %or59 = or i1 %or55, %cmp57
|
252
|
93 %arrayidx60 = getelementptr inbounds i32, ptr %A, i64 16
|
|
94 %tmp16 = load i32, ptr %arrayidx60, align 4
|
150
|
95 %cmp61 = icmp eq i32 %tmp16, 1
|
|
96 %or63 = or i1 %or59, %cmp61
|
252
|
97 %arrayidx64 = getelementptr inbounds i32, ptr %A, i64 17
|
|
98 %tmp17 = load i32, ptr %arrayidx64, align 4
|
150
|
99 %cmp65 = icmp eq i32 %tmp17, 1
|
|
100 %or67 = or i1 %or63, %cmp65
|
252
|
101 %arrayidx68 = getelementptr inbounds i32, ptr %A, i64 18
|
|
102 %tmp18 = load i32, ptr %arrayidx68, align 4
|
150
|
103 %cmp69 = icmp eq i32 %tmp18, 1
|
|
104 %or71 = or i1 %or67, %cmp69
|
252
|
105 %arrayidx72 = getelementptr inbounds i32, ptr %A, i64 19
|
|
106 %tmp19 = load i32, ptr %arrayidx72, align 4
|
150
|
107 %cmp73 = icmp eq i32 %tmp19, 1
|
|
108 %or75 = or i1 %or71, %cmp73
|
252
|
109 %arrayidx76 = getelementptr inbounds i32, ptr %A, i64 20
|
|
110 %tmp20 = load i32, ptr %arrayidx76, align 4
|
150
|
111 %cmp77 = icmp eq i32 %tmp20, 1
|
|
112 %or79 = or i1 %or75, %cmp77
|
252
|
113 %arrayidx80 = getelementptr inbounds i32, ptr %A, i64 21
|
|
114 %tmp21 = load i32, ptr %arrayidx80, align 4
|
150
|
115 %cmp81 = icmp eq i32 %tmp21, 1
|
|
116 %or83 = or i1 %or79, %cmp81
|
252
|
117 %arrayidx84 = getelementptr inbounds i32, ptr %A, i64 22
|
|
118 %tmp22 = load i32, ptr %arrayidx84, align 4
|
150
|
119 %cmp85 = icmp eq i32 %tmp22, 1
|
|
120 %or87 = or i1 %or83, %cmp85
|
252
|
121 %arrayidx88 = getelementptr inbounds i32, ptr %A, i64 23
|
|
122 %tmp23 = load i32, ptr %arrayidx88, align 4
|
150
|
123 %cmp88 = icmp eq i32 %tmp23, 1
|
|
124 %or89 = or i1 %or87, %cmp88
|
|
125 br i1 %or89, label %if.else, label %if.then
|
|
126
|
|
127 if.then: ; preds = %Begin
|
252
|
128 %arrayidx90 = getelementptr inbounds i32, ptr %A, i64 -1
|
|
129 %tmp24 = load i32, ptr %arrayidx90, align 4
|
150
|
130 %inc = add nsw i32 %tmp24, 1
|
252
|
131 store i32 %inc, ptr %arrayidx90, align 4
|
150
|
132 br label %if.end
|
|
133
|
|
134 if.else: ; preds = %Begin
|
252
|
135 %arrayidx91 = getelementptr inbounds i32, ptr %A, i64 -1
|
|
136 %tmp25 = load i32, ptr %arrayidx91, align 4
|
150
|
137 %dec = add nsw i32 %tmp25, -1
|
252
|
138 store i32 %dec, ptr %arrayidx91, align 4
|
150
|
139 br label %if.end
|
|
140
|
|
141 if.end: ; preds = %if.else, %if.then
|
|
142 br label %End
|
|
143
|
|
144 End: ; preds = %if.end
|
|
145 ret void
|
|
146 }
|