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