Banerjee.ll 29 KB

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