Home | History | Annotate | Download | only in DependenceAnalysis
      1 ; RUN: opt < %s -analyze -basicaa -da -da-delinearize=false | FileCheck %s
      2 ; RUN: opt < %s -analyze -basicaa -da | FileCheck %s -check-prefix=DELIN
      3 
      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 int i = 1; i <= 10; i++)
      9 ;;    for (long int j = 1; j <= 10; j++) {
     10 ;;      A[10*i + j] = 0;
     11 ;;      *B++ = A[10*i + j - 1];
     12 
     13 define void @banerjee0(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
     14 entry:
     15   br label %for.cond1.preheader
     16 ; CHECK: 'Dependence Analysis' for function 'banerjee0':
     17 ; CHECK: da analyze - none!
     18 ; CHECK: da analyze - flow [<= <>]!
     19 ; CHECK: da analyze - confused!
     20 ; CHECK: da analyze - none!
     21 ; CHECK: da analyze - confused!
     22 ; CHECK: da analyze - none!
     23 
     24 ; DELIN: 'Dependence Analysis' for function 'banerjee0':
     25 ; DELIN: da analyze - none!
     26 ; DELIN: da analyze - flow [<= <>]!
     27 ; DELIN: da analyze - confused!
     28 ; DELIN: da analyze - none!
     29 ; DELIN: da analyze - confused!
     30 ; DELIN: da analyze - none!
     31 
     32 for.cond1.preheader:                              ; preds = %entry, %for.inc7
     33   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
     34   %i.03 = phi i64 [ 1, %entry ], [ %inc8, %for.inc7 ]
     35   br label %for.body3
     36 
     37 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
     38   %j.02 = phi i64 [ 1, %for.cond1.preheader ], [ %inc, %for.body3 ]
     39   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
     40   %mul = mul nsw i64 %i.03, 10
     41   %add = add nsw i64 %mul, %j.02
     42   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
     43   store i64 0, i64* %arrayidx, align 8
     44   %mul4 = mul nsw i64 %i.03, 10
     45   %add5 = add nsw i64 %mul4, %j.02
     46   %sub = add nsw i64 %add5, -1
     47   %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
     48   %0 = load i64, i64* %arrayidx6, align 8
     49   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
     50   store i64 %0, i64* %B.addr.11, align 8
     51   %inc = add nsw i64 %j.02, 1
     52   %exitcond = icmp ne i64 %inc, 11
     53   br i1 %exitcond, label %for.body3, label %for.inc7
     54 
     55 for.inc7:                                         ; preds = %for.body3
     56   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
     57   %inc8 = add nsw i64 %i.03, 1
     58   %exitcond5 = icmp ne i64 %inc8, 11
     59   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
     60 
     61 for.end9:                                         ; preds = %for.inc7
     62   ret void
     63 }
     64 
     65 
     66 ;;  for (long int i = 1; i <= n; i++)
     67 ;;    for (long int j = 1; j <= m; j++) {
     68 ;;      A[10*i + j] = 0;
     69 ;;      *B++ = A[10*i + j - 1];
     70 
     71 define void @banerjee1(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
     72 entry:
     73   %cmp4 = icmp sgt i64 %n, 0
     74   br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end9
     75 
     76 ; CHECK: 'Dependence Analysis' for function 'banerjee1':
     77 ; CHECK: da analyze - output [* *]!
     78 ; CHECK: da analyze - flow [* <>]!
     79 ; CHECK: da analyze - confused!
     80 ; CHECK: da analyze - input [* *]!
     81 ; CHECK: da analyze - confused!
     82 ; CHECK: da analyze - output [* *]!
     83 
     84 ; DELIN: 'Dependence Analysis' for function 'banerjee1':
     85 ; DELIN: da analyze - output [* *]!
     86 ; DELIN: da analyze - flow [* <>]!
     87 ; DELIN: da analyze - confused!
     88 ; DELIN: da analyze - input [* *]!
     89 ; DELIN: da analyze - confused!
     90 ; DELIN: da analyze - output [* *]!
     91 
     92 for.cond1.preheader.preheader:                    ; preds = %entry
     93   %0 = add i64 %n, 1
     94   br label %for.cond1.preheader
     95 
     96 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc7
     97   %B.addr.06 = phi i64* [ %B.addr.1.lcssa, %for.inc7 ], [ %B, %for.cond1.preheader.preheader ]
     98   %i.05 = phi i64 [ %inc8, %for.inc7 ], [ 1, %for.cond1.preheader.preheader ]
     99   %1 = add i64 %m, 1
    100   %cmp21 = icmp sgt i64 %m, 0
    101   br i1 %cmp21, label %for.body3.preheader, label %for.inc7
    102 
    103 for.body3.preheader:                              ; preds = %for.cond1.preheader
    104   br label %for.body3
    105 
    106 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
    107   %j.03 = phi i64 [ %inc, %for.body3 ], [ 1, %for.body3.preheader ]
    108   %B.addr.12 = phi i64* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
    109   %mul = mul nsw i64 %i.05, 10
    110   %add = add nsw i64 %mul, %j.03
    111   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    112   store i64 0, i64* %arrayidx, align 8
    113   %mul4 = mul nsw i64 %i.05, 10
    114   %add5 = add nsw i64 %mul4, %j.03
    115   %sub = add nsw i64 %add5, -1
    116   %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
    117   %2 = load i64, i64* %arrayidx6, align 8
    118   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.12, i64 1
    119   store i64 %2, i64* %B.addr.12, align 8
    120   %inc = add nsw i64 %j.03, 1
    121   %exitcond = icmp eq i64 %inc, %1
    122   br i1 %exitcond, label %for.inc7.loopexit, label %for.body3
    123 
    124 for.inc7.loopexit:                                ; preds = %for.body3
    125   %scevgep = getelementptr i64, i64* %B.addr.06, i64 %m
    126   br label %for.inc7
    127 
    128 for.inc7:                                         ; preds = %for.inc7.loopexit, %for.cond1.preheader
    129   %B.addr.1.lcssa = phi i64* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc7.loopexit ]
    130   %inc8 = add nsw i64 %i.05, 1
    131   %exitcond7 = icmp eq i64 %inc8, %0
    132   br i1 %exitcond7, label %for.end9.loopexit, label %for.cond1.preheader
    133 
    134 for.end9.loopexit:                                ; preds = %for.inc7
    135   br label %for.end9
    136 
    137 for.end9:                                         ; preds = %for.end9.loopexit, %entry
    138   ret void
    139 }
    140 
    141 
    142 ;;  for (long int i = 0; i < 10; i++)
    143 ;;    for (long int j = 0; j < 10; j++) {
    144 ;;      A[10*i + j] = 0;
    145 ;;      *B++ = A[10*i + j + 100];
    146 
    147 define void @banerjee2(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    148 entry:
    149   br label %for.cond1.preheader
    150 
    151 ; CHECK: 'Dependence Analysis' for function 'banerjee2':
    152 ; CHECK: da analyze - none!
    153 ; CHECK: da analyze - none!
    154 ; CHECK: da analyze - confused!
    155 ; CHECK: da analyze - none!
    156 ; CHECK: da analyze - confused!
    157 ; CHECK: da analyze - none!
    158 
    159 ; DELIN: 'Dependence Analysis' for function 'banerjee2':
    160 ; DELIN: da analyze - none!
    161 ; DELIN: da analyze - none!
    162 ; DELIN: da analyze - confused!
    163 ; DELIN: da analyze - none!
    164 ; DELIN: da analyze - confused!
    165 ; DELIN: da analyze - none!
    166 
    167 for.cond1.preheader:                              ; preds = %entry, %for.inc8
    168   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
    169   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
    170   br label %for.body3
    171 
    172 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    173   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    174   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    175   %mul = mul nsw i64 %i.03, 10
    176   %add = add nsw i64 %mul, %j.02
    177   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    178   store i64 0, i64* %arrayidx, align 8
    179   %mul4 = mul nsw i64 %i.03, 10
    180   %add5 = add nsw i64 %mul4, %j.02
    181   %add6 = add nsw i64 %add5, 100
    182   %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
    183   %0 = load i64, i64* %arrayidx7, align 8
    184   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    185   store i64 %0, i64* %B.addr.11, align 8
    186   %inc = add nsw i64 %j.02, 1
    187   %exitcond = icmp ne i64 %inc, 10
    188   br i1 %exitcond, label %for.body3, label %for.inc8
    189 
    190 for.inc8:                                         ; preds = %for.body3
    191   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
    192   %inc9 = add nsw i64 %i.03, 1
    193   %exitcond5 = icmp ne i64 %inc9, 10
    194   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
    195 
    196 for.end10:                                        ; preds = %for.inc8
    197   ret void
    198 }
    199 
    200 
    201 ;;  for (long int i = 0; i < 10; i++)
    202 ;;    for (long int j = 0; j < 10; j++) {
    203 ;;      A[10*i + j] = 0;
    204 ;;      *B++ = A[10*i + j + 99];
    205 
    206 define void @banerjee3(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    207 entry:
    208   br label %for.cond1.preheader
    209 
    210 ; CHECK: 'Dependence Analysis' for function 'banerjee3':
    211 ; CHECK: da analyze - none!
    212 ; CHECK: da analyze - flow [> >]!
    213 ; CHECK: da analyze - confused!
    214 ; CHECK: da analyze - none!
    215 ; CHECK: da analyze - confused!
    216 ; CHECK: da analyze - none!
    217 
    218 ; DELIN: 'Dependence Analysis' for function 'banerjee3':
    219 ; DELIN: da analyze - none!
    220 ; DELIN: da analyze - flow [> >]!
    221 ; DELIN: da analyze - confused!
    222 ; DELIN: da analyze - none!
    223 ; DELIN: da analyze - confused!
    224 ; DELIN: da analyze - none!
    225 
    226 for.cond1.preheader:                              ; preds = %entry, %for.inc8
    227   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
    228   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
    229   br label %for.body3
    230 
    231 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    232   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    233   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    234   %mul = mul nsw i64 %i.03, 10
    235   %add = add nsw i64 %mul, %j.02
    236   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    237   store i64 0, i64* %arrayidx, align 8
    238   %mul4 = mul nsw i64 %i.03, 10
    239   %add5 = add nsw i64 %mul4, %j.02
    240   %add6 = add nsw i64 %add5, 99
    241   %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
    242   %0 = load i64, i64* %arrayidx7, align 8
    243   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    244   store i64 %0, i64* %B.addr.11, align 8
    245   %inc = add nsw i64 %j.02, 1
    246   %exitcond = icmp ne i64 %inc, 10
    247   br i1 %exitcond, label %for.body3, label %for.inc8
    248 
    249 for.inc8:                                         ; preds = %for.body3
    250   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
    251   %inc9 = add nsw i64 %i.03, 1
    252   %exitcond5 = icmp ne i64 %inc9, 10
    253   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
    254 
    255 for.end10:                                        ; preds = %for.inc8
    256   ret void
    257 }
    258 
    259 
    260 ;;  for (long int i = 0; i < 10; i++)
    261 ;;    for (long int j = 0; j < 10; j++) {
    262 ;;      A[10*i + j] = 0;
    263 ;;      *B++ = A[10*i + j - 100];
    264 
    265 define void @banerjee4(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    266 entry:
    267   br label %for.cond1.preheader
    268 
    269 ; CHECK: 'Dependence Analysis' for function 'banerjee4':
    270 ; CHECK: da analyze - none!
    271 ; CHECK: da analyze - none!
    272 ; CHECK: da analyze - confused!
    273 ; CHECK: da analyze - none!
    274 ; CHECK: da analyze - confused!
    275 ; CHECK: da analyze - none!
    276 
    277 ; DELIN: 'Dependence Analysis' for function 'banerjee4':
    278 ; DELIN: da analyze - none!
    279 ; DELIN: da analyze - none!
    280 ; DELIN: da analyze - confused!
    281 ; DELIN: da analyze - none!
    282 ; DELIN: da analyze - confused!
    283 ; DELIN: da analyze - none!
    284 
    285 for.cond1.preheader:                              ; preds = %entry, %for.inc7
    286   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
    287   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
    288   br label %for.body3
    289 
    290 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    291   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    292   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    293   %mul = mul nsw i64 %i.03, 10
    294   %add = add nsw i64 %mul, %j.02
    295   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    296   store i64 0, i64* %arrayidx, align 8
    297   %mul4 = mul nsw i64 %i.03, 10
    298   %add5 = add nsw i64 %mul4, %j.02
    299   %sub = add nsw i64 %add5, -100
    300   %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
    301   %0 = load i64, i64* %arrayidx6, align 8
    302   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    303   store i64 %0, i64* %B.addr.11, align 8
    304   %inc = add nsw i64 %j.02, 1
    305   %exitcond = icmp ne i64 %inc, 10
    306   br i1 %exitcond, label %for.body3, label %for.inc7
    307 
    308 for.inc7:                                         ; preds = %for.body3
    309   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
    310   %inc8 = add nsw i64 %i.03, 1
    311   %exitcond5 = icmp ne i64 %inc8, 10
    312   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
    313 
    314 for.end9:                                         ; preds = %for.inc7
    315   ret void
    316 }
    317 
    318 
    319 ;;  for (long int i = 0; i < 10; i++)
    320 ;;    for (long int j = 0; j < 10; j++) {
    321 ;;      A[10*i + j] = 0;
    322 ;;      *B++ = A[10*i + j - 99];
    323 
    324 define void @banerjee5(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    325 entry:
    326   br label %for.cond1.preheader
    327 
    328 ; CHECK: 'Dependence Analysis' for function 'banerjee5':
    329 ; CHECK: da analyze - none!
    330 ; CHECK: da analyze - flow [< <]!
    331 ; CHECK: da analyze - confused!
    332 ; CHECK: da analyze - none!
    333 ; CHECK: da analyze - confused!
    334 ; CHECK: da analyze - none!
    335 
    336 ; DELIN: 'Dependence Analysis' for function 'banerjee5':
    337 ; DELIN: da analyze - none!
    338 ; DELIN: da analyze - flow [< <]!
    339 ; DELIN: da analyze - confused!
    340 ; DELIN: da analyze - none!
    341 ; DELIN: da analyze - confused!
    342 ; DELIN: da analyze - none!
    343 
    344 for.cond1.preheader:                              ; preds = %entry, %for.inc7
    345   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
    346   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
    347   br label %for.body3
    348 
    349 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    350   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    351   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    352   %mul = mul nsw i64 %i.03, 10
    353   %add = add nsw i64 %mul, %j.02
    354   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    355   store i64 0, i64* %arrayidx, align 8
    356   %mul4 = mul nsw i64 %i.03, 10
    357   %add5 = add nsw i64 %mul4, %j.02
    358   %sub = add nsw i64 %add5, -99
    359   %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub
    360   %0 = load i64, i64* %arrayidx6, align 8
    361   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    362   store i64 %0, i64* %B.addr.11, align 8
    363   %inc = add nsw i64 %j.02, 1
    364   %exitcond = icmp ne i64 %inc, 10
    365   br i1 %exitcond, label %for.body3, label %for.inc7
    366 
    367 for.inc7:                                         ; preds = %for.body3
    368   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
    369   %inc8 = add nsw i64 %i.03, 1
    370   %exitcond5 = icmp ne i64 %inc8, 10
    371   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
    372 
    373 for.end9:                                         ; preds = %for.inc7
    374   ret void
    375 }
    376 
    377 
    378 ;;  for (long int i = 0; i < 10; i++)
    379 ;;    for (long int j = 0; j < 10; j++) {
    380 ;;      A[10*i + j] = 0;
    381 ;;      *B++ = A[10*i + j + 9];
    382 
    383 define void @banerjee6(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    384 entry:
    385   br label %for.cond1.preheader
    386 
    387 ; CHECK: 'Dependence Analysis' for function 'banerjee6':
    388 ; CHECK: da analyze - none!
    389 ; CHECK: da analyze - flow [=> <>]!
    390 ; CHECK: da analyze - confused!
    391 ; CHECK: da analyze - none!
    392 ; CHECK: da analyze - confused!
    393 ; CHECK: da analyze - none!
    394 
    395 ; DELIN: 'Dependence Analysis' for function 'banerjee6':
    396 ; DELIN: da analyze - none!
    397 ; DELIN: da analyze - flow [=> <>]!
    398 ; DELIN: da analyze - confused!
    399 ; DELIN: da analyze - none!
    400 ; DELIN: da analyze - confused!
    401 ; DELIN: da analyze - none!
    402 
    403 for.cond1.preheader:                              ; preds = %entry, %for.inc8
    404   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
    405   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
    406   br label %for.body3
    407 
    408 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    409   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    410   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    411   %mul = mul nsw i64 %i.03, 10
    412   %add = add nsw i64 %mul, %j.02
    413   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    414   store i64 0, i64* %arrayidx, align 8
    415   %mul4 = mul nsw i64 %i.03, 10
    416   %add5 = add nsw i64 %mul4, %j.02
    417   %add6 = add nsw i64 %add5, 9
    418   %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
    419   %0 = load i64, i64* %arrayidx7, align 8
    420   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    421   store i64 %0, i64* %B.addr.11, align 8
    422   %inc = add nsw i64 %j.02, 1
    423   %exitcond = icmp ne i64 %inc, 10
    424   br i1 %exitcond, label %for.body3, label %for.inc8
    425 
    426 for.inc8:                                         ; preds = %for.body3
    427   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
    428   %inc9 = add nsw i64 %i.03, 1
    429   %exitcond5 = icmp ne i64 %inc9, 10
    430   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
    431 
    432 for.end10:                                        ; preds = %for.inc8
    433   ret void
    434 }
    435 
    436 
    437 ;;  for (long int i = 0; i < 10; i++)
    438 ;;    for (long int j = 0; j < 10; j++) {
    439 ;;      A[10*i + j] = 0;
    440 ;;      *B++ = A[10*i + j + 10];
    441 
    442 define void @banerjee7(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    443 entry:
    444   br label %for.cond1.preheader
    445 
    446 ; CHECK: 'Dependence Analysis' for function 'banerjee7':
    447 ; CHECK: da analyze - none!
    448 ; CHECK: da analyze - flow [> <=]!
    449 ; CHECK: da analyze - confused!
    450 ; CHECK: da analyze - none!
    451 ; CHECK: da analyze - confused!
    452 ; CHECK: da analyze - none!
    453 
    454 ; DELIN: 'Dependence Analysis' for function 'banerjee7':
    455 ; DELIN: da analyze - none!
    456 ; DELIN: da analyze - flow [> <=]!
    457 ; DELIN: da analyze - confused!
    458 ; DELIN: da analyze - none!
    459 ; DELIN: da analyze - confused!
    460 ; DELIN: da analyze - none!
    461 
    462 for.cond1.preheader:                              ; preds = %entry, %for.inc8
    463   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
    464   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
    465   br label %for.body3
    466 
    467 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    468   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    469   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    470   %mul = mul nsw i64 %i.03, 10
    471   %add = add nsw i64 %mul, %j.02
    472   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    473   store i64 0, i64* %arrayidx, align 8
    474   %mul4 = mul nsw i64 %i.03, 10
    475   %add5 = add nsw i64 %mul4, %j.02
    476   %add6 = add nsw i64 %add5, 10
    477   %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
    478   %0 = load i64, i64* %arrayidx7, align 8
    479   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    480   store i64 %0, i64* %B.addr.11, align 8
    481   %inc = add nsw i64 %j.02, 1
    482   %exitcond = icmp ne i64 %inc, 10
    483   br i1 %exitcond, label %for.body3, label %for.inc8
    484 
    485 for.inc8:                                         ; preds = %for.body3
    486   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
    487   %inc9 = add nsw i64 %i.03, 1
    488   %exitcond5 = icmp ne i64 %inc9, 10
    489   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
    490 
    491 for.end10:                                        ; preds = %for.inc8
    492   ret void
    493 }
    494 
    495 
    496 ;;  for (long int i = 0; i < 10; i++)
    497 ;;    for (long int j = 0; j < 10; j++) {
    498 ;;      A[10*i + j] = 0;
    499 ;;      *B++ = A[10*i + j + 11];
    500 
    501 define void @banerjee8(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    502 entry:
    503   br label %for.cond1.preheader
    504 
    505 ; CHECK: 'Dependence Analysis' for function 'banerjee8':
    506 ; CHECK: da analyze - none!
    507 ; CHECK: da analyze - flow [> <>]!
    508 ; CHECK: da analyze - confused!
    509 ; CHECK: da analyze - none!
    510 ; CHECK: da analyze - confused!
    511 ; CHECK: da analyze - none!
    512 
    513 ; DELIN: 'Dependence Analysis' for function 'banerjee8':
    514 ; DELIN: da analyze - none!
    515 ; DELIN: da analyze - flow [> <>]!
    516 ; DELIN: da analyze - confused!
    517 ; DELIN: da analyze - none!
    518 ; DELIN: da analyze - confused!
    519 ; DELIN: da analyze - none!
    520 
    521 for.cond1.preheader:                              ; preds = %entry, %for.inc8
    522   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
    523   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
    524   br label %for.body3
    525 
    526 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    527   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    528   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    529   %mul = mul nsw i64 %i.03, 10
    530   %add = add nsw i64 %mul, %j.02
    531   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    532   store i64 0, i64* %arrayidx, align 8
    533   %mul4 = mul nsw i64 %i.03, 10
    534   %add5 = add nsw i64 %mul4, %j.02
    535   %add6 = add nsw i64 %add5, 11
    536   %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
    537   %0 = load i64, i64* %arrayidx7, align 8
    538   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    539   store i64 %0, i64* %B.addr.11, align 8
    540   %inc = add nsw i64 %j.02, 1
    541   %exitcond = icmp ne i64 %inc, 10
    542   br i1 %exitcond, label %for.body3, label %for.inc8
    543 
    544 for.inc8:                                         ; preds = %for.body3
    545   %scevgep = getelementptr i64, i64* %B.addr.04, i64 10
    546   %inc9 = add nsw i64 %i.03, 1
    547   %exitcond5 = icmp ne i64 %inc9, 10
    548   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
    549 
    550 for.end10:                                        ; preds = %for.inc8
    551   ret void
    552 }
    553 
    554 
    555 ;;  for (long int i = 0; i < 20; i++)
    556 ;;    for (long int j = 0; j < 20; j++) {
    557 ;;      A[30*i + 500*j] = 0;
    558 ;;      *B++ = A[i - 500*j + 11];
    559 
    560 define void @banerjee9(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    561 entry:
    562   br label %for.cond1.preheader
    563 
    564 ; CHECK: 'Dependence Analysis' for function 'banerjee9':
    565 ; CHECK: da analyze - output [* *]!
    566 ; CHECK: da analyze - flow [<= =|<]!
    567 ; CHECK: da analyze - confused!
    568 ; CHECK: da analyze - none!
    569 ; CHECK: da analyze - confused!
    570 ; CHECK: da analyze - none!
    571 
    572 ; DELIN: 'Dependence Analysis' for function 'banerjee9':
    573 ; DELIN: da analyze - output [* *]!
    574 ; DELIN: da analyze - flow [<= =|<]!
    575 ; DELIN: da analyze - confused!
    576 ; DELIN: da analyze - none!
    577 ; DELIN: da analyze - confused!
    578 ; DELIN: da analyze - none!
    579 
    580 for.cond1.preheader:                              ; preds = %entry, %for.inc8
    581   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
    582   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
    583   br label %for.body3
    584 
    585 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    586   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    587   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    588   %mul = mul nsw i64 %i.03, 30
    589   %mul4 = mul nsw i64 %j.02, 500
    590   %add = add nsw i64 %mul, %mul4
    591   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    592   store i64 0, i64* %arrayidx, align 8
    593   %0 = mul i64 %j.02, -500
    594   %sub = add i64 %i.03, %0
    595   %add6 = add nsw i64 %sub, 11
    596   %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6
    597   %1 = load i64, i64* %arrayidx7, align 8
    598   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    599   store i64 %1, i64* %B.addr.11, align 8
    600   %inc = add nsw i64 %j.02, 1
    601   %exitcond = icmp ne i64 %inc, 20
    602   br i1 %exitcond, label %for.body3, label %for.inc8
    603 
    604 for.inc8:                                         ; preds = %for.body3
    605   %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
    606   %inc9 = add nsw i64 %i.03, 1
    607   %exitcond5 = icmp ne i64 %inc9, 20
    608   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
    609 
    610 for.end10:                                        ; preds = %for.inc8
    611   ret void
    612 }
    613 
    614 
    615 ;;  for (long int i = 0; i < 20; i++)
    616 ;;    for (long int j = 0; j < 20; j++) {
    617 ;;      A[i + 500*j] = 0;
    618 ;;      *B++ = A[i - 500*j + 11];
    619 
    620 define void @banerjee10(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    621 entry:
    622   br label %for.cond1.preheader
    623 
    624 ; CHECK: 'Dependence Analysis' for function 'banerjee10':
    625 ; CHECK: da analyze - none!
    626 ; CHECK: da analyze - flow [<> =]!
    627 ; CHECK: da analyze - confused!
    628 ; CHECK: da analyze - none!
    629 ; CHECK: da analyze - confused!
    630 ; CHECK: da analyze - none!
    631 
    632 ; DELIN: 'Dependence Analysis' for function 'banerjee10':
    633 ; DELIN: da analyze - none!
    634 ; DELIN: da analyze - flow [<> =]!
    635 ; DELIN: da analyze - confused!
    636 ; DELIN: da analyze - none!
    637 ; DELIN: da analyze - confused!
    638 ; DELIN: da analyze - none!
    639 
    640 for.cond1.preheader:                              ; preds = %entry, %for.inc7
    641   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
    642   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
    643   br label %for.body3
    644 
    645 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    646   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    647   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    648   %mul = mul nsw i64 %j.02, 500
    649   %add = add nsw i64 %i.03, %mul
    650   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    651   store i64 0, i64* %arrayidx, align 8
    652   %0 = mul i64 %j.02, -500
    653   %sub = add i64 %i.03, %0
    654   %add5 = add nsw i64 %sub, 11
    655   %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5
    656   %1 = load i64, i64* %arrayidx6, align 8
    657   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    658   store i64 %1, i64* %B.addr.11, align 8
    659   %inc = add nsw i64 %j.02, 1
    660   %exitcond = icmp ne i64 %inc, 20
    661   br i1 %exitcond, label %for.body3, label %for.inc7
    662 
    663 for.inc7:                                         ; preds = %for.body3
    664   %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
    665   %inc8 = add nsw i64 %i.03, 1
    666   %exitcond5 = icmp ne i64 %inc8, 20
    667   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
    668 
    669 for.end9:                                         ; preds = %for.inc7
    670   ret void
    671 }
    672 
    673 
    674 ;;  for (long int i = 0; i < 20; i++)
    675 ;;    for (long int j = 0; j < 20; j++) {
    676 ;;      A[300*i + j] = 0;
    677 ;;      *B++ = A[250*i - j + 11];
    678 
    679 define void @banerjee11(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    680 entry:
    681   br label %for.cond1.preheader
    682 
    683 ; CHECK: 'Dependence Analysis' for function 'banerjee11':
    684 ; CHECK: da analyze - none!
    685 ; CHECK: da analyze - flow [<= <>]!
    686 ; CHECK: da analyze - confused!
    687 ; CHECK: da analyze - none!
    688 ; CHECK: da analyze - confused!
    689 ; CHECK: da analyze - none!
    690 
    691 ; DELIN: 'Dependence Analysis' for function 'banerjee11':
    692 ; DELIN: da analyze - none!
    693 ; DELIN: da analyze - flow [<= <>]!
    694 ; DELIN: da analyze - confused!
    695 ; DELIN: da analyze - none!
    696 ; DELIN: da analyze - confused!
    697 ; DELIN: da analyze - none!
    698 
    699 for.cond1.preheader:                              ; preds = %entry, %for.inc7
    700   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
    701   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
    702   br label %for.body3
    703 
    704 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    705   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    706   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    707   %mul = mul nsw i64 %i.03, 300
    708   %add = add nsw i64 %mul, %j.02
    709   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    710   store i64 0, i64* %arrayidx, align 8
    711   %mul4 = mul nsw i64 %i.03, 250
    712   %sub = sub nsw i64 %mul4, %j.02
    713   %add5 = add nsw i64 %sub, 11
    714   %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5
    715   %0 = load i64, i64* %arrayidx6, align 8
    716   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    717   store i64 %0, i64* %B.addr.11, align 8
    718   %inc = add nsw i64 %j.02, 1
    719   %exitcond = icmp ne i64 %inc, 20
    720   br i1 %exitcond, label %for.body3, label %for.inc7
    721 
    722 for.inc7:                                         ; preds = %for.body3
    723   %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
    724   %inc8 = add nsw i64 %i.03, 1
    725   %exitcond5 = icmp ne i64 %inc8, 20
    726   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
    727 
    728 for.end9:                                         ; preds = %for.inc7
    729   ret void
    730 }
    731 
    732 
    733 ;;  for (long int i = 0; i < 20; i++)
    734 ;;    for (long int j = 0; j < 20; j++) {
    735 ;;      A[100*i + j] = 0;
    736 ;;      *B++ = A[100*i - j + 11];
    737 
    738 define void @banerjee12(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
    739 entry:
    740   br label %for.cond1.preheader
    741 
    742 ; CHECK: 'Dependence Analysis' for function 'banerjee12':
    743 ; CHECK: da analyze - none!
    744 ; CHECK: da analyze - flow [= <>]!
    745 ; CHECK: da analyze - confused!
    746 ; CHECK: da analyze - none!
    747 ; CHECK: da analyze - confused!
    748 ; CHECK: da analyze - none!
    749 
    750 ; DELIN: 'Dependence Analysis' for function 'banerjee12':
    751 ; DELIN: da analyze - none!
    752 ; DELIN: da analyze - flow [= <>]!
    753 ; DELIN: da analyze - confused!
    754 ; DELIN: da analyze - none!
    755 ; DELIN: da analyze - confused!
    756 ; DELIN: da analyze - none!
    757 
    758 for.cond1.preheader:                              ; preds = %entry, %for.inc7
    759   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
    760   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
    761   br label %for.body3
    762 
    763 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
    764   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
    765   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
    766   %mul = mul nsw i64 %i.03, 100
    767   %add = add nsw i64 %mul, %j.02
    768   %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add
    769   store i64 0, i64* %arrayidx, align 8
    770   %mul4 = mul nsw i64 %i.03, 100
    771   %sub = sub nsw i64 %mul4, %j.02
    772   %add5 = add nsw i64 %sub, 11
    773   %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5
    774   %0 = load i64, i64* %arrayidx6, align 8
    775   %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1
    776   store i64 %0, i64* %B.addr.11, align 8
    777   %inc = add nsw i64 %j.02, 1
    778   %exitcond = icmp ne i64 %inc, 20
    779   br i1 %exitcond, label %for.body3, label %for.inc7
    780 
    781 for.inc7:                                         ; preds = %for.body3
    782   %scevgep = getelementptr i64, i64* %B.addr.04, i64 20
    783   %inc8 = add nsw i64 %i.03, 1
    784   %exitcond5 = icmp ne i64 %inc8, 20
    785   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
    786 
    787 for.end9:                                         ; preds = %for.inc7
    788   ret void
    789 }
    790