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