diff options
-rw-r--r-- | lib/Transforms/Scalar/CodeGenPrepare.cpp | 11 | ||||
-rw-r--r-- | test/Transforms/CodeGenPrepare/basic.ll | 31 |
2 files changed, 0 insertions, 42 deletions
diff --git a/lib/Transforms/Scalar/CodeGenPrepare.cpp b/lib/Transforms/Scalar/CodeGenPrepare.cpp index b4a2a12de0..60c7f7565e 100644 --- a/lib/Transforms/Scalar/CodeGenPrepare.cpp +++ b/lib/Transforms/Scalar/CodeGenPrepare.cpp @@ -211,17 +211,6 @@ bool CodeGenPrepare::CanMergeBlocks(const BasicBlock *BB, const PHINode *DestBBPN = dyn_cast<PHINode>(DestBB->begin()); if (!DestBBPN) return true; // no conflict. - // Walk all the PHI nodes in DestBB. If any of the input values to the PHI - // are trapping constant exprs, then merging this block would introduce the - // possible trap into new control flow if we have any critical predecessor - // edges. - for (BasicBlock::const_iterator I = DestBB->begin(); isa<PHINode>(I); ++I) { - const PHINode *PN = cast<PHINode>(I); - if (const Constant *C =dyn_cast<Constant>(PN->getIncomingValueForBlock(BB))) - if (C->canTrap()) - return false; - } - // Collect the preds of BB. SmallPtrSet<const BasicBlock*, 16> BBPreds; if (const PHINode *BBPN = dyn_cast<PHINode>(BB->begin())) { diff --git a/test/Transforms/CodeGenPrepare/basic.ll b/test/Transforms/CodeGenPrepare/basic.ll deleted file mode 100644 index 04b4f34bc3..0000000000 --- a/test/Transforms/CodeGenPrepare/basic.ll +++ /dev/null @@ -1,31 +0,0 @@ -; RUN: opt -codegenprepare %s -S | FileCheck %s -; PR8642 - -%0 = type <{ %1, %1 }> -%1 = type { i8, i8, i8, i8 } - -@g_2 = global %0 <{ %1 { i8 1, i8 0, i8 0, i8 undef }, %1 { i8 2, i8 0, i8 0, i8 undef } }>, align 4 -@g_4 = global %1 { i8 3, i8 0, i8 0, i8 undef }, align 4 - -; CGP shouldn't fold away the empty cond.false.i block, because the constant -; expr that will get dropped into it could trap. -define i16 @test1(i8** %argv, i1 %c) nounwind ssp { -entry: - br i1 %c, label %cond.end.i, label %cond.false.i - -cond.false.i: ; preds = %entry - br label %foo.exit - -cond.end.i: ; preds = %entry - store i8* null, i8** %argv - br label %foo.exit - -foo.exit: ; preds = %cond.end.i, %cond.false.i - %call1 = phi i16 [ trunc (i32 srem (i32 1, i32 zext (i1 icmp eq (%1* bitcast (i8* getelementptr inbounds (%0* @g_2, i64 0, i32 1, i32 0) to %1*), %1* @g_4) to i32)) to i16), %cond.false.i ], [ 1, %cond.end.i ] - ret i16 %call1 - -; CHECK: @test1 -; CHECK: cond.false.i: -; CHECK-NEXT: br label %foo.exit -} - |