From: Chris Lattner Date: Sun, 19 Dec 2010 04:23:03 +0000 (+0000) Subject: revert r122164, I'm going to go with a different approach. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a0d172f7fec17bcbc0b0681b42b8c6192072eea0;p=oota-llvm.git revert r122164, I'm going to go with a different approach. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122168 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/CodeGenPrepare.cpp b/lib/Transforms/Scalar/CodeGenPrepare.cpp index b4a2a12de03..60c7f7565eb 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(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(I); ++I) { - const PHINode *PN = cast(I); - if (const Constant *C =dyn_cast(PN->getIncomingValueForBlock(BB))) - if (C->canTrap()) - return false; - } - // Collect the preds of BB. SmallPtrSet BBPreds; if (const PHINode *BBPN = dyn_cast(BB->begin())) { diff --git a/test/Transforms/CodeGenPrepare/basic.ll b/test/Transforms/CodeGenPrepare/basic.ll deleted file mode 100644 index 04b4f34bc33..00000000000 --- 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 -} -