From 5d01aa484f206b68e1f510386dd304cf25c119ff Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Mon, 5 Nov 2007 19:32:30 +0000 Subject: [PATCH] If a value is incoming from outside the loop then the value does not need remapping and the value is never tracked through LastValueMap. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43728 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LoopUnroll.cpp | 3 - .../Transforms/LoopUnroll/2007-11-05-Crash.ll | 293 ++++++++++++++++++ 2 files changed, 293 insertions(+), 3 deletions(-) create mode 100644 test/Transforms/LoopUnroll/2007-11-05-Crash.ll diff --git a/lib/Transforms/Scalar/LoopUnroll.cpp b/lib/Transforms/Scalar/LoopUnroll.cpp index 25a4c4a79b5..d518e3a7559 100644 --- a/lib/Transforms/Scalar/LoopUnroll.cpp +++ b/lib/Transforms/Scalar/LoopUnroll.cpp @@ -370,9 +370,6 @@ bool LoopUnroll::unrollLoop(Loop *L, unsigned Count, unsigned Threshold) { if (isa(UseInst) && !L->contains(UseInst->getParent())) { PHINode *phi = cast(UseInst); Value *Incoming = phi->getIncomingValueForBlock(*BB); - if (isa(Incoming)) - Incoming = LastValueMap[Incoming]; - phi->addIncoming(Incoming, New); } } diff --git a/test/Transforms/LoopUnroll/2007-11-05-Crash.ll b/test/Transforms/LoopUnroll/2007-11-05-Crash.ll new file mode 100644 index 00000000000..a5e13d5a26a --- /dev/null +++ b/test/Transforms/LoopUnroll/2007-11-05-Crash.ll @@ -0,0 +1,293 @@ +; RUN: llvm-as < %s | opt -disable-output -loop-unroll +; PR1770 + %struct.cl_engine = type { i32, i16, i32, i8**, i8**, i8*, i8*, i8*, i8*, i8*, i8*, i8* } + %struct.cl_limits = type { i32, i32, i32, i32, i16, i64 } + %struct.cli_ac_alt = type { i8, i8*, i16, i16, %struct.cli_ac_alt* } + %struct.cli_ac_node = type { i8, i8, %struct.cli_ac_patt*, %struct.cli_ac_node**, %struct.cli_ac_node* } + %struct.cli_ac_patt = type { i16*, i16*, i16, i16, i8, i32, i32, i8*, i8*, i32, i16, i16, i16, i16, %struct.cli_ac_alt**, i8, i16, %struct.cli_ac_patt*, %struct.cli_ac_patt* } + %struct.cli_bm_patt = type { i8*, i32, i8*, i8*, i8, %struct.cli_bm_patt* } + %struct.cli_ctx = type { i8**, i64*, %struct.cli_matcher*, %struct.cl_engine*, %struct.cl_limits*, i32, i32, i32, i32, %struct.cli_dconf* } + %struct.cli_dconf = type { i32, i32, i32, i32, i32, i32, i32 } + %struct.cli_matcher = type { i16, i8, i32*, %struct.cli_bm_patt**, i32*, i32, i8, i8, %struct.cli_ac_node*, %struct.cli_ac_node**, %struct.cli_ac_patt**, i32, i32, i32 } + +declare i8* @calloc(i64, i64) + +define fastcc i32 @cli_scanpe(i32 %desc, %struct.cli_ctx* %ctx) { +entry: + br i1 false, label %cond_next17, label %cond_true14 + +cond_true14: ; preds = %entry + ret i32 0 + +cond_next17: ; preds = %entry + br i1 false, label %LeafBlock, label %LeafBlock1250 + +LeafBlock1250: ; preds = %cond_next17 + ret i32 0 + +LeafBlock: ; preds = %cond_next17 + br i1 false, label %cond_next33, label %cond_true30 + +cond_true30: ; preds = %LeafBlock + ret i32 0 + +cond_next33: ; preds = %LeafBlock + br i1 false, label %cond_next90, label %cond_true42 + +cond_true42: ; preds = %cond_next33 + ret i32 0 + +cond_next90: ; preds = %cond_next33 + br i1 false, label %cond_next100, label %cond_true97 + +cond_true97: ; preds = %cond_next90 + ret i32 0 + +cond_next100: ; preds = %cond_next90 + br i1 false, label %cond_next109, label %cond_true106 + +cond_true106: ; preds = %cond_next100 + ret i32 0 + +cond_next109: ; preds = %cond_next100 + br i1 false, label %cond_false, label %cond_true118 + +cond_true118: ; preds = %cond_next109 + ret i32 0 + +cond_false: ; preds = %cond_next109 + br i1 false, label %NodeBlock1482, label %cond_true126 + +cond_true126: ; preds = %cond_false + ret i32 0 + +NodeBlock1482: ; preds = %cond_false + br i1 false, label %cond_next285, label %NodeBlock1480 + +NodeBlock1480: ; preds = %NodeBlock1482 + ret i32 0 + +cond_next285: ; preds = %NodeBlock1482 + br i1 false, label %cond_next320, label %cond_true294 + +cond_true294: ; preds = %cond_next285 + ret i32 0 + +cond_next320: ; preds = %cond_next285 + br i1 false, label %LeafBlock1491, label %LeafBlock1493 + +LeafBlock1493: ; preds = %cond_next320 + ret i32 0 + +LeafBlock1491: ; preds = %cond_next320 + br i1 false, label %cond_true400, label %cond_true378 + +cond_true378: ; preds = %LeafBlock1491 + ret i32 1 + +cond_true400: ; preds = %LeafBlock1491 + br i1 false, label %cond_next413, label %cond_true406 + +cond_true406: ; preds = %cond_true400 + ret i32 0 + +cond_next413: ; preds = %cond_true400 + br i1 false, label %cond_next429, label %cond_true424 + +cond_true424: ; preds = %cond_next413 + ret i32 0 + +cond_next429: ; preds = %cond_next413 + br i1 false, label %NodeBlock1557, label %NodeBlock1579 + +NodeBlock1579: ; preds = %cond_next429 + ret i32 0 + +NodeBlock1557: ; preds = %cond_next429 + br i1 false, label %LeafBlock1543, label %NodeBlock1555 + +NodeBlock1555: ; preds = %NodeBlock1557 + ret i32 0 + +LeafBlock1543: ; preds = %NodeBlock1557 + br i1 false, label %cond_next870, label %cond_next663 + +cond_next663: ; preds = %LeafBlock1543 + ret i32 0 + +cond_next870: ; preds = %LeafBlock1543 + br i1 false, label %cond_true1012, label %cond_true916 + +cond_true916: ; preds = %cond_next870 + ret i32 0 + +cond_true1012: ; preds = %cond_next870 + br i1 false, label %cond_next3849, label %cond_true2105 + +cond_true2105: ; preds = %cond_true1012 + ret i32 0 + +cond_next3849: ; preds = %cond_true1012 + br i1 false, label %cond_next4378, label %bb6559 + +bb3862: ; preds = %cond_next4385 + br i1 false, label %cond_false3904, label %cond_true3876 + +cond_true3876: ; preds = %bb3862 + ret i32 0 + +cond_false3904: ; preds = %bb3862 + br i1 false, label %cond_next4003, label %cond_true3935 + +cond_true3935: ; preds = %cond_false3904 + ret i32 0 + +cond_next4003: ; preds = %cond_false3904 + br i1 false, label %cond_next5160, label %cond_next4015 + +cond_next4015: ; preds = %cond_next4003 + ret i32 0 + +cond_next4378: ; preds = %cond_next3849 + br i1 false, label %cond_next4385, label %bb4393 + +cond_next4385: ; preds = %cond_next4378 + br i1 false, label %bb3862, label %bb4393 + +bb4393: ; preds = %cond_next4385, %cond_next4378 + ret i32 0 + +cond_next5160: ; preds = %cond_next4003 + br i1 false, label %bb5188, label %bb6559 + +bb5188: ; preds = %cond_next5160 + br i1 false, label %cond_next5285, label %cond_true5210 + +cond_true5210: ; preds = %bb5188 + ret i32 0 + +cond_next5285: ; preds = %bb5188 + br i1 false, label %cond_true5302, label %cond_true5330 + +cond_true5302: ; preds = %cond_next5285 + br i1 false, label %bb7405, label %bb7367 + +cond_true5330: ; preds = %cond_next5285 + ret i32 0 + +bb6559: ; preds = %cond_next5160, %cond_next3849 + ret i32 0 + +bb7367: ; preds = %cond_true5302 + ret i32 0 + +bb7405: ; preds = %cond_true5302 + br i1 false, label %cond_next8154, label %cond_true7410 + +cond_true7410: ; preds = %bb7405 + ret i32 0 + +cond_next8154: ; preds = %bb7405 + br i1 false, label %cond_true8235, label %bb9065 + +cond_true8235: ; preds = %cond_next8154 + br i1 false, label %bb8274, label %bb8245 + +bb8245: ; preds = %cond_true8235 + ret i32 0 + +bb8274: ; preds = %cond_true8235 + br i1 false, label %cond_next8358, label %cond_true8295 + +cond_true8295: ; preds = %bb8274 + ret i32 0 + +cond_next8358: ; preds = %bb8274 + br i1 false, label %cond_next.i509, label %cond_true8371 + +cond_true8371: ; preds = %cond_next8358 + ret i32 -123 + +cond_next.i509: ; preds = %cond_next8358 + br i1 false, label %bb36.i, label %bb33.i + +bb33.i: ; preds = %cond_next.i509 + ret i32 0 + +bb36.i: ; preds = %cond_next.i509 + br i1 false, label %cond_next54.i, label %cond_true51.i + +cond_true51.i: ; preds = %bb36.i + ret i32 0 + +cond_next54.i: ; preds = %bb36.i + %tmp10.i.i527 = call i8* @calloc( i64 0, i64 1 ) ; [#uses=1] + br i1 false, label %cond_next11.i.i, label %bb132.i + +bb132.i: ; preds = %cond_next54.i + ret i32 0 + +cond_next11.i.i: ; preds = %cond_next54.i + br i1 false, label %bb32.i.i545, label %cond_true1008.critedge.i + +bb32.i.i545: ; preds = %cond_next11.i.i + br i1 false, label %cond_next349.i, label %cond_true184.i + +cond_true184.i: ; preds = %bb32.i.i545 + ret i32 0 + +cond_next349.i: ; preds = %bb32.i.i545 + br i1 false, label %cond_next535.i, label %cond_true1008.critedge1171.i + +cond_next535.i: ; preds = %cond_next349.i + br i1 false, label %cond_next569.i, label %cond_false574.i + +cond_next569.i: ; preds = %cond_next535.i + br i1 false, label %cond_next670.i, label %cond_true1008.critedge1185.i + +cond_false574.i: ; preds = %cond_next535.i + ret i32 0 + +cond_next670.i: ; preds = %cond_next569.i + br i1 false, label %cond_true692.i, label %cond_next862.i + +cond_true692.i: ; preds = %cond_next670.i + br i1 false, label %cond_false742.i, label %cond_true718.i + +cond_true718.i: ; preds = %cond_true692.i + ret i32 0 + +cond_false742.i: ; preds = %cond_true692.i + br i1 false, label %cond_true784.i, label %cond_next9079 + +cond_true784.i: ; preds = %cond_next811.i, %cond_false742.i + %indvar1411.i.reg2mem.0 = phi i8 [ %indvar.next1412.i, %cond_next811.i ], [ 0, %cond_false742.i ] ; [#uses=1] + br i1 false, label %cond_true1008.critedge1190.i, label %cond_next811.i + +cond_next811.i: ; preds = %cond_true784.i + %indvar.next1412.i = add i8 %indvar1411.i.reg2mem.0, 1 ; [#uses=2] + %tmp781.i = icmp eq i8 %indvar.next1412.i, 3 ; [#uses=1] + br i1 %tmp781.i, label %cond_next9079, label %cond_true784.i + +cond_next862.i: ; preds = %cond_next670.i + ret i32 0 + +cond_true1008.critedge.i: ; preds = %cond_next11.i.i + ret i32 0 + +cond_true1008.critedge1171.i: ; preds = %cond_next349.i + ret i32 0 + +cond_true1008.critedge1185.i: ; preds = %cond_next569.i + ret i32 0 + +cond_true1008.critedge1190.i: ; preds = %cond_true784.i + %tmp621.i532.lcssa610 = phi i8* [ %tmp10.i.i527, %cond_true784.i ] ; [#uses=0] + ret i32 0 + +bb9065: ; preds = %cond_next8154 + ret i32 0 + +cond_next9079: ; preds = %cond_next811.i, %cond_false742.i + ret i32 0 +} -- 2.34.1