From: Devang Patel Date: Thu, 14 Feb 2008 23:18:47 +0000 (+0000) Subject: If loop header is also loop exiting block then OrigPN is incoming value for B loop... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9b03daa2a3a668e4313e0d869bb10aad5b08262a;p=oota-llvm.git If loop header is also loop exiting block then OrigPN is incoming value for B loop header. Fixes PR 2030. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47141 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/LoopIndexSplit.cpp b/lib/Transforms/Scalar/LoopIndexSplit.cpp index a0bfe4f0822..3aedb93fd17 100644 --- a/lib/Transforms/Scalar/LoopIndexSplit.cpp +++ b/lib/Transforms/Scalar/LoopIndexSplit.cpp @@ -1465,7 +1465,13 @@ bool LoopIndexSplit::splitLoop(SplitInfo &SD) { PN->addIncoming(SD.B_StartValue, A_ExitingBlock); else { PHINode *OrigPN = cast(InverseMap[PN]); - Value *V2 = OrigPN->getIncomingValueForBlock(A_ExitingBlock); + Value *V2 = NULL; + // If loop header is also loop exiting block then + // OrigPN is incoming value for B loop header. + if (A_ExitingBlock == L->getHeader()) + V2 = OrigPN; + else + V2 = OrigPN->getIncomingValueForBlock(A_ExitingBlock); PN->addIncoming(V2, A_ExitingBlock); } } else diff --git a/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll b/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll new file mode 100644 index 00000000000..2ee51e14948 --- /dev/null +++ b/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll @@ -0,0 +1,464 @@ +; RUN: llvm-as < %s | opt -loop-index-split -disable-output +; PR 2030 + %struct.FULL = type { i32, i32, [1000 x float*] } + +define i32 @matgen(%struct.FULL* %a, float** %x, float** %b, float** %bt, i32** %ipvt, i32 %test_case, i32 %scale) { +entry: + br i1 false, label %bb, label %entry.bb30_crit_edge + +entry.bb30_crit_edge: ; preds = %entry + br label %bb30 + +bb: ; preds = %entry + br label %bb14 + +bb6: ; preds = %bb14 + br label %bb14 + +bb14: ; preds = %bb6, %bb + br i1 false, label %bb6, label %bb22 + +bb22: ; preds = %bb14 + br label %bb30 + +bb30: ; preds = %bb22, %entry.bb30_crit_edge + switch i32 %test_case, label %bb648 [ + i32 1, label %bb30.bb32_crit_edge + i32 2, label %bb30.bb32_crit_edge1 + i32 3, label %bb30.bb32_crit_edge2 + i32 4, label %bb30.bb108_crit_edge + i32 5, label %bb30.bb108_crit_edge3 + i32 6, label %bb30.bb142_crit_edge + i32 7, label %bb30.bb142_crit_edge4 + i32 8, label %bb30.bb142_crit_edge5 + i32 9, label %bb234 + i32 10, label %bb292 + i32 11, label %bb353 + i32 12, label %bb419 + i32 13, label %bb485 + i32 14, label %bb567 + ] + +bb30.bb142_crit_edge5: ; preds = %bb30 + br label %bb142 + +bb30.bb142_crit_edge4: ; preds = %bb30 + br label %bb142 + +bb30.bb142_crit_edge: ; preds = %bb30 + br label %bb142 + +bb30.bb108_crit_edge3: ; preds = %bb30 + br label %bb108 + +bb30.bb108_crit_edge: ; preds = %bb30 + br label %bb108 + +bb30.bb32_crit_edge2: ; preds = %bb30 + br label %bb32 + +bb30.bb32_crit_edge1: ; preds = %bb30 + br label %bb32 + +bb30.bb32_crit_edge: ; preds = %bb30 + br label %bb32 + +bb32: ; preds = %bb30.bb32_crit_edge, %bb30.bb32_crit_edge1, %bb30.bb32_crit_edge2 + br i1 false, label %bb53, label %bb52 + +bb52: ; preds = %bb32 + br label %bb739 + +bb53: ; preds = %bb32 + br label %bb101 + +bb58: ; preds = %bb101 + br label %bb92 + +bb64: ; preds = %bb92 + br i1 false, label %bb64.bb87_crit_edge, label %bb72 + +bb64.bb87_crit_edge: ; preds = %bb64 + br label %bb87 + +bb72: ; preds = %bb64 + br i1 false, label %bb72.bb87_crit_edge, label %bb79 + +bb72.bb87_crit_edge: ; preds = %bb72 + br label %bb87 + +bb79: ; preds = %bb72 + br label %bb87 + +bb87: ; preds = %bb79, %bb72.bb87_crit_edge, %bb64.bb87_crit_edge + br label %bb92 + +bb92: ; preds = %bb87, %bb58 + br i1 false, label %bb64, label %bb98 + +bb98: ; preds = %bb92 + br label %bb101 + +bb101: ; preds = %bb98, %bb53 + br i1 false, label %bb58, label %bb107 + +bb107: ; preds = %bb101 + br label %bb651 + +bb108: ; preds = %bb30.bb108_crit_edge, %bb30.bb108_crit_edge3 + br i1 false, label %bb125, label %bb124 + +bb124: ; preds = %bb108 + br label %bb739 + +bb125: ; preds = %bb108 + br i1 false, label %bb138, label %bb139 + +bb138: ; preds = %bb125 + br label %bb140 + +bb139: ; preds = %bb125 + br label %bb140 + +bb140: ; preds = %bb139, %bb138 + br label %bb651 + +bb142: ; preds = %bb30.bb142_crit_edge, %bb30.bb142_crit_edge4, %bb30.bb142_crit_edge5 + br i1 false, label %bb161, label %bb160 + +bb160: ; preds = %bb142 + br label %bb739 + +bb161: ; preds = %bb142 + br i1 false, label %bb170, label %bb161.bb171_crit_edge + +bb161.bb171_crit_edge: ; preds = %bb161 + br label %bb171 + +bb170: ; preds = %bb161 + br label %bb171 + +bb171: ; preds = %bb170, %bb161.bb171_crit_edge + br i1 false, label %bb176, label %bb171.bb177_crit_edge + +bb171.bb177_crit_edge: ; preds = %bb171 + br label %bb177 + +bb176: ; preds = %bb171 + br label %bb177 + +bb177: ; preds = %bb176, %bb171.bb177_crit_edge + br label %bb227 + +bb178: ; preds = %bb227 + br label %bb218 + +bb184: ; preds = %bb218 + br i1 false, label %bb191, label %bb193 + +bb191: ; preds = %bb184 + br label %bb213 + +bb193: ; preds = %bb184 + br i1 false, label %bb200, label %bb203 + +bb200: ; preds = %bb193 + br label %bb213 + +bb203: ; preds = %bb193 + br i1 false, label %bb210, label %bb203.bb213_crit_edge + +bb203.bb213_crit_edge: ; preds = %bb203 + br label %bb213 + +bb210: ; preds = %bb203 + br label %bb213 + +bb213: ; preds = %bb210, %bb203.bb213_crit_edge, %bb200, %bb191 + br label %bb218 + +bb218: ; preds = %bb213, %bb178 + br i1 false, label %bb184, label %bb224 + +bb224: ; preds = %bb218 + br label %bb227 + +bb227: ; preds = %bb224, %bb177 + br i1 false, label %bb178, label %bb233 + +bb233: ; preds = %bb227 + br label %bb651 + +bb234: ; preds = %bb30 + br i1 false, label %bb253, label %bb252 + +bb252: ; preds = %bb234 + br label %bb739 + +bb253: ; preds = %bb234 + br label %bb285 + +bb258: ; preds = %bb285 + br label %bb276 + +bb264: ; preds = %bb276 + br label %bb276 + +bb276: ; preds = %bb264, %bb258 + br i1 false, label %bb264, label %bb282 + +bb282: ; preds = %bb276 + br label %bb285 + +bb285: ; preds = %bb282, %bb253 + br i1 false, label %bb258, label %bb291 + +bb291: ; preds = %bb285 + br label %bb651 + +bb292: ; preds = %bb30 + br i1 false, label %bb311, label %bb310 + +bb310: ; preds = %bb292 + br label %bb739 + +bb311: ; preds = %bb292 + br label %bb346 + +bb316: ; preds = %bb346 + br label %bb337 + +bb322: ; preds = %bb337 + br label %bb337 + +bb337: ; preds = %bb322, %bb316 + br i1 false, label %bb322, label %bb343 + +bb343: ; preds = %bb337 + br label %bb346 + +bb346: ; preds = %bb343, %bb311 + br i1 false, label %bb316, label %bb352 + +bb352: ; preds = %bb346 + br label %bb651 + +bb353: ; preds = %bb30 + br i1 false, label %bb372, label %bb371 + +bb371: ; preds = %bb353 + br label %bb739 + +bb372: ; preds = %bb353 + br label %bb412 + +bb377: ; preds = %bb412 + br label %bb403 + +bb383: ; preds = %bb403 + br i1 false, label %bb395, label %bb389 + +bb389: ; preds = %bb383 + br label %bb396 + +bb395: ; preds = %bb383 + br label %bb396 + +bb396: ; preds = %bb395, %bb389 + br label %bb403 + +bb403: ; preds = %bb396, %bb377 + br i1 false, label %bb383, label %bb409 + +bb409: ; preds = %bb403 + br label %bb412 + +bb412: ; preds = %bb409, %bb372 + br i1 false, label %bb377, label %bb418 + +bb418: ; preds = %bb412 + br label %bb651 + +bb419: ; preds = %bb30 + br i1 false, label %bb438, label %bb437 + +bb437: ; preds = %bb419 + br label %bb739 + +bb438: ; preds = %bb419 + br label %bb478 + +bb443: ; preds = %bb478 + br label %bb469 + +bb449: ; preds = %bb469 + br i1 false, label %bb461, label %bb455 + +bb455: ; preds = %bb449 + br label %bb462 + +bb461: ; preds = %bb449 + br label %bb462 + +bb462: ; preds = %bb461, %bb455 + br label %bb469 + +bb469: ; preds = %bb462, %bb443 + br i1 false, label %bb449, label %bb475 + +bb475: ; preds = %bb469 + br label %bb478 + +bb478: ; preds = %bb475, %bb438 + br i1 false, label %bb443, label %bb484 + +bb484: ; preds = %bb478 + br label %bb651 + +bb485: ; preds = %bb30 + br i1 false, label %bb504, label %bb503 + +bb503: ; preds = %bb485 + br label %bb739 + +bb504: ; preds = %bb485 + br label %bb560 + +bb513: ; preds = %bb560 + br label %bb551 + +bb519: ; preds = %bb551 + br i1 false, label %bb528, label %bb532 + +bb528: ; preds = %bb519 + br label %bb536 + +bb532: ; preds = %bb519 + br label %bb536 + +bb536: ; preds = %bb532, %bb528 + br label %bb551 + +bb551: ; preds = %bb536, %bb513 + br i1 false, label %bb519, label %bb557 + +bb557: ; preds = %bb551 + br label %bb560 + +bb560: ; preds = %bb557, %bb504 + br i1 false, label %bb513, label %bb566 + +bb566: ; preds = %bb560 + br label %bb651 + +bb567: ; preds = %bb30 + br i1 false, label %bb586, label %bb585 + +bb585: ; preds = %bb567 + br label %bb739 + +bb586: ; preds = %bb567 + br label %bb641 + +bb595: ; preds = %bb641 + br label %bb632 + +bb601: ; preds = %bb632 + %tmp604 = icmp sgt i32 %i.7, 0 ; [#uses=1] + br i1 %tmp604, label %bb607, label %bb611 + +bb607: ; preds = %bb601 + br label %bb615 + +bb611: ; preds = %bb601 + br label %bb615 + +bb615: ; preds = %bb611, %bb607 + %tmp629 = add i32 %i.7, 1 ; [#uses=1] + %tmp631 = getelementptr float* %col.7, i32 1 ; [#uses=1] + br label %bb632 + +bb632: ; preds = %bb615, %bb595 + %col.7 = phi float* [ null, %bb595 ], [ %tmp631, %bb615 ] ; [#uses=1] + %i.7 = phi i32 [ 0, %bb595 ], [ %tmp629, %bb615 ] ; [#uses=3] + %tmp635 = icmp slt i32 %i.7, 0 ; [#uses=1] + br i1 %tmp635, label %bb601, label %bb638 + +bb638: ; preds = %bb632 + br label %bb641 + +bb641: ; preds = %bb638, %bb586 + br i1 false, label %bb595, label %bb647 + +bb647: ; preds = %bb641 + br label %bb651 + +bb648: ; preds = %bb30 + br label %bb739 + +bb651: ; preds = %bb647, %bb566, %bb484, %bb418, %bb352, %bb291, %bb233, %bb140, %bb107 + br i1 false, label %bb658, label %bb651.bb661_crit_edge + +bb651.bb661_crit_edge: ; preds = %bb651 + br label %bb661 + +bb658: ; preds = %bb651 + br label %bb661 + +bb661: ; preds = %bb658, %bb651.bb661_crit_edge + br i1 false, label %bb666, label %bb661.bb686_crit_edge + +bb661.bb686_crit_edge: ; preds = %bb661 + br label %bb686 + +bb666: ; preds = %bb661 + br label %bb680 + +bb670: ; preds = %bb680 + br label %bb680 + +bb680: ; preds = %bb670, %bb666 + br i1 false, label %bb670, label %bb680.bb686_crit_edge + +bb680.bb686_crit_edge: ; preds = %bb680 + br label %bb686 + +bb686: ; preds = %bb680.bb686_crit_edge, %bb661.bb686_crit_edge + br i1 false, label %bb699, label %bb696 + +bb696: ; preds = %bb686 + br label %bb739 + +bb699: ; preds = %bb686 + br i1 false, label %bb712, label %bb709 + +bb709: ; preds = %bb699 + br label %bb739 + +bb712: ; preds = %bb699 + br i1 false, label %bb717, label %bb712.bb720_crit_edge + +bb712.bb720_crit_edge: ; preds = %bb712 + br label %bb720 + +bb717: ; preds = %bb712 + br label %bb720 + +bb720: ; preds = %bb717, %bb712.bb720_crit_edge + br i1 false, label %bb725, label %bb720.bb738_crit_edge + +bb720.bb738_crit_edge: ; preds = %bb720 + br label %bb738 + +bb725: ; preds = %bb720 + br label %bb738 + +bb738: ; preds = %bb725, %bb720.bb738_crit_edge + br label %bb739 + +bb739: ; preds = %bb738, %bb709, %bb696, %bb648, %bb585, %bb503, %bb437, %bb371, %bb310, %bb252, %bb160, %bb124, %bb52 + br label %return + +return: ; preds = %bb739 + ret i32 0 +}