brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.6 KiB · a71696c Raw
575 lines · plain
1; RUN: opt < %s -passes=loop-simplify,lcssa -verify-loop-info -verify-dom-info -S | FileCheck %s2 3; LCSSA should work correctly in the case of an indirectbr that exits4; the loop, and the loop has exits with predecessors not within the loop5; (and btw these edges are unsplittable due to the indirectbr).6; PR54377define i32 @test0(i1 %arg) nounwind {8; CHECK-LABEL: @test09entry:10  br i1 %arg, label %"4", label %"3"11 12"3":                                              ; preds = %entry13  ret i32 014 15"4":                                              ; preds = %entry16  br i1 %arg, label %"6", label %"5"17 18"5":                                              ; preds = %"4"19  unreachable20 21"6":                                              ; preds = %"4"22  br i1 %arg, label %"10", label %"13"23 24"10":                                             ; preds = %"6"25  br i1 %arg, label %"22", label %"15"26 27"13":                                             ; preds = %"6"28  unreachable29 30"15":                                             ; preds = %"23", %"10"31  unreachable32 33"22":                                             ; preds = %"10"34  br label %"23"35 36"23":                                             ; preds = %"1375", %"22"37  %0 = phi i32 [ undef, %"22" ], [ %1, %"1375" ]  ; <i32> [#uses=1]38  indirectbr ptr 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"]39 40"24":                                             ; preds = %"23"41  unreachable42 43"25":                                             ; preds = %"23"44  unreachable45 46"26":                                             ; preds = %"23"47  unreachable48 49"27":                                             ; preds = %"23"50  unreachable51 52"28":                                             ; preds = %"23"53  unreachable54 55"29":                                             ; preds = %"23"56  unreachable57 58"30":                                             ; preds = %"23"59  unreachable60 61"32":                                             ; preds = %"23", %"23"62  unreachable63 64"33":                                             ; preds = %"23"65  unreachable66 67"167":                                            ; preds = %"23"68  unreachable69 70"173":                                            ; preds = %"23", %"23", %"23", %"23", %"23"71  unreachable72 73"192":                                            ; preds = %"23"74  unreachable75 76"193":                                            ; preds = %"23"77  unreachable78 79"194":                                            ; preds = %"23"80  unreachable81 82"196":                                            ; preds = %"23"83  unreachable84 85"206":                                            ; preds = %"23"86  unreachable87 88"231":                                            ; preds = %"23"89  unreachable90 91"241":                                            ; preds = %"23"92  unreachable93 94"251":                                            ; preds = %"23"95  unreachable96 97"261":                                            ; preds = %"23"98  unreachable99 100"307":                                            ; preds = %"23"101  unreachable102 103"353":                                            ; preds = %"23"104  unreachable105 106"354":                                            ; preds = %"23"107  unreachable108 109"355":                                            ; preds = %"23"110  unreachable111 112"361":                                            ; preds = %"23"113  unreachable114 115"367":                                            ; preds = %"23"116  unreachable117 118"400":                                            ; preds = %"23"119  unreachable120 121"433":                                            ; preds = %"23"122  unreachable123 124"466":                                            ; preds = %"23"125  unreachable126 127"499":                                            ; preds = %"23"128  unreachable129 130"509":                                            ; preds = %"23"131  unreachable132 133"519":                                            ; preds = %"23"134  unreachable135 136"529":                                            ; preds = %"23"137  unreachable138 139"571":                                            ; preds = %"23"140  unreachable141 142"589":                                            ; preds = %"23"143  unreachable144 145"607":                                            ; preds = %"23"146  unreachable147 148"635":                                            ; preds = %"23"149  unreachable150 151"655":                                            ; preds = %"23"152  unreachable153 154"664":                                            ; preds = %"23"155  unreachable156 157"671":                                            ; preds = %"23"158  unreachable159 160"680":                                            ; preds = %"23"161  unreachable162 163"687":                                            ; preds = %"23"164  unreachable165 166"692":                                            ; preds = %"23"167  br label %"1862"168 169"698":                                            ; preds = %"23"170  unreachable171 172"704":                                            ; preds = %"23"173  unreachable174 175"715":                                            ; preds = %"23", %"23"176  unreachable177 178"716":                                            ; preds = %"23"179  unreachable180 181"724":                                            ; preds = %"23", %"23", %"23", %"23"182  unreachable183 184"725":                                            ; preds = %"23", %"23", %"23", %"23"185  unreachable186 187"737":                                            ; preds = %"23", %"23", %"23", %"23"188  unreachable189 190"758":                                            ; preds = %"23"191  unreachable192 193"759":                                            ; preds = %"23"194  unreachable195 196"760":                                            ; preds = %"23"197  unreachable198 199"761":                                            ; preds = %"23"200  unreachable201 202"763":                                            ; preds = %"23"203  unreachable204 205"764":                                            ; preds = %"23"206  unreachable207 208"765":                                            ; preds = %"23"209  br label %"766"210 211"766":                                            ; preds = %"765", %"23"212  unreachable213 214"768":                                            ; preds = %"23"215  unreachable216 217"769":                                            ; preds = %"23"218  unreachable219 220"770":                                            ; preds = %"23"221  unreachable222 223"771":                                            ; preds = %"23"224  unreachable225 226"777":                                            ; preds = %"23"227  unreachable228 229"778":                                            ; preds = %"23"230  unreachable231 232"779":                                            ; preds = %"23"233  unreachable234 235"780":                                            ; preds = %"23"236  unreachable237 238"821":                                            ; preds = %"23"239  unreachable240 241"826":                                            ; preds = %"23"242  unreachable243 244"831":                                            ; preds = %"23"245  unreachable246 247"832":                                            ; preds = %"23"248  unreachable249 250"833":                                            ; preds = %"23"251  unreachable252 253"836":                                            ; preds = %"23", %"23"254  unreachable255 256"886":                                            ; preds = %"23"257  unreachable258 259"905":                                            ; preds = %"23"260  unreachable261 262"978":                                            ; preds = %"23", %"23"263  unreachable264 265"1136":                                           ; preds = %"23"266  unreachable267 268"1166":                                           ; preds = %"23"269  unreachable270 271"1179":                                           ; preds = %"23"272  unreachable273 274"1201":                                           ; preds = %"23"275  unreachable276 277"1212":                                           ; preds = %"23", %"23"278  unreachable279 280"1274":                                           ; preds = %"23"281  unreachable282 283"1284":                                           ; preds = %"23", %"23"284  unreachable285 286"1346":                                           ; preds = %"23"287  unreachable288 289"1347":                                           ; preds = %"23"290  unreachable291 292"1348":                                           ; preds = %"23"293  unreachable294 295"1349":                                           ; preds = %"23"296  unreachable297 298"1350":                                           ; preds = %"23"299  unreachable300 301"1353":                                           ; preds = %"23", %"23", %"23"302  unreachable303 304"1355":                                           ; preds = %"23", %"23"305  unreachable306 307"1357":                                           ; preds = %"23", %"23"308  unreachable309 310"1358":                                           ; preds = %"23"311  unreachable312 313"1359":                                           ; preds = %"23"314  unreachable315 316"1374":                                           ; preds = %"23"317  unreachable318 319"1375":                                           ; preds = %"23"320  %1 = zext i8 undef to i32                       ; <i32> [#uses=1]321  br label %"23"322 323"1376":                                           ; preds = %"23"324  unreachable325 326"1377":                                           ; preds = %"23"327  unreachable328 329"1378":                                           ; preds = %"23"330  unreachable331 332"1379":                                           ; preds = %"23"333  unreachable334 335"1386":                                           ; preds = %"23"336  unreachable337 338"1394":                                           ; preds = %"23"339  unreachable340 341"1395":                                           ; preds = %"23"342  unreachable343 344"1425":                                           ; preds = %"23"345  unreachable346 347"1426":                                           ; preds = %"23"348  unreachable349 350"1440":                                           ; preds = %"23"351  unreachable352 353"1449":                                           ; preds = %"23"354  unreachable355 356"1455":                                           ; preds = %"23"357  unreachable358 359"1461":                                           ; preds = %"23"360  unreachable361 362"1471":                                           ; preds = %"23"363  unreachable364 365"1482":                                           ; preds = %"23"366  unreachable367 368"1484":                                           ; preds = %"23"369  unreachable370 371"1486":                                           ; preds = %"23"372  unreachable373 374"1489":                                           ; preds = %"23", %"23"375  unreachable376 377"1492":                                           ; preds = %"23"378  unreachable379 380"1494":                                           ; preds = %"23", %"23"381  unreachable382 383"1497":                                           ; preds = %"23"384  unreachable385 386"1499":                                           ; preds = %"23", %"23"387  unreachable388 389"1515":                                           ; preds = %"23"390  unreachable391 392"1546":                                           ; preds = %"23", %"23"393  unreachable394 395"1566":                                           ; preds = %"23"396  br i1 %arg, label %"1569", label %"1568"397 398"1568":                                           ; preds = %"1566"399  unreachable400 401"1569":                                           ; preds = %"1566"402  unreachable403 404"1584":                                           ; preds = %"23"405  unreachable406 407"1587":                                           ; preds = %"23"408  unreachable409 410"1591":                                           ; preds = %"23"411  unreachable412 413"1605":                                           ; preds = %"23"414  unreachable415 416"1609":                                           ; preds = %"23", %"23"417  unreachable418 419"1640":                                           ; preds = %"23"420  unreachable421 422"1648":                                           ; preds = %"23"423  unreachable424 425"1651":                                           ; preds = %"23"426  unreachable427 428"1703":                                           ; preds = %"23"429  unreachable430 431"1710":                                           ; preds = %"23"432  unreachable433 434"1718":                                           ; preds = %"23"435  unreachable436 437"1724":                                           ; preds = %"23"438  unreachable439 440"1725":                                           ; preds = %"23"441  unreachable442 443"1726":                                           ; preds = %"23"444  unreachable445 446"1727":                                           ; preds = %"23"447  unreachable448 449"1728":                                           ; preds = %"23"450  unreachable451 452"1731":                                           ; preds = %"23"453  unreachable454 455"1732":                                           ; preds = %"23"456  unreachable457 458"1733":                                           ; preds = %"23"459  unreachable460 461"1734":                                           ; preds = %"23"462  unreachable463 464"1735":                                           ; preds = %"23"465  unreachable466 467"1741":                                           ; preds = %"23"468  unreachable469 470"1750":                                           ; preds = %"23"471  unreachable472 473"1752":                                           ; preds = %"23"474  unreachable475 476"1754":                                           ; preds = %"23"477  unreachable478 479"1755":                                           ; preds = %"23"480  unreachable481 482"1757":                                           ; preds = %"23"483  unreachable484 485"1759":                                           ; preds = %"23"486  unreachable487 488"1761":                                           ; preds = %"23"489  unreachable490 491"1764":                                           ; preds = %"23", %"23"492  %2 = icmp eq i32 %0, 168                        ; <i1> [#uses=0]493  unreachable494 495"1766":                                           ; preds = %"23"496  unreachable497 498"1768":                                           ; preds = %"23"499  unreachable500 501"1775":                                           ; preds = %"23", %"23"502  unreachable503 504"1781":                                           ; preds = %"23", %"23"505  unreachable506 507"1790":                                           ; preds = %"23"508  unreachable509 510"1827":                                           ; preds = %"23"511  unreachable512 513"1836":                                           ; preds = %"23", %"23"514  br label %"1862"515 516"1845":                                           ; preds = %"23", %"23"517  unreachable518 519"1848":                                           ; preds = %"23"520  unreachable521 522"1849":                                           ; preds = %"23"523  unreachable524 525"1851":                                           ; preds = %"23"526  unreachable527 528"1853":                                           ; preds = %"23"529  unreachable530 531"1856":                                           ; preds = %"23"532  unreachable533 534"1861":                                           ; preds = %"23", %"23"535  unreachable536 537"41":                                             ; preds = %"23", %"23"538  unreachable539 540"1862":                                           ; preds = %"1836", %"692"541  unreachable542}543 544; An exit for Loop L1 may be the header of a disjoint Loop L2.  Thus, when we545; create PHIs in one of such exits we are also inserting PHIs in L2 header. This546; could break LCSSA form for L2 because these inserted PHIs can also have uses547; in L2 exits. Test that we don't assert/crash on that.548define void @test1(i1 %arg) {549; CHECK-LABEL: @test1550  br label %lab1551 552lab1:553  %tmp21 = add i32 undef, 677038203554  br i1 %arg, label %lab2, label %exit555 556lab2:557  indirectbr ptr undef, [label %lab1, label %lab3]558 559lab3:560; CHECK: %tmp21.lcssa1 = phi i32 [ %tmp21.lcssa1, %lab4 ], [ %tmp21, %lab2 ]561  %tmp12 = phi i32 [ %tmp21, %lab2 ], [ %tmp12, %lab4 ]562  br i1 %arg, label %lab5, label %lab4563 564lab4:565  br label %lab3566 567lab5:568; CHECK:  %tmp21.lcssa1.lcssa = phi i32 [ %tmp21.lcssa1, %lab3 ]569  %tmp15 = add i32 %tmp12, undef570  br label %exit571 572exit:573  ret void574}575