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 | |
| 7 | ;; for (long unsigned i = 0; i < 10; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 8 | ;; A[i + 10] = i; |
| 9 | ;; *B++ = A[2*i + 1]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 10 | |
| 11 | define void @exact0(i32* %A, i32* %B) nounwind uwtable ssp { |
| 12 | entry: |
| 13 | br label %for.body |
| 14 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 15 | ; CHECK-LABEL: exact0 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 16 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 17 | ; CHECK: da analyze - flow [>]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 18 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 19 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 20 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 21 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 22 | |
| 23 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 24 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 25 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 26 | %conv = trunc i64 %i.02 to i32 |
| 27 | %add = add i64 %i.02, 10 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 28 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 29 | store i32 %conv, i32* %arrayidx, align 4 |
| 30 | %mul = shl i64 %i.02, 1 |
| 31 | %add13 = or i64 %mul, 1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 32 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add13 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 33 | %0 = load i32, i32* %arrayidx2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 34 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 35 | store i32 %0, i32* %B.addr.01, align 4 |
| 36 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 37 | %exitcond = icmp ne i64 %inc, 10 |
| 38 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 39 | |
| 40 | for.end: ; preds = %for.body |
| 41 | ret void |
| 42 | } |
| 43 | |
| 44 | |
| 45 | ;; for (long unsigned i = 0; i < 10; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 46 | ;; A[4*i + 10] = i; |
| 47 | ;; *B++ = A[2*i + 1]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 48 | |
| 49 | define void @exact1(i32* %A, i32* %B) nounwind uwtable ssp { |
| 50 | entry: |
| 51 | br label %for.body |
| 52 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 53 | ; CHECK-LABEL: exact1 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 54 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 55 | ; CHECK: da analyze - none! |
| 56 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 57 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 58 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 59 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 60 | |
| 61 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 62 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 63 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 64 | %conv = trunc i64 %i.02 to i32 |
| 65 | %mul = shl i64 %i.02, 2 |
| 66 | %add = add i64 %mul, 10 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 67 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 68 | store i32 %conv, i32* %arrayidx, align 4 |
| 69 | %mul1 = shl i64 %i.02, 1 |
| 70 | %add23 = or i64 %mul1, 1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 71 | %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add23 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 72 | %0 = load i32, i32* %arrayidx3, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 73 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 74 | store i32 %0, i32* %B.addr.01, align 4 |
| 75 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 76 | %exitcond = icmp ne i64 %inc, 10 |
| 77 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 78 | |
| 79 | for.end: ; preds = %for.body |
| 80 | ret void |
| 81 | } |
| 82 | |
| 83 | |
| 84 | ;; for (long unsigned i = 0; i < 10; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 85 | ;; A[6*i] = i; |
| 86 | ;; *B++ = A[i + 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 87 | |
| 88 | define void @exact2(i32* %A, i32* %B) nounwind uwtable ssp { |
| 89 | entry: |
| 90 | br label %for.body |
| 91 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 92 | ; CHECK-LABEL: exact2 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 93 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 94 | ; CHECK: da analyze - none! |
| 95 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 96 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 97 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 98 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 99 | |
| 100 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 101 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 102 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 103 | %conv = trunc i64 %i.02 to i32 |
| 104 | %mul = mul i64 %i.02, 6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 105 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 106 | store i32 %conv, i32* %arrayidx, align 4 |
| 107 | %add = add i64 %i.02, 60 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 108 | %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 109 | %0 = load i32, i32* %arrayidx1, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 110 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 111 | store i32 %0, i32* %B.addr.01, align 4 |
| 112 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 113 | %exitcond = icmp ne i64 %inc, 10 |
| 114 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 115 | |
| 116 | for.end: ; preds = %for.body |
| 117 | ret void |
| 118 | } |
| 119 | |
| 120 | |
| 121 | ;; for (long unsigned i = 0; i <= 10; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 122 | ;; A[6*i] = i; |
| 123 | ;; *B++ = A[i + 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 124 | |
| 125 | define void @exact3(i32* %A, i32* %B) nounwind uwtable ssp { |
| 126 | entry: |
| 127 | br label %for.body |
| 128 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 129 | ; CHECK-LABEL: exact3 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 130 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 131 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 132 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 133 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 134 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 135 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 136 | |
| 137 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 138 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 139 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 140 | %conv = trunc i64 %i.02 to i32 |
| 141 | %mul = mul i64 %i.02, 6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 142 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 143 | store i32 %conv, i32* %arrayidx, align 4 |
| 144 | %add = add i64 %i.02, 60 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 145 | %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 146 | %0 = load i32, i32* %arrayidx1, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 147 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 148 | store i32 %0, i32* %B.addr.01, align 4 |
| 149 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 150 | %exitcond = icmp ne i64 %inc, 11 |
| 151 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 152 | |
| 153 | for.end: ; preds = %for.body |
| 154 | ret void |
| 155 | } |
| 156 | |
| 157 | |
| 158 | ;; for (long unsigned i = 0; i < 12; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 159 | ;; A[6*i] = i; |
| 160 | ;; *B++ = A[i + 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 161 | |
| 162 | define void @exact4(i32* %A, i32* %B) nounwind uwtable ssp { |
| 163 | entry: |
| 164 | br label %for.body |
| 165 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 166 | ; CHECK-LABEL: exact4 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 167 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 168 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 169 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 170 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 171 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 172 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 173 | |
| 174 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 175 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 176 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 177 | %conv = trunc i64 %i.02 to i32 |
| 178 | %mul = mul i64 %i.02, 6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 179 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 180 | store i32 %conv, i32* %arrayidx, align 4 |
| 181 | %add = add i64 %i.02, 60 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 182 | %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 183 | %0 = load i32, i32* %arrayidx1, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 184 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 185 | store i32 %0, i32* %B.addr.01, align 4 |
| 186 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 187 | %exitcond = icmp ne i64 %inc, 12 |
| 188 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 189 | |
| 190 | for.end: ; preds = %for.body |
| 191 | ret void |
| 192 | } |
| 193 | |
| 194 | |
| 195 | ;; for (long unsigned i = 0; i <= 12; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 196 | ;; A[6*i] = i; |
| 197 | ;; *B++ = A[i + 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 198 | |
| 199 | define void @exact5(i32* %A, i32* %B) nounwind uwtable ssp { |
| 200 | entry: |
| 201 | br label %for.body |
| 202 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 203 | ; CHECK-LABEL: exact5 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 204 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 205 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 206 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 207 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 208 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 209 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 210 | |
| 211 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 212 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 213 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 214 | %conv = trunc i64 %i.02 to i32 |
| 215 | %mul = mul i64 %i.02, 6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 216 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 217 | store i32 %conv, i32* %arrayidx, align 4 |
| 218 | %add = add i64 %i.02, 60 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 219 | %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 220 | %0 = load i32, i32* %arrayidx1, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 221 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 222 | store i32 %0, i32* %B.addr.01, align 4 |
| 223 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 224 | %exitcond = icmp ne i64 %inc, 13 |
| 225 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 226 | |
| 227 | for.end: ; preds = %for.body |
| 228 | ret void |
| 229 | } |
| 230 | |
| 231 | |
| 232 | ;; for (long unsigned i = 0; i < 18; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 233 | ;; A[6*i] = i; |
| 234 | ;; *B++ = A[i + 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 235 | |
| 236 | define void @exact6(i32* %A, i32* %B) nounwind uwtable ssp { |
| 237 | entry: |
| 238 | br label %for.body |
| 239 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 240 | ; CHECK-LABEL: exact6 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 241 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 242 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 243 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 244 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 245 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 246 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 247 | |
| 248 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 249 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 250 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 251 | %conv = trunc i64 %i.02 to i32 |
| 252 | %mul = mul i64 %i.02, 6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 253 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 254 | store i32 %conv, i32* %arrayidx, align 4 |
| 255 | %add = add i64 %i.02, 60 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 256 | %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 257 | %0 = load i32, i32* %arrayidx1, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 258 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 259 | store i32 %0, i32* %B.addr.01, align 4 |
| 260 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 261 | %exitcond = icmp ne i64 %inc, 18 |
| 262 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 263 | |
| 264 | for.end: ; preds = %for.body |
| 265 | ret void |
| 266 | } |
| 267 | |
| 268 | |
| 269 | ;; for (long unsigned i = 0; i <= 18; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 270 | ;; A[6*i] = i; |
| 271 | ;; *B++ = A[i + 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 272 | |
| 273 | define void @exact7(i32* %A, i32* %B) nounwind uwtable ssp { |
| 274 | entry: |
| 275 | br label %for.body |
| 276 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 277 | ; CHECK-LABEL: exact7 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 278 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 279 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 280 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 281 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 282 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 283 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 284 | |
| 285 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 286 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 287 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 288 | %conv = trunc i64 %i.02 to i32 |
| 289 | %mul = mul i64 %i.02, 6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 290 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 291 | store i32 %conv, i32* %arrayidx, align 4 |
| 292 | %add = add i64 %i.02, 60 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 293 | %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 294 | %0 = load i32, i32* %arrayidx1, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 295 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 296 | store i32 %0, i32* %B.addr.01, align 4 |
| 297 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 298 | %exitcond = icmp ne i64 %inc, 19 |
| 299 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 300 | |
| 301 | for.end: ; preds = %for.body |
| 302 | ret void |
| 303 | } |
| 304 | |
| 305 | |
| 306 | ;; for (long unsigned i = 0; i < 10; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 307 | ;; A[-6*i] = i; |
| 308 | ;; *B++ = A[-i - 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 309 | |
| 310 | define void @exact8(i32* %A, i32* %B) nounwind uwtable ssp { |
| 311 | entry: |
| 312 | br label %for.body |
| 313 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 314 | ; CHECK-LABEL: exact8 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 315 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 316 | ; CHECK: da analyze - none! |
| 317 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 318 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 319 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 320 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 321 | |
| 322 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 323 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 324 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 325 | %conv = trunc i64 %i.02 to i32 |
| 326 | %mul = mul i64 %i.02, -6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 327 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 328 | store i32 %conv, i32* %arrayidx, align 4 |
| 329 | %sub1 = sub i64 -60, %i.02 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 330 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 331 | %0 = load i32, i32* %arrayidx2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 332 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 333 | store i32 %0, i32* %B.addr.01, align 4 |
| 334 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 335 | %exitcond = icmp ne i64 %inc, 10 |
| 336 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 337 | |
| 338 | for.end: ; preds = %for.body |
| 339 | ret void |
| 340 | } |
| 341 | |
| 342 | |
| 343 | ;; for (long unsigned i = 0; i <= 10; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 344 | ;; A[-6*i] = i; |
| 345 | ;; *B++ = A[-i - 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 346 | |
| 347 | define void @exact9(i32* %A, i32* %B) nounwind uwtable ssp { |
| 348 | entry: |
| 349 | br label %for.body |
| 350 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 351 | ; CHECK-LABEL: exact9 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 352 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 353 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 354 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 355 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 356 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 357 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 358 | |
| 359 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 360 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 361 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 362 | %conv = trunc i64 %i.02 to i32 |
| 363 | %mul = mul i64 %i.02, -6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 364 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 365 | store i32 %conv, i32* %arrayidx, align 4 |
| 366 | %sub1 = sub i64 -60, %i.02 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 367 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 368 | %0 = load i32, i32* %arrayidx2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 369 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 370 | store i32 %0, i32* %B.addr.01, align 4 |
| 371 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 372 | %exitcond = icmp ne i64 %inc, 11 |
| 373 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 374 | |
| 375 | for.end: ; preds = %for.body |
| 376 | ret void |
| 377 | } |
| 378 | |
| 379 | |
| 380 | ;; for (long unsigned i = 0; i < 12; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 381 | ;; A[-6*i] = i; |
| 382 | ;; *B++ = A[-i - 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 383 | |
| 384 | define void @exact10(i32* %A, i32* %B) nounwind uwtable ssp { |
| 385 | entry: |
| 386 | br label %for.body |
| 387 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 388 | ; CHECK-LABEL: exact10 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 389 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 390 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 391 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 392 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 393 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 394 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 395 | |
| 396 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 397 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 398 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 399 | %conv = trunc i64 %i.02 to i32 |
| 400 | %mul = mul i64 %i.02, -6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 401 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 402 | store i32 %conv, i32* %arrayidx, align 4 |
| 403 | %sub1 = sub i64 -60, %i.02 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 404 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 405 | %0 = load i32, i32* %arrayidx2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 406 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 407 | store i32 %0, i32* %B.addr.01, align 4 |
| 408 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 409 | %exitcond = icmp ne i64 %inc, 12 |
| 410 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 411 | |
| 412 | for.end: ; preds = %for.body |
| 413 | ret void |
| 414 | } |
| 415 | |
| 416 | |
| 417 | ;; for (long unsigned i = 0; i <= 12; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 418 | ;; A[-6*i] = i; |
| 419 | ;; *B++ = A[-i - 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 420 | |
| 421 | define void @exact11(i32* %A, i32* %B) nounwind uwtable ssp { |
| 422 | entry: |
| 423 | br label %for.body |
| 424 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 425 | ; CHECK-LABEL: exact11 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 426 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 427 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 428 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 429 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 430 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 431 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 432 | |
| 433 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 434 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 435 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 436 | %conv = trunc i64 %i.02 to i32 |
| 437 | %mul = mul i64 %i.02, -6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 438 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 439 | store i32 %conv, i32* %arrayidx, align 4 |
| 440 | %sub1 = sub i64 -60, %i.02 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 441 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 442 | %0 = load i32, i32* %arrayidx2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 443 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 444 | store i32 %0, i32* %B.addr.01, align 4 |
| 445 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 446 | %exitcond = icmp ne i64 %inc, 13 |
| 447 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 448 | |
| 449 | for.end: ; preds = %for.body |
| 450 | ret void |
| 451 | } |
| 452 | |
| 453 | |
| 454 | ;; for (long unsigned i = 0; i < 18; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 455 | ;; A[-6*i] = i; |
| 456 | ;; *B++ = A[-i - 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 457 | |
| 458 | define void @exact12(i32* %A, i32* %B) nounwind uwtable ssp { |
| 459 | entry: |
| 460 | br label %for.body |
| 461 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 462 | ; CHECK-LABEL: exact12 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 463 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 464 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 465 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 466 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 467 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 468 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 469 | |
| 470 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 471 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 472 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 473 | %conv = trunc i64 %i.02 to i32 |
| 474 | %mul = mul i64 %i.02, -6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 475 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 476 | store i32 %conv, i32* %arrayidx, align 4 |
| 477 | %sub1 = sub i64 -60, %i.02 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 478 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 479 | %0 = load i32, i32* %arrayidx2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 480 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 481 | store i32 %0, i32* %B.addr.01, align 4 |
| 482 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 483 | %exitcond = icmp ne i64 %inc, 18 |
| 484 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 485 | |
| 486 | for.end: ; preds = %for.body |
| 487 | ret void |
| 488 | } |
| 489 | |
| 490 | |
| 491 | ;; for (long unsigned i = 0; i <= 18; i++) { |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 492 | ;; A[-6*i] = i; |
| 493 | ;; *B++ = A[-i - 60]; |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 494 | |
| 495 | define void @exact13(i32* %A, i32* %B) nounwind uwtable ssp { |
| 496 | entry: |
| 497 | br label %for.body |
| 498 | |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 499 | ; CHECK-LABEL: exact13 |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 500 | ; CHECK: da analyze - none! |
Sebastian Pop | bf6e1c2 | 2018-03-06 21:55:59 +0000 | [diff] [blame] | 501 | ; CHECK: da analyze - flow [<]! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 502 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 503 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 504 | ; CHECK: da analyze - confused! |
Preston Briggs | 5cb8cfa | 2012-11-27 19:12:26 +0000 | [diff] [blame] | 505 | ; CHECK: da analyze - none! |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 506 | |
| 507 | for.body: ; preds = %entry, %for.body |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 508 | %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| 509 | %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] |
| 510 | %conv = trunc i64 %i.02 to i32 |
| 511 | %mul = mul i64 %i.02, -6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 512 | %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 513 | store i32 %conv, i32* %arrayidx, align 4 |
| 514 | %sub1 = sub i64 -60, %i.02 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 515 | %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 516 | %0 = load i32, i32* %arrayidx2, align 4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 517 | %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 518 | store i32 %0, i32* %B.addr.01, align 4 |
| 519 | %inc = add i64 %i.02, 1 |
Benjamin Kramer | 3eb1563 | 2012-11-13 12:12:02 +0000 | [diff] [blame] | 520 | %exitcond = icmp ne i64 %inc, 19 |
| 521 | br i1 %exitcond, label %for.body, label %for.end |
Sebastian Pop | 59b61b9 | 2012-10-11 07:32:34 +0000 | [diff] [blame] | 522 | |
| 523 | for.end: ; preds = %for.body |
| 524 | ret void |
| 525 | } |