David Green | d143c65 | 2018-06-21 11:53:16 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -analyze -basicaa -da | FileCheck %s |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 2 | |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 3 | target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" |
| 4 | target triple = "x86_64-apple-macosx10.6.0" |
| 5 | |
| 6 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 7 | ;;int p0(int n, int *A, int *B) { |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 8 | ;; A[0] = n; |
| 9 | ;; return B[1]; |
| 10 | |
| 11 | define i32 @p0(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp { |
| 12 | entry: |
| 13 | store i32 %n, i32* %A, align 4 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 14 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 15 | ; CHECK-LABEL: p0 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 16 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 17 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 18 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 19 | |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 20 | %arrayidx1 = getelementptr inbounds i32, i32* %B, i64 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 21 | %0 = load i32, i32* %arrayidx1, align 4 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 22 | ret i32 %0 |
| 23 | } |
| 24 | |
| 25 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 26 | ;;int p1(int n, int *restrict A, int *restrict B) { |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 27 | ;; A[0] = n; |
| 28 | ;; return B[1]; |
| 29 | |
| 30 | define i32 @p1(i32 %n, i32* noalias %A, i32* noalias %B) nounwind uwtable ssp { |
| 31 | entry: |
| 32 | store i32 %n, i32* %A, align 4 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 33 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 34 | ; CHECK-LABEL: p1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 35 | ; CHECK: da analyze - none! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 36 | ; CHECK: da analyze - none! |
| 37 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 38 | |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 39 | %arrayidx1 = getelementptr inbounds i32, i32* %B, i64 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 40 | %0 = load i32, i32* %arrayidx1, align 4 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 41 | ret i32 %0 |
| 42 | } |
| 43 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 44 | |
| 45 | ;; for (long int i = 0; i < n; i++) { |
| 46 | ;; for (long int j = 0; j < n; j++) { |
| 47 | ;; for (long int k = 0; k < n; k++) { |
| 48 | ;; A[i][j][k] = i; |
| 49 | ;; } |
| 50 | ;; for (long int k = 0; k < n; k++) { |
| 51 | ;; *B++ = A[i + 3][j + 2][k + 1]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 52 | |
| 53 | define void @p2(i64 %n, [100 x [100 x i64]]* %A, i64* %B) nounwind uwtable ssp { |
| 54 | entry: |
| 55 | %cmp10 = icmp sgt i64 %n, 0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 56 | br i1 %cmp10, label %for.cond1.preheader.preheader, label %for.end26 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 57 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 58 | ; CHECK-LABEL: p2 |
| 59 | ; CHECK: da analyze - output [* * *]! |
| 60 | ; CHECK: da analyze - flow [* *|<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 61 | ; CHECK: da analyze - confused! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 62 | ; CHECK: da analyze - input [* * *]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 63 | ; CHECK: da analyze - confused! |
Preston Briggs | 1084fa2 | 2012-11-27 06:41:46 +0000 | [diff] [blame] | 64 | ; CHECK: da analyze - output [* * *]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 65 | |
| 66 | for.cond1.preheader.preheader: ; preds = %entry |
| 67 | br label %for.cond1.preheader |
| 68 | |
| 69 | for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc24 |
| 70 | %B.addr.012 = phi i64* [ %B.addr.1.lcssa, %for.inc24 ], [ %B, %for.cond1.preheader.preheader ] |
| 71 | %i.011 = phi i64 [ %inc25, %for.inc24 ], [ 0, %for.cond1.preheader.preheader ] |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 72 | %cmp26 = icmp sgt i64 %n, 0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 73 | br i1 %cmp26, label %for.cond4.preheader.preheader, label %for.inc24 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 74 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 75 | for.cond4.preheader.preheader: ; preds = %for.cond1.preheader |
| 76 | br label %for.cond4.preheader |
| 77 | |
| 78 | for.cond4.preheader: ; preds = %for.cond4.preheader.preheader, %for.inc21 |
| 79 | %B.addr.18 = phi i64* [ %B.addr.2.lcssa, %for.inc21 ], [ %B.addr.012, %for.cond4.preheader.preheader ] |
| 80 | %j.07 = phi i64 [ %inc22, %for.inc21 ], [ 0, %for.cond4.preheader.preheader ] |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 81 | %cmp51 = icmp sgt i64 %n, 0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 82 | br i1 %cmp51, label %for.body6.preheader, label %for.cond10.loopexit |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 83 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 84 | for.body6.preheader: ; preds = %for.cond4.preheader |
| 85 | br label %for.body6 |
| 86 | |
| 87 | for.body6: ; preds = %for.body6.preheader, %for.body6 |
| 88 | %k.02 = phi i64 [ %inc, %for.body6 ], [ 0, %for.body6.preheader ] |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 89 | %arrayidx8 = getelementptr inbounds [100 x [100 x i64]], [100 x [100 x i64]]* %A, i64 %i.011, i64 %j.07, i64 %k.02 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 90 | store i64 %i.011, i64* %arrayidx8, align 8 |
| 91 | %inc = add nsw i64 %k.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 92 | %exitcond13 = icmp ne i64 %inc, %n |
| 93 | br i1 %exitcond13, label %for.body6, label %for.cond10.loopexit.loopexit |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 94 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 95 | for.cond10.loopexit.loopexit: ; preds = %for.body6 |
| 96 | br label %for.cond10.loopexit |
| 97 | |
| 98 | for.cond10.loopexit: ; preds = %for.cond10.loopexit.loopexit, %for.cond4.preheader |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 99 | %cmp113 = icmp sgt i64 %n, 0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 100 | br i1 %cmp113, label %for.body12.preheader, label %for.inc21 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 101 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 102 | for.body12.preheader: ; preds = %for.cond10.loopexit |
| 103 | br label %for.body12 |
| 104 | |
| 105 | for.body12: ; preds = %for.body12.preheader, %for.body12 |
| 106 | %k9.05 = phi i64 [ %inc19, %for.body12 ], [ 0, %for.body12.preheader ] |
| 107 | %B.addr.24 = phi i64* [ %incdec.ptr, %for.body12 ], [ %B.addr.18, %for.body12.preheader ] |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 108 | %add = add nsw i64 %k9.05, 1 |
| 109 | %add13 = add nsw i64 %j.07, 2 |
| 110 | %add14 = add nsw i64 %i.011, 3 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 111 | %arrayidx17 = getelementptr inbounds [100 x [100 x i64]], [100 x [100 x i64]]* %A, i64 %add14, i64 %add13, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 112 | %0 = load i64, i64* %arrayidx17, align 8 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 113 | %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.24, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 114 | store i64 %0, i64* %B.addr.24, align 8 |
| 115 | %inc19 = add nsw i64 %k9.05, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 116 | %exitcond = icmp ne i64 %inc19, %n |
| 117 | br i1 %exitcond, label %for.body12, label %for.inc21.loopexit |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 118 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 119 | for.inc21.loopexit: ; preds = %for.body12 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 120 | %scevgep = getelementptr i64, i64* %B.addr.18, i64 %n |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 121 | br label %for.inc21 |
| 122 | |
| 123 | for.inc21: ; preds = %for.inc21.loopexit, %for.cond10.loopexit |
| 124 | %B.addr.2.lcssa = phi i64* [ %B.addr.18, %for.cond10.loopexit ], [ %scevgep, %for.inc21.loopexit ] |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 125 | %inc22 = add nsw i64 %j.07, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 126 | %exitcond14 = icmp ne i64 %inc22, %n |
| 127 | br i1 %exitcond14, label %for.cond4.preheader, label %for.inc24.loopexit |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 128 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 129 | for.inc24.loopexit: ; preds = %for.inc21 |
| 130 | %B.addr.2.lcssa.lcssa = phi i64* [ %B.addr.2.lcssa, %for.inc21 ] |
| 131 | br label %for.inc24 |
| 132 | |
| 133 | for.inc24: ; preds = %for.inc24.loopexit, %for.cond1.preheader |
| 134 | %B.addr.1.lcssa = phi i64* [ %B.addr.012, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc24.loopexit ] |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 135 | %inc25 = add nsw i64 %i.011, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 136 | %exitcond15 = icmp ne i64 %inc25, %n |
| 137 | br i1 %exitcond15, label %for.cond1.preheader, label %for.end26.loopexit |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 138 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 139 | for.end26.loopexit: ; preds = %for.inc24 |
| 140 | br label %for.end26 |
| 141 | |
| 142 | for.end26: ; preds = %for.end26.loopexit, %entry |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 143 | ret void |
| 144 | } |
| 145 | |
| 146 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 147 | ; This ridiculous example is disabled: it does not make sense to keep it. |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 148 | ;; for (long int i = 0; i < n; i++) |
| 149 | ;; for (long int j = 0; j < n; j++) |
| 150 | ;; for (long int k = 0; k < n; k++) |
| 151 | ;; for (long int l = 0; l < n; l++) |
| 152 | ;; for (long int m = 0; m < n; m++) |
| 153 | ;; for (long int o = 0; o < n; o++) |
| 154 | ;; for (long int p = 0; p < n; p++) |
| 155 | ;; for (long int q = 0; q < n; q++) |
| 156 | ;; for (long int r = 0; r < n; r++) |
| 157 | ;; for (long int s = 0; s < n; s++) |
| 158 | ;; for (long int u = 0; u < n; u++) |
| 159 | ;; for (long int t = 0; t < n; t++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 160 | ;; A[i - 3] [j] [2] [k-1] [2*l + 1] [m] [p + q] [r + s] = i; |
| 161 | ;; *B++ = A[i + 3] [2] [u] [1-k] [3*l - 1] [o] [1 + n] [t + 2]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 162 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 163 | ;define void @p3(i64 %n, [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]]* %A, i64* %B) nounwind uwtable ssp { |
| 164 | ;entry: |
| 165 | ; %cmp44 = icmp sgt i64 %n, 0 |
| 166 | ; br i1 %cmp44, label %for.cond1.preheader.preheader, label %for.end90 |
| 167 | ; |
| 168 | ;; DONT-CHECK-LABEL: p3 |
| 169 | ;; DONT-CHECK: da analyze - output [* * * * * S * * * * S S]! |
| 170 | ;; DONT-CHECK: da analyze - flow [* * * * * * * * * * * *|<]! |
| 171 | ;; DONT-CHECK: da analyze - confused! |
| 172 | ;; DONT-CHECK: da analyze - input [* S * * S * S S S S * *]! |
| 173 | ;; DONT-CHECK: da analyze - confused! |
| 174 | ;; DONT-CHECK: da analyze - output [* * * * * * * * * * * *]! |
| 175 | ; |
| 176 | ;for.cond1.preheader.preheader: ; preds = %entry |
| 177 | ; br label %for.cond1.preheader |
| 178 | ; |
| 179 | ;for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc88 |
| 180 | ; %B.addr.046 = phi i64* [ %B.addr.1.lcssa, %for.inc88 ], [ %B, %for.cond1.preheader.preheader ] |
| 181 | ; %i.045 = phi i64 [ %inc89, %for.inc88 ], [ 0, %for.cond1.preheader.preheader ] |
| 182 | ; %cmp240 = icmp sgt i64 %n, 0 |
| 183 | ; br i1 %cmp240, label %for.cond4.preheader.preheader, label %for.inc88 |
| 184 | ; |
| 185 | ;for.cond4.preheader.preheader: ; preds = %for.cond1.preheader |
| 186 | ; br label %for.cond4.preheader |
| 187 | ; |
| 188 | ;for.cond4.preheader: ; preds = %for.cond4.preheader.preheader, %for.inc85 |
| 189 | ; %B.addr.142 = phi i64* [ %B.addr.2.lcssa, %for.inc85 ], [ %B.addr.046, %for.cond4.preheader.preheader ] |
| 190 | ; %j.041 = phi i64 [ %inc86, %for.inc85 ], [ 0, %for.cond4.preheader.preheader ] |
| 191 | ; %cmp536 = icmp sgt i64 %n, 0 |
| 192 | ; br i1 %cmp536, label %for.cond7.preheader.preheader, label %for.inc85 |
| 193 | ; |
| 194 | ;for.cond7.preheader.preheader: ; preds = %for.cond4.preheader |
| 195 | ; br label %for.cond7.preheader |
| 196 | ; |
| 197 | ;for.cond7.preheader: ; preds = %for.cond7.preheader.preheader, %for.inc82 |
| 198 | ; %B.addr.238 = phi i64* [ %B.addr.3.lcssa, %for.inc82 ], [ %B.addr.142, %for.cond7.preheader.preheader ] |
| 199 | ; %k.037 = phi i64 [ %inc83, %for.inc82 ], [ 0, %for.cond7.preheader.preheader ] |
| 200 | ; %cmp832 = icmp sgt i64 %n, 0 |
| 201 | ; br i1 %cmp832, label %for.cond10.preheader.preheader, label %for.inc82 |
| 202 | ; |
| 203 | ;for.cond10.preheader.preheader: ; preds = %for.cond7.preheader |
| 204 | ; br label %for.cond10.preheader |
| 205 | ; |
| 206 | ;for.cond10.preheader: ; preds = %for.cond10.preheader.preheader, %for.inc79 |
| 207 | ; %B.addr.334 = phi i64* [ %B.addr.4.lcssa, %for.inc79 ], [ %B.addr.238, %for.cond10.preheader.preheader ] |
| 208 | ; %l.033 = phi i64 [ %inc80, %for.inc79 ], [ 0, %for.cond10.preheader.preheader ] |
| 209 | ; %cmp1128 = icmp sgt i64 %n, 0 |
| 210 | ; br i1 %cmp1128, label %for.cond13.preheader.preheader, label %for.inc79 |
| 211 | ; |
| 212 | ;for.cond13.preheader.preheader: ; preds = %for.cond10.preheader |
| 213 | ; br label %for.cond13.preheader |
| 214 | ; |
| 215 | ;for.cond13.preheader: ; preds = %for.cond13.preheader.preheader, %for.inc76 |
| 216 | ; %B.addr.430 = phi i64* [ %B.addr.5.lcssa, %for.inc76 ], [ %B.addr.334, %for.cond13.preheader.preheader ] |
| 217 | ; %m.029 = phi i64 [ %inc77, %for.inc76 ], [ 0, %for.cond13.preheader.preheader ] |
| 218 | ; %cmp1424 = icmp sgt i64 %n, 0 |
| 219 | ; br i1 %cmp1424, label %for.cond16.preheader.preheader, label %for.inc76 |
| 220 | ; |
| 221 | ;for.cond16.preheader.preheader: ; preds = %for.cond13.preheader |
| 222 | ; br label %for.cond16.preheader |
| 223 | ; |
| 224 | ;for.cond16.preheader: ; preds = %for.cond16.preheader.preheader, %for.inc73 |
| 225 | ; %B.addr.526 = phi i64* [ %B.addr.6.lcssa, %for.inc73 ], [ %B.addr.430, %for.cond16.preheader.preheader ] |
| 226 | ; %o.025 = phi i64 [ %inc74, %for.inc73 ], [ 0, %for.cond16.preheader.preheader ] |
| 227 | ; %cmp1720 = icmp sgt i64 %n, 0 |
| 228 | ; br i1 %cmp1720, label %for.cond19.preheader.preheader, label %for.inc73 |
| 229 | ; |
| 230 | ;for.cond19.preheader.preheader: ; preds = %for.cond16.preheader |
| 231 | ; br label %for.cond19.preheader |
| 232 | ; |
| 233 | ;for.cond19.preheader: ; preds = %for.cond19.preheader.preheader, %for.inc70 |
| 234 | ; %B.addr.622 = phi i64* [ %B.addr.7.lcssa, %for.inc70 ], [ %B.addr.526, %for.cond19.preheader.preheader ] |
| 235 | ; %p.021 = phi i64 [ %inc71, %for.inc70 ], [ 0, %for.cond19.preheader.preheader ] |
| 236 | ; %cmp2016 = icmp sgt i64 %n, 0 |
| 237 | ; br i1 %cmp2016, label %for.cond22.preheader.preheader, label %for.inc70 |
| 238 | ; |
| 239 | ;for.cond22.preheader.preheader: ; preds = %for.cond19.preheader |
| 240 | ; br label %for.cond22.preheader |
| 241 | ; |
| 242 | ;for.cond22.preheader: ; preds = %for.cond22.preheader.preheader, %for.inc67 |
| 243 | ; %B.addr.718 = phi i64* [ %B.addr.8.lcssa, %for.inc67 ], [ %B.addr.622, %for.cond22.preheader.preheader ] |
| 244 | ; %q.017 = phi i64 [ %inc68, %for.inc67 ], [ 0, %for.cond22.preheader.preheader ] |
| 245 | ; %cmp2312 = icmp sgt i64 %n, 0 |
| 246 | ; br i1 %cmp2312, label %for.cond25.preheader.preheader, label %for.inc67 |
| 247 | ; |
| 248 | ;for.cond25.preheader.preheader: ; preds = %for.cond22.preheader |
| 249 | ; br label %for.cond25.preheader |
| 250 | ; |
| 251 | ;for.cond25.preheader: ; preds = %for.cond25.preheader.preheader, %for.inc64 |
| 252 | ; %B.addr.814 = phi i64* [ %B.addr.9.lcssa, %for.inc64 ], [ %B.addr.718, %for.cond25.preheader.preheader ] |
| 253 | ; %r.013 = phi i64 [ %inc65, %for.inc64 ], [ 0, %for.cond25.preheader.preheader ] |
| 254 | ; %cmp268 = icmp sgt i64 %n, 0 |
| 255 | ; br i1 %cmp268, label %for.cond28.preheader.preheader, label %for.inc64 |
| 256 | ; |
| 257 | ;for.cond28.preheader.preheader: ; preds = %for.cond25.preheader |
| 258 | ; br label %for.cond28.preheader |
| 259 | ; |
| 260 | ;for.cond28.preheader: ; preds = %for.cond28.preheader.preheader, %for.inc61 |
| 261 | ; %B.addr.910 = phi i64* [ %B.addr.10.lcssa, %for.inc61 ], [ %B.addr.814, %for.cond28.preheader.preheader ] |
| 262 | ; %s.09 = phi i64 [ %inc62, %for.inc61 ], [ 0, %for.cond28.preheader.preheader ] |
| 263 | ; %cmp294 = icmp sgt i64 %n, 0 |
| 264 | ; br i1 %cmp294, label %for.cond31.preheader.preheader, label %for.inc61 |
| 265 | ; |
| 266 | ;for.cond31.preheader.preheader: ; preds = %for.cond28.preheader |
| 267 | ; br label %for.cond31.preheader |
| 268 | ; |
| 269 | ;for.cond31.preheader: ; preds = %for.cond31.preheader.preheader, %for.inc58 |
| 270 | ; %u.06 = phi i64 [ %inc59, %for.inc58 ], [ 0, %for.cond31.preheader.preheader ] |
| 271 | ; %B.addr.105 = phi i64* [ %B.addr.11.lcssa, %for.inc58 ], [ %B.addr.910, %for.cond31.preheader.preheader ] |
| 272 | ; %cmp321 = icmp sgt i64 %n, 0 |
| 273 | ; br i1 %cmp321, label %for.body33.preheader, label %for.inc58 |
| 274 | ; |
| 275 | ;for.body33.preheader: ; preds = %for.cond31.preheader |
| 276 | ; br label %for.body33 |
| 277 | ; |
| 278 | ;for.body33: ; preds = %for.body33.preheader, %for.body33 |
| 279 | ; %t.03 = phi i64 [ %inc, %for.body33 ], [ 0, %for.body33.preheader ] |
| 280 | ; %B.addr.112 = phi i64* [ %incdec.ptr, %for.body33 ], [ %B.addr.105, %for.body33.preheader ] |
| 281 | ; %add = add nsw i64 %r.013, %s.09 |
| 282 | ; %add34 = add nsw i64 %p.021, %q.017 |
| 283 | ; %mul = shl nsw i64 %l.033, 1 |
| 284 | ; %add3547 = or i64 %mul, 1 |
| 285 | ; %sub = add nsw i64 %k.037, -1 |
| 286 | ; %sub36 = add nsw i64 %i.045, -3 |
| 287 | ; %arrayidx43 = getelementptr inbounds [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]], [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]]* %A, i64 %sub36, i64 %j.041, i64 2, i64 %sub, i64 %add3547, i64 %m.029, i64 %add34, i64 %add |
| 288 | ; store i64 %i.045, i64* %arrayidx43, align 8 |
| 289 | ; %add44 = add nsw i64 %t.03, 2 |
| 290 | ; %add45 = add nsw i64 %n, 1 |
| 291 | ; %mul46 = mul nsw i64 %l.033, 3 |
| 292 | ; %sub47 = add nsw i64 %mul46, -1 |
| 293 | ; %sub48 = sub nsw i64 1, %k.037 |
| 294 | ; %add49 = add nsw i64 %i.045, 3 |
| 295 | ; %arrayidx57 = getelementptr inbounds [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]], [100 x [100 x [100 x [100 x [100 x [100 x [100 x i64]]]]]]]* %A, i64 %add49, i64 2, i64 %u.06, i64 %sub48, i64 %sub47, i64 %o.025, i64 %add45, i64 %add44 |
| 296 | ; %0 = load i64, i64* %arrayidx57, align 8 |
| 297 | ; %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.112, i64 1 |
| 298 | ; store i64 %0, i64* %B.addr.112, align 8 |
| 299 | ; %inc = add nsw i64 %t.03, 1 |
| 300 | ; %exitcond = icmp ne i64 %inc, %n |
| 301 | ; br i1 %exitcond, label %for.body33, label %for.inc58.loopexit |
| 302 | ; |
| 303 | ;for.inc58.loopexit: ; preds = %for.body33 |
| 304 | ; %scevgep = getelementptr i64, i64* %B.addr.105, i64 %n |
| 305 | ; br label %for.inc58 |
| 306 | ; |
| 307 | ;for.inc58: ; preds = %for.inc58.loopexit, %for.cond31.preheader |
| 308 | ; %B.addr.11.lcssa = phi i64* [ %B.addr.105, %for.cond31.preheader ], [ %scevgep, %for.inc58.loopexit ] |
| 309 | ; %inc59 = add nsw i64 %u.06, 1 |
| 310 | ; %exitcond48 = icmp ne i64 %inc59, %n |
| 311 | ; br i1 %exitcond48, label %for.cond31.preheader, label %for.inc61.loopexit |
| 312 | ; |
| 313 | ;for.inc61.loopexit: ; preds = %for.inc58 |
| 314 | ; %B.addr.11.lcssa.lcssa = phi i64* [ %B.addr.11.lcssa, %for.inc58 ] |
| 315 | ; br label %for.inc61 |
| 316 | ; |
| 317 | ;for.inc61: ; preds = %for.inc61.loopexit, %for.cond28.preheader |
| 318 | ; %B.addr.10.lcssa = phi i64* [ %B.addr.910, %for.cond28.preheader ], [ %B.addr.11.lcssa.lcssa, %for.inc61.loopexit ] |
| 319 | ; %inc62 = add nsw i64 %s.09, 1 |
| 320 | ; %exitcond49 = icmp ne i64 %inc62, %n |
| 321 | ; br i1 %exitcond49, label %for.cond28.preheader, label %for.inc64.loopexit |
| 322 | ; |
| 323 | ;for.inc64.loopexit: ; preds = %for.inc61 |
| 324 | ; %B.addr.10.lcssa.lcssa = phi i64* [ %B.addr.10.lcssa, %for.inc61 ] |
| 325 | ; br label %for.inc64 |
| 326 | ; |
| 327 | ;for.inc64: ; preds = %for.inc64.loopexit, %for.cond25.preheader |
| 328 | ; %B.addr.9.lcssa = phi i64* [ %B.addr.814, %for.cond25.preheader ], [ %B.addr.10.lcssa.lcssa, %for.inc64.loopexit ] |
| 329 | ; %inc65 = add nsw i64 %r.013, 1 |
| 330 | ; %exitcond50 = icmp ne i64 %inc65, %n |
| 331 | ; br i1 %exitcond50, label %for.cond25.preheader, label %for.inc67.loopexit |
| 332 | ; |
| 333 | ;for.inc67.loopexit: ; preds = %for.inc64 |
| 334 | ; %B.addr.9.lcssa.lcssa = phi i64* [ %B.addr.9.lcssa, %for.inc64 ] |
| 335 | ; br label %for.inc67 |
| 336 | ; |
| 337 | ;for.inc67: ; preds = %for.inc67.loopexit, %for.cond22.preheader |
| 338 | ; %B.addr.8.lcssa = phi i64* [ %B.addr.718, %for.cond22.preheader ], [ %B.addr.9.lcssa.lcssa, %for.inc67.loopexit ] |
| 339 | ; %inc68 = add nsw i64 %q.017, 1 |
| 340 | ; %exitcond51 = icmp ne i64 %inc68, %n |
| 341 | ; br i1 %exitcond51, label %for.cond22.preheader, label %for.inc70.loopexit |
| 342 | ; |
| 343 | ;for.inc70.loopexit: ; preds = %for.inc67 |
| 344 | ; %B.addr.8.lcssa.lcssa = phi i64* [ %B.addr.8.lcssa, %for.inc67 ] |
| 345 | ; br label %for.inc70 |
| 346 | ; |
| 347 | ;for.inc70: ; preds = %for.inc70.loopexit, %for.cond19.preheader |
| 348 | ; %B.addr.7.lcssa = phi i64* [ %B.addr.622, %for.cond19.preheader ], [ %B.addr.8.lcssa.lcssa, %for.inc70.loopexit ] |
| 349 | ; %inc71 = add nsw i64 %p.021, 1 |
| 350 | ; %exitcond52 = icmp ne i64 %inc71, %n |
| 351 | ; br i1 %exitcond52, label %for.cond19.preheader, label %for.inc73.loopexit |
| 352 | ; |
| 353 | ;for.inc73.loopexit: ; preds = %for.inc70 |
| 354 | ; %B.addr.7.lcssa.lcssa = phi i64* [ %B.addr.7.lcssa, %for.inc70 ] |
| 355 | ; br label %for.inc73 |
| 356 | ; |
| 357 | ;for.inc73: ; preds = %for.inc73.loopexit, %for.cond16.preheader |
| 358 | ; %B.addr.6.lcssa = phi i64* [ %B.addr.526, %for.cond16.preheader ], [ %B.addr.7.lcssa.lcssa, %for.inc73.loopexit ] |
| 359 | ; %inc74 = add nsw i64 %o.025, 1 |
| 360 | ; %exitcond53 = icmp ne i64 %inc74, %n |
| 361 | ; br i1 %exitcond53, label %for.cond16.preheader, label %for.inc76.loopexit |
| 362 | ; |
| 363 | ;for.inc76.loopexit: ; preds = %for.inc73 |
| 364 | ; %B.addr.6.lcssa.lcssa = phi i64* [ %B.addr.6.lcssa, %for.inc73 ] |
| 365 | ; br label %for.inc76 |
| 366 | ; |
| 367 | ;for.inc76: ; preds = %for.inc76.loopexit, %for.cond13.preheader |
| 368 | ; %B.addr.5.lcssa = phi i64* [ %B.addr.430, %for.cond13.preheader ], [ %B.addr.6.lcssa.lcssa, %for.inc76.loopexit ] |
| 369 | ; %inc77 = add nsw i64 %m.029, 1 |
| 370 | ; %exitcond54 = icmp ne i64 %inc77, %n |
| 371 | ; br i1 %exitcond54, label %for.cond13.preheader, label %for.inc79.loopexit |
| 372 | ; |
| 373 | ;for.inc79.loopexit: ; preds = %for.inc76 |
| 374 | ; %B.addr.5.lcssa.lcssa = phi i64* [ %B.addr.5.lcssa, %for.inc76 ] |
| 375 | ; br label %for.inc79 |
| 376 | ; |
| 377 | ;for.inc79: ; preds = %for.inc79.loopexit, %for.cond10.preheader |
| 378 | ; %B.addr.4.lcssa = phi i64* [ %B.addr.334, %for.cond10.preheader ], [ %B.addr.5.lcssa.lcssa, %for.inc79.loopexit ] |
| 379 | ; %inc80 = add nsw i64 %l.033, 1 |
| 380 | ; %exitcond55 = icmp ne i64 %inc80, %n |
| 381 | ; br i1 %exitcond55, label %for.cond10.preheader, label %for.inc82.loopexit |
| 382 | ; |
| 383 | ;for.inc82.loopexit: ; preds = %for.inc79 |
| 384 | ; %B.addr.4.lcssa.lcssa = phi i64* [ %B.addr.4.lcssa, %for.inc79 ] |
| 385 | ; br label %for.inc82 |
| 386 | ; |
| 387 | ;for.inc82: ; preds = %for.inc82.loopexit, %for.cond7.preheader |
| 388 | ; %B.addr.3.lcssa = phi i64* [ %B.addr.238, %for.cond7.preheader ], [ %B.addr.4.lcssa.lcssa, %for.inc82.loopexit ] |
| 389 | ; %inc83 = add nsw i64 %k.037, 1 |
| 390 | ; %exitcond56 = icmp ne i64 %inc83, %n |
| 391 | ; br i1 %exitcond56, label %for.cond7.preheader, label %for.inc85.loopexit |
| 392 | ; |
| 393 | ;for.inc85.loopexit: ; preds = %for.inc82 |
| 394 | ; %B.addr.3.lcssa.lcssa = phi i64* [ %B.addr.3.lcssa, %for.inc82 ] |
| 395 | ; br label %for.inc85 |
| 396 | ; |
| 397 | ;for.inc85: ; preds = %for.inc85.loopexit, %for.cond4.preheader |
| 398 | ; %B.addr.2.lcssa = phi i64* [ %B.addr.142, %for.cond4.preheader ], [ %B.addr.3.lcssa.lcssa, %for.inc85.loopexit ] |
| 399 | ; %inc86 = add nsw i64 %j.041, 1 |
| 400 | ; %exitcond57 = icmp ne i64 %inc86, %n |
| 401 | ; br i1 %exitcond57, label %for.cond4.preheader, label %for.inc88.loopexit |
| 402 | ; |
| 403 | ;for.inc88.loopexit: ; preds = %for.inc85 |
| 404 | ; %B.addr.2.lcssa.lcssa = phi i64* [ %B.addr.2.lcssa, %for.inc85 ] |
| 405 | ; br label %for.inc88 |
| 406 | ; |
| 407 | ;for.inc88: ; preds = %for.inc88.loopexit, %for.cond1.preheader |
| 408 | ; %B.addr.1.lcssa = phi i64* [ %B.addr.046, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc88.loopexit ] |
| 409 | ; %inc89 = add nsw i64 %i.045, 1 |
| 410 | ; %exitcond58 = icmp ne i64 %inc89, %n |
| 411 | ; br i1 %exitcond58, label %for.cond1.preheader, label %for.end90.loopexit |
| 412 | ; |
| 413 | ;for.end90.loopexit: ; preds = %for.inc88 |
| 414 | ; br label %for.end90 |
| 415 | ; |
| 416 | ;for.end90: ; preds = %for.end90.loopexit, %entry |
| 417 | ; ret void |
| 418 | ;} |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 419 | |
| 420 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 421 | ;;void p4(int *A, int *B, long int n) { |
| 422 | ;; for (char i = 0; i < n; i++) { |
| 423 | ;; A[i + 2] = i; |
| 424 | ;; *B++ = A[i]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 425 | |
| 426 | define void @p4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { |
| 427 | entry: |
| 428 | %cmp1 = icmp sgt i64 %n, 0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 429 | br i1 %cmp1, label %for.body.preheader, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 430 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 431 | ; CHECK-LABEL: p4 |
Preston Briggs | 1084fa2 | 2012-11-27 06:41:46 +0000 | [diff] [blame] | 432 | ; CHECK: da analyze - output [*]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 433 | ; CHECK: da analyze - flow [*|<]! |
| 434 | ; CHECK: da analyze - confused! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 435 | ; CHECK: da analyze - input [*]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 436 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 437 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 438 | |
| 439 | for.body.preheader: ; preds = %entry |
| 440 | br label %for.body |
| 441 | |
| 442 | for.body: ; preds = %for.body.preheader, %for.body |
| 443 | %i.03 = phi i8 [ %inc, %for.body ], [ 0, %for.body.preheader ] |
| 444 | %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 445 | %conv2 = sext i8 %i.03 to i32 |
| 446 | %conv3 = sext i8 %i.03 to i64 |
| 447 | %add = add i64 %conv3, 2 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 448 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 449 | store i32 %conv2, i32* %arrayidx, align 4 |
| 450 | %idxprom4 = sext i8 %i.03 to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 451 | %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %idxprom4 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 452 | %0 = load i32, i32* %arrayidx5, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 453 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 454 | store i32 %0, i32* %B.addr.02, align 4 |
| 455 | %inc = add i8 %i.03, 1 |
| 456 | %conv = sext i8 %inc to i64 |
| 457 | %cmp = icmp slt i64 %conv, %n |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 458 | br i1 %cmp, label %for.body, label %for.end.loopexit |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 459 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 460 | for.end.loopexit: ; preds = %for.body |
| 461 | br label %for.end |
| 462 | |
| 463 | for.end: ; preds = %for.end.loopexit, %entry |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 464 | ret void |
| 465 | } |
| 466 | |
| 467 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 468 | ;;void p5(int *A, int *B, long int n) { |
| 469 | ;; for (short i = 0; i < n; i++) { |
| 470 | ;; A[i + 2] = i; |
| 471 | ;; *B++ = A[i]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 472 | |
| 473 | define void @p5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { |
| 474 | entry: |
| 475 | %cmp1 = icmp sgt i64 %n, 0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 476 | br i1 %cmp1, label %for.body.preheader, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 477 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 478 | ; CHECK-LABEL: p5 |
Preston Briggs | 1084fa2 | 2012-11-27 06:41:46 +0000 | [diff] [blame] | 479 | ; CHECK: da analyze - output [*]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 480 | ; CHECK: da analyze - flow [*|<]! |
| 481 | ; CHECK: da analyze - confused! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 482 | ; CHECK: da analyze - input [*]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 483 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 484 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 485 | |
| 486 | for.body.preheader: ; preds = %entry |
| 487 | br label %for.body |
| 488 | |
| 489 | for.body: ; preds = %for.body.preheader, %for.body |
| 490 | %i.03 = phi i16 [ %inc, %for.body ], [ 0, %for.body.preheader ] |
| 491 | %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 492 | %conv2 = sext i16 %i.03 to i32 |
| 493 | %conv3 = sext i16 %i.03 to i64 |
| 494 | %add = add i64 %conv3, 2 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 495 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 496 | store i32 %conv2, i32* %arrayidx, align 4 |
| 497 | %idxprom4 = sext i16 %i.03 to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 498 | %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %idxprom4 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 499 | %0 = load i32, i32* %arrayidx5, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 500 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 501 | store i32 %0, i32* %B.addr.02, align 4 |
| 502 | %inc = add i16 %i.03, 1 |
| 503 | %conv = sext i16 %inc to i64 |
| 504 | %cmp = icmp slt i64 %conv, %n |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 505 | br i1 %cmp, label %for.body, label %for.end.loopexit |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 506 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 507 | for.end.loopexit: ; preds = %for.body |
| 508 | br label %for.end |
| 509 | |
| 510 | for.end: ; preds = %for.end.loopexit, %entry |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 511 | ret void |
| 512 | } |
| 513 | |
| 514 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 515 | ;;void p6(int *A, int *B, long int n) { |
| 516 | ;; for (int i = 0; i < n; i++) { |
| 517 | ;; A[i + 2] = i; |
| 518 | ;; *B++ = A[i]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 519 | |
| 520 | define void @p6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { |
| 521 | entry: |
| 522 | %cmp1 = icmp sgt i64 %n, 0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 523 | br i1 %cmp1, label %for.body.preheader, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 524 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 525 | ; CHECK-LABEL: p6 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 526 | ; CHECK: da analyze - none! |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 527 | ; CHECK: da analyze - consistent flow [2]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 528 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 529 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 530 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 531 | ; CHECK: da analyze - none! |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 532 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 533 | for.body.preheader: ; preds = %entry |
| 534 | br label %for.body |
| 535 | |
| 536 | for.body: ; preds = %for.body.preheader, %for.body |
| 537 | %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ] |
| 538 | %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] |
| 539 | %0 = add nsw i64 %indvars.iv, 2 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 540 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %0 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 541 | %1 = trunc i64 %indvars.iv to i32 |
| 542 | store i32 %1, i32* %arrayidx, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 543 | %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 544 | %2 = load i32, i32* %arrayidx3, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 545 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 546 | store i32 %2, i32* %B.addr.02, align 4 |
| 547 | %indvars.iv.next = add i64 %indvars.iv, 1 |
| 548 | %exitcond = icmp ne i64 %indvars.iv.next, %n |
| 549 | br i1 %exitcond, label %for.body, label %for.end.loopexit |
| 550 | |
| 551 | for.end.loopexit: ; preds = %for.body |
| 552 | br label %for.end |
| 553 | |
| 554 | for.end: ; preds = %for.end.loopexit, %entry |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 555 | ret void |
| 556 | } |
| 557 | |
| 558 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 559 | ;;void p7(unsigned *A, unsigned *B, char n) { |
| 560 | ;; A[n] = 0; |
| 561 | ;; *B = A[n + 1]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 562 | |
| 563 | define void @p7(i32* %A, i32* %B, i8 signext %n) nounwind uwtable ssp { |
| 564 | entry: |
| 565 | %idxprom = sext i8 %n to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 566 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 567 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 568 | ; CHECK-LABEL: p7 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 569 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 570 | ; CHECK: da analyze - none! |
| 571 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 572 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 573 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 574 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 575 | |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 576 | store i32 0, i32* %arrayidx, align 4 |
| 577 | %conv = sext i8 %n to i64 |
| 578 | %add = add i64 %conv, 1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 579 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 580 | %0 = load i32, i32* %arrayidx2, align 4 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 581 | store i32 %0, i32* %B, align 4 |
| 582 | ret void |
| 583 | } |
| 584 | |
| 585 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 586 | ;;void p8(unsigned *A, unsigned *B, short n) { |
| 587 | ;; A[n] = 0; |
| 588 | ;; *B = A[n + 1]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 589 | |
| 590 | define void @p8(i32* %A, i32* %B, i16 signext %n) nounwind uwtable ssp { |
| 591 | entry: |
| 592 | %idxprom = sext i16 %n to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 593 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 594 | store i32 0, i32* %arrayidx, align 4 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 595 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 596 | ; CHECK-LABEL: p8 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 597 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 598 | ; CHECK: da analyze - none! |
| 599 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 600 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 601 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 602 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 603 | |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 604 | %conv = sext i16 %n to i64 |
| 605 | %add = add i64 %conv, 1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 606 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 607 | %0 = load i32, i32* %arrayidx2, align 4 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 608 | store i32 %0, i32* %B, align 4 |
| 609 | ret void |
| 610 | } |
| 611 | |
| 612 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 613 | ;;void p9(unsigned *A, unsigned *B, int n) { |
| 614 | ;; A[n] = 0; |
| 615 | ;; *B = A[n + 1]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 616 | |
| 617 | define void @p9(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp { |
| 618 | entry: |
| 619 | %idxprom = sext i32 %n to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 620 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 621 | store i32 0, i32* %arrayidx, align 4 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 622 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 623 | ; CHECK-LABEL: p9 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 624 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 625 | ; CHECK: da analyze - flow [|<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 626 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 627 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 628 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 629 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 630 | |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 631 | %add = add nsw i32 %n, 1 |
| 632 | %idxprom1 = sext i32 %add to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 633 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %idxprom1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 634 | %0 = load i32, i32* %arrayidx2, align 4 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 635 | store i32 %0, i32* %B, align 4 |
| 636 | ret void |
| 637 | } |
| 638 | |
| 639 | |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 640 | ;;void p10(unsigned *A, unsigned *B, unsigned n) { |
| 641 | ;; A[n] = 0; |
| 642 | ;; *B = A[n + 1]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 643 | |
| 644 | define void @p10(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp { |
| 645 | entry: |
| 646 | %idxprom = zext i32 %n to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 647 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 648 | store i32 0, i32* %arrayidx, align 4 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 649 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 650 | ; CHECK-LABEL: p10 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 651 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 652 | ; CHECK: da analyze - flow [|<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 653 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 654 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 655 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 656 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 657 | |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 658 | %add = add i32 %n, 1 |
| 659 | %idxprom1 = zext i32 %add to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 660 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %idxprom1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 661 | %0 = load i32, i32* %arrayidx2, align 4 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 662 | store i32 %0, i32* %B, align 4 |
| 663 | ret void |
| 664 | } |
Preston Briggs | 3ad3949 | 2012-11-21 23:50:04 +0000 | [diff] [blame] | 665 | |
| 666 | |
| 667 | ;;typedef struct { int v; } S; |
| 668 | ;; |
| 669 | ;;void f(S *s, unsigned size) { |
| 670 | ;; S *i = s, *e = s + size - 1; |
| 671 | ;; while (i != e) { |
| 672 | ;; *i = *(i + 1); |
| 673 | ;; ++i; |
| 674 | |
| 675 | %struct.S = type { i32 } |
| 676 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 677 | define void @foo(%struct.S* %s, i32 %size) nounwind uwtable ssp { |
Preston Briggs | 3ad3949 | 2012-11-21 23:50:04 +0000 | [diff] [blame] | 678 | entry: |
| 679 | %idx.ext = zext i32 %size to i64 |
| 680 | %add.ptr.sum = add i64 %idx.ext, -1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 681 | %add.ptr1 = getelementptr inbounds %struct.S, %struct.S* %s, i64 %add.ptr.sum |
Preston Briggs | 3ad3949 | 2012-11-21 23:50:04 +0000 | [diff] [blame] | 682 | %cmp1 = icmp eq i64 %add.ptr.sum, 0 |
| 683 | br i1 %cmp1, label %while.end, label %while.body.preheader |
| 684 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 685 | ; CHECK-LABEL: foo |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 686 | ; CHECK: da analyze - none! |
Preston Briggs | 3ad3949 | 2012-11-21 23:50:04 +0000 | [diff] [blame] | 687 | ; CHECK: da analyze - consistent anti [1]! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 688 | ; CHECK: da analyze - none! |
Preston Briggs | 3ad3949 | 2012-11-21 23:50:04 +0000 | [diff] [blame] | 689 | |
| 690 | while.body.preheader: ; preds = %entry |
| 691 | br label %while.body |
| 692 | |
| 693 | while.body: ; preds = %while.body.preheader, %while.body |
| 694 | %i.02 = phi %struct.S* [ %incdec.ptr, %while.body ], [ %s, %while.body.preheader ] |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 695 | %0 = getelementptr inbounds %struct.S, %struct.S* %i.02, i64 1, i32 0 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 696 | %1 = load i32, i32* %0, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 697 | %2 = getelementptr inbounds %struct.S, %struct.S* %i.02, i64 0, i32 0 |
Preston Briggs | 3ad3949 | 2012-11-21 23:50:04 +0000 | [diff] [blame] | 698 | store i32 %1, i32* %2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 699 | %incdec.ptr = getelementptr inbounds %struct.S, %struct.S* %i.02, i64 1 |
Preston Briggs | 3ad3949 | 2012-11-21 23:50:04 +0000 | [diff] [blame] | 700 | %cmp = icmp eq %struct.S* %incdec.ptr, %add.ptr1 |
| 701 | br i1 %cmp, label %while.end.loopexit, label %while.body |
| 702 | |
| 703 | while.end.loopexit: ; preds = %while.body |
| 704 | br label %while.end |
| 705 | |
| 706 | while.end: ; preds = %while.end.loopexit, %entry |
| 707 | ret void |
| 708 | } |
| 709 | |
Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 710 | declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) nounwind |