[llvm-commits] [llvm] r47141 - in /llvm/trunk: lib/Transforms/Scalar/LoopIndexSplit.cpp test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll

Devang Patel dpatel at apple.com
Thu Feb 14 15:18:47 PST 2008


Author: dpatel
Date: Thu Feb 14 17:18:47 2008
New Revision: 47141

URL: http://llvm.org/viewvc/llvm-project?rev=47141&view=rev
Log:
If loop header is also loop exiting block then OrigPN is incoming value for B loop header.
Fixes PR 2030.


Added:
    llvm/trunk/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp?rev=47141&r1=47140&r2=47141&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp Thu Feb 14 17:18:47 2008
@@ -1465,7 +1465,13 @@
         PN->addIncoming(SD.B_StartValue, A_ExitingBlock);
       else { 
         PHINode *OrigPN = cast<PHINode>(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

Added: llvm/trunk/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll?rev=47141&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll (added)
+++ llvm/trunk/test/Transforms/LoopIndexSplit/2008-02-14-Crash.ll Thu Feb 14 17:18:47 2008
@@ -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		; <i1> [#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		; <i32> [#uses=1]
+	%tmp631 = getelementptr float* %col.7, i32 1		; <float*> [#uses=1]
+	br label %bb632
+
+bb632:		; preds = %bb615, %bb595
+	%col.7 = phi float* [ null, %bb595 ], [ %tmp631, %bb615 ]		; <float*> [#uses=1]
+	%i.7 = phi i32 [ 0, %bb595 ], [ %tmp629, %bb615 ]		; <i32> [#uses=3]
+	%tmp635 = icmp slt i32 %i.7, 0		; <i1> [#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
+}





More information about the llvm-commits mailing list