indirectbr.ll 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. ; RUN: opt < %s -loop-simplify -lcssa -verify-loop-info -verify-dom-info -S | FileCheck %s
  2. ; LCSSA should work correctly in the case of an indirectbr that exits
  3. ; the loop, and the loop has exits with predecessors not within the loop
  4. ; (and btw these edges are unsplittable due to the indirectbr).
  5. ; PR5437
  6. define i32 @test0() nounwind {
  7. ; CHECK-LABEL: @test0
  8. entry:
  9. br i1 undef, label %"4", label %"3"
  10. "3": ; preds = %entry
  11. ret i32 0
  12. "4": ; preds = %entry
  13. br i1 undef, label %"6", label %"5"
  14. "5": ; preds = %"4"
  15. unreachable
  16. "6": ; preds = %"4"
  17. br i1 undef, label %"10", label %"13"
  18. "10": ; preds = %"6"
  19. br i1 undef, label %"22", label %"15"
  20. "13": ; preds = %"6"
  21. unreachable
  22. "15": ; preds = %"23", %"10"
  23. unreachable
  24. "22": ; preds = %"10"
  25. br label %"23"
  26. "23": ; preds = %"1375", %"22"
  27. %0 = phi i32 [ undef, %"22" ], [ %1, %"1375" ] ; <i32> [#uses=1]
  28. indirectbr i8* undef, [label %"15", label %"24", label %"25", label %"26", label %"27", label %"28", label %"29", label %"30", label %"32", label %"32", label %"33", label %"167", label %"173", label %"173", label %"173", label %"173", label %"173", label %"192", label %"193", label %"194", label %"196", label %"206", label %"231", label %"241", label %"251", label %"261", label %"307", label %"353", label %"354", label %"355", label %"361", label %"367", label %"400", label %"433", label %"466", label %"499", label %"509", label %"519", label %"529", label %"571", label %"589", label %"607", label %"635", label %"655", label %"664", label %"671", label %"680", label %"687", label %"692", label %"698", label %"704", label %"715", label %"715", label %"716", label %"725", label %"725", label %"725", label %"725", label %"724", label %"724", label %"724", label %"724", label %"737", label %"737", label %"737", label %"737", label %"761", label %"758", label %"759", label %"760", label %"766", label %"763", label %"764", label %"765", label %"771", label %"768", label %"769", label %"770", label %"780", label %"777", label %"778", label %"779", label %"821", label %"826", label %"831", label %"832", label %"833", label %"836", label %"836", label %"886", label %"905", label %"978", label %"978", label %"1136", label %"1166", label %"1179", label %"1201", label %"1212", label %"1212", label %"1274", label %"1284", label %"1284", label %"1346", label %"1347", label %"1348", label %"1349", label %"1350", label %"1353", label %"1353", label %"1353", label %"1355", label %"1355", label %"1357", label %"1357", label %"1358", label %"1359", label %"1374", label %"1375", label %"1376", label %"1377", label %"1378", label %"1379", label %"1386", label %"1395", label %"1394", label %"1425", label %"1426", label %"1440", label %"1449", label %"1455", label %"1461", label %"1471", label %"1482", label %"1484", label %"1486", label %"1489", label %"1489", label %"1492", label %"1494", label %"1494", label %"1497", label %"1499", label %"1499", label %"1515", label %"1546", label %"1546", label %"1566", label %"1584", label %"1587", label %"1591", label %"1605", label %"1609", label %"1609", label %"1640", label %"1648", label %"1651", label %"1703", label %"1710", label %"1718", label %"1724", label %"1725", label %"1726", label %"1727", label %"1728", label %"1731", label %"1732", label %"1733", label %"1734", label %"1735", label %"1741", label %"1750", label %"1752", label %"1754", label %"1755", label %"1757", label %"1759", label %"1761", label %"1764", label %"1764", label %"1766", label %"1768", label %"1775", label %"1775", label %"1781", label %"1781", label %"1790", label %"1827", label %"1836", label %"1836", label %"1845", label %"1845", label %"1848", label %"1849", label %"1851", label %"1853", label %"1856", label %"1861", label %"1861"]
  29. "24": ; preds = %"23"
  30. unreachable
  31. "25": ; preds = %"23"
  32. unreachable
  33. "26": ; preds = %"23"
  34. unreachable
  35. "27": ; preds = %"23"
  36. unreachable
  37. "28": ; preds = %"23"
  38. unreachable
  39. "29": ; preds = %"23"
  40. unreachable
  41. "30": ; preds = %"23"
  42. unreachable
  43. "32": ; preds = %"23", %"23"
  44. unreachable
  45. "33": ; preds = %"23"
  46. unreachable
  47. "167": ; preds = %"23"
  48. unreachable
  49. "173": ; preds = %"23", %"23", %"23", %"23", %"23"
  50. unreachable
  51. "192": ; preds = %"23"
  52. unreachable
  53. "193": ; preds = %"23"
  54. unreachable
  55. "194": ; preds = %"23"
  56. unreachable
  57. "196": ; preds = %"23"
  58. unreachable
  59. "206": ; preds = %"23"
  60. unreachable
  61. "231": ; preds = %"23"
  62. unreachable
  63. "241": ; preds = %"23"
  64. unreachable
  65. "251": ; preds = %"23"
  66. unreachable
  67. "261": ; preds = %"23"
  68. unreachable
  69. "307": ; preds = %"23"
  70. unreachable
  71. "353": ; preds = %"23"
  72. unreachable
  73. "354": ; preds = %"23"
  74. unreachable
  75. "355": ; preds = %"23"
  76. unreachable
  77. "361": ; preds = %"23"
  78. unreachable
  79. "367": ; preds = %"23"
  80. unreachable
  81. "400": ; preds = %"23"
  82. unreachable
  83. "433": ; preds = %"23"
  84. unreachable
  85. "466": ; preds = %"23"
  86. unreachable
  87. "499": ; preds = %"23"
  88. unreachable
  89. "509": ; preds = %"23"
  90. unreachable
  91. "519": ; preds = %"23"
  92. unreachable
  93. "529": ; preds = %"23"
  94. unreachable
  95. "571": ; preds = %"23"
  96. unreachable
  97. "589": ; preds = %"23"
  98. unreachable
  99. "607": ; preds = %"23"
  100. unreachable
  101. "635": ; preds = %"23"
  102. unreachable
  103. "655": ; preds = %"23"
  104. unreachable
  105. "664": ; preds = %"23"
  106. unreachable
  107. "671": ; preds = %"23"
  108. unreachable
  109. "680": ; preds = %"23"
  110. unreachable
  111. "687": ; preds = %"23"
  112. unreachable
  113. "692": ; preds = %"23"
  114. br label %"1862"
  115. "698": ; preds = %"23"
  116. unreachable
  117. "704": ; preds = %"23"
  118. unreachable
  119. "715": ; preds = %"23", %"23"
  120. unreachable
  121. "716": ; preds = %"23"
  122. unreachable
  123. "724": ; preds = %"23", %"23", %"23", %"23"
  124. unreachable
  125. "725": ; preds = %"23", %"23", %"23", %"23"
  126. unreachable
  127. "737": ; preds = %"23", %"23", %"23", %"23"
  128. unreachable
  129. "758": ; preds = %"23"
  130. unreachable
  131. "759": ; preds = %"23"
  132. unreachable
  133. "760": ; preds = %"23"
  134. unreachable
  135. "761": ; preds = %"23"
  136. unreachable
  137. "763": ; preds = %"23"
  138. unreachable
  139. "764": ; preds = %"23"
  140. unreachable
  141. "765": ; preds = %"23"
  142. br label %"766"
  143. "766": ; preds = %"765", %"23"
  144. unreachable
  145. "768": ; preds = %"23"
  146. unreachable
  147. "769": ; preds = %"23"
  148. unreachable
  149. "770": ; preds = %"23"
  150. unreachable
  151. "771": ; preds = %"23"
  152. unreachable
  153. "777": ; preds = %"23"
  154. unreachable
  155. "778": ; preds = %"23"
  156. unreachable
  157. "779": ; preds = %"23"
  158. unreachable
  159. "780": ; preds = %"23"
  160. unreachable
  161. "821": ; preds = %"23"
  162. unreachable
  163. "826": ; preds = %"23"
  164. unreachable
  165. "831": ; preds = %"23"
  166. unreachable
  167. "832": ; preds = %"23"
  168. unreachable
  169. "833": ; preds = %"23"
  170. unreachable
  171. "836": ; preds = %"23", %"23"
  172. unreachable
  173. "886": ; preds = %"23"
  174. unreachable
  175. "905": ; preds = %"23"
  176. unreachable
  177. "978": ; preds = %"23", %"23"
  178. unreachable
  179. "1136": ; preds = %"23"
  180. unreachable
  181. "1166": ; preds = %"23"
  182. unreachable
  183. "1179": ; preds = %"23"
  184. unreachable
  185. "1201": ; preds = %"23"
  186. unreachable
  187. "1212": ; preds = %"23", %"23"
  188. unreachable
  189. "1274": ; preds = %"23"
  190. unreachable
  191. "1284": ; preds = %"23", %"23"
  192. unreachable
  193. "1346": ; preds = %"23"
  194. unreachable
  195. "1347": ; preds = %"23"
  196. unreachable
  197. "1348": ; preds = %"23"
  198. unreachable
  199. "1349": ; preds = %"23"
  200. unreachable
  201. "1350": ; preds = %"23"
  202. unreachable
  203. "1353": ; preds = %"23", %"23", %"23"
  204. unreachable
  205. "1355": ; preds = %"23", %"23"
  206. unreachable
  207. "1357": ; preds = %"23", %"23"
  208. unreachable
  209. "1358": ; preds = %"23"
  210. unreachable
  211. "1359": ; preds = %"23"
  212. unreachable
  213. "1374": ; preds = %"23"
  214. unreachable
  215. "1375": ; preds = %"23"
  216. %1 = zext i8 undef to i32 ; <i32> [#uses=1]
  217. br label %"23"
  218. "1376": ; preds = %"23"
  219. unreachable
  220. "1377": ; preds = %"23"
  221. unreachable
  222. "1378": ; preds = %"23"
  223. unreachable
  224. "1379": ; preds = %"23"
  225. unreachable
  226. "1386": ; preds = %"23"
  227. unreachable
  228. "1394": ; preds = %"23"
  229. unreachable
  230. "1395": ; preds = %"23"
  231. unreachable
  232. "1425": ; preds = %"23"
  233. unreachable
  234. "1426": ; preds = %"23"
  235. unreachable
  236. "1440": ; preds = %"23"
  237. unreachable
  238. "1449": ; preds = %"23"
  239. unreachable
  240. "1455": ; preds = %"23"
  241. unreachable
  242. "1461": ; preds = %"23"
  243. unreachable
  244. "1471": ; preds = %"23"
  245. unreachable
  246. "1482": ; preds = %"23"
  247. unreachable
  248. "1484": ; preds = %"23"
  249. unreachable
  250. "1486": ; preds = %"23"
  251. unreachable
  252. "1489": ; preds = %"23", %"23"
  253. unreachable
  254. "1492": ; preds = %"23"
  255. unreachable
  256. "1494": ; preds = %"23", %"23"
  257. unreachable
  258. "1497": ; preds = %"23"
  259. unreachable
  260. "1499": ; preds = %"23", %"23"
  261. unreachable
  262. "1515": ; preds = %"23"
  263. unreachable
  264. "1546": ; preds = %"23", %"23"
  265. unreachable
  266. "1566": ; preds = %"23"
  267. br i1 undef, label %"1569", label %"1568"
  268. "1568": ; preds = %"1566"
  269. unreachable
  270. "1569": ; preds = %"1566"
  271. unreachable
  272. "1584": ; preds = %"23"
  273. unreachable
  274. "1587": ; preds = %"23"
  275. unreachable
  276. "1591": ; preds = %"23"
  277. unreachable
  278. "1605": ; preds = %"23"
  279. unreachable
  280. "1609": ; preds = %"23", %"23"
  281. unreachable
  282. "1640": ; preds = %"23"
  283. unreachable
  284. "1648": ; preds = %"23"
  285. unreachable
  286. "1651": ; preds = %"23"
  287. unreachable
  288. "1703": ; preds = %"23"
  289. unreachable
  290. "1710": ; preds = %"23"
  291. unreachable
  292. "1718": ; preds = %"23"
  293. unreachable
  294. "1724": ; preds = %"23"
  295. unreachable
  296. "1725": ; preds = %"23"
  297. unreachable
  298. "1726": ; preds = %"23"
  299. unreachable
  300. "1727": ; preds = %"23"
  301. unreachable
  302. "1728": ; preds = %"23"
  303. unreachable
  304. "1731": ; preds = %"23"
  305. unreachable
  306. "1732": ; preds = %"23"
  307. unreachable
  308. "1733": ; preds = %"23"
  309. unreachable
  310. "1734": ; preds = %"23"
  311. unreachable
  312. "1735": ; preds = %"23"
  313. unreachable
  314. "1741": ; preds = %"23"
  315. unreachable
  316. "1750": ; preds = %"23"
  317. unreachable
  318. "1752": ; preds = %"23"
  319. unreachable
  320. "1754": ; preds = %"23"
  321. unreachable
  322. "1755": ; preds = %"23"
  323. unreachable
  324. "1757": ; preds = %"23"
  325. unreachable
  326. "1759": ; preds = %"23"
  327. unreachable
  328. "1761": ; preds = %"23"
  329. unreachable
  330. "1764": ; preds = %"23", %"23"
  331. %2 = icmp eq i32 %0, 168 ; <i1> [#uses=0]
  332. unreachable
  333. "1766": ; preds = %"23"
  334. unreachable
  335. "1768": ; preds = %"23"
  336. unreachable
  337. "1775": ; preds = %"23", %"23"
  338. unreachable
  339. "1781": ; preds = %"23", %"23"
  340. unreachable
  341. "1790": ; preds = %"23"
  342. unreachable
  343. "1827": ; preds = %"23"
  344. unreachable
  345. "1836": ; preds = %"23", %"23"
  346. br label %"1862"
  347. "1845": ; preds = %"23", %"23"
  348. unreachable
  349. "1848": ; preds = %"23"
  350. unreachable
  351. "1849": ; preds = %"23"
  352. unreachable
  353. "1851": ; preds = %"23"
  354. unreachable
  355. "1853": ; preds = %"23"
  356. unreachable
  357. "1856": ; preds = %"23"
  358. unreachable
  359. "1861": ; preds = %"23", %"23"
  360. unreachable
  361. "41": ; preds = %"23", %"23"
  362. unreachable
  363. "1862": ; preds = %"1836", %"692"
  364. unreachable
  365. }
  366. ; An exit for Loop L1 may be the header of a disjoint Loop L2. Thus, when we
  367. ; create PHIs in one of such exits we are also inserting PHIs in L2 header. This
  368. ; could break LCSSA form for L2 because these inserted PHIs can also have uses
  369. ; in L2 exits. Test that we don't assert/crash on that.
  370. define void @test1() {
  371. ; CHECK-LABEL: @test1
  372. br label %lab1
  373. lab1:
  374. %tmp21 = add i32 undef, 677038203
  375. br i1 undef, label %lab2, label %exit
  376. lab2:
  377. indirectbr i8* undef, [label %lab1, label %lab3]
  378. lab3:
  379. ; CHECK: %tmp21.lcssa1 = phi i32 [ %tmp21.lcssa1, %lab4 ], [ %tmp21, %lab2 ]
  380. %tmp12 = phi i32 [ %tmp21, %lab2 ], [ %tmp12, %lab4 ]
  381. br i1 undef, label %lab5, label %lab4
  382. lab4:
  383. br label %lab3
  384. lab5:
  385. ; CHECK: %tmp21.lcssa1.lcssa = phi i32 [ %tmp21.lcssa1, %lab3 ]
  386. %tmp15 = add i32 %tmp12, undef
  387. br label %exit
  388. exit:
  389. ret void
  390. }