diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Transforms/Scalar/NewGVN.cpp | 8 | ||||
-rw-r--r-- | llvm/test/Transforms/NewGVN/pr32852.ll | 24 |
2 files changed, 28 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/NewGVN.cpp b/llvm/lib/Transforms/Scalar/NewGVN.cpp index 18d31f16a74..162d91beae7 100644 --- a/llvm/lib/Transforms/Scalar/NewGVN.cpp +++ b/llvm/lib/Transforms/Scalar/NewGVN.cpp @@ -1628,15 +1628,15 @@ const Expression *NewGVN::performSymbolicCmpEvaluation(Instruction *I) { if (PBranch->TrueEdge) { // If we know the previous predicate is true and we are in the true // edge then we may be implied true or false. - if (CmpInst::isImpliedTrueByMatchingCmp(OurPredicate, - BranchPredicate)) { + if (CmpInst::isImpliedTrueByMatchingCmp(BranchPredicate, + OurPredicate)) { addPredicateUsers(PI, I); return createConstantExpression( ConstantInt::getTrue(CI->getType())); } - if (CmpInst::isImpliedFalseByMatchingCmp(OurPredicate, - BranchPredicate)) { + if (CmpInst::isImpliedFalseByMatchingCmp(BranchPredicate, + OurPredicate)) { addPredicateUsers(PI, I); return createConstantExpression( ConstantInt::getFalse(CI->getType())); diff --git a/llvm/test/Transforms/NewGVN/pr32852.ll b/llvm/test/Transforms/NewGVN/pr32852.ll new file mode 100644 index 00000000000..1441d17361b --- /dev/null +++ b/llvm/test/Transforms/NewGVN/pr32852.ll @@ -0,0 +1,24 @@ +; Make sure GVN doesn't incorrectly think the branch terminating +; bb2 has a constant condition. +; RUN: opt -S -newgvn %s | FileCheck %s + +@a = common global i32 0 +@patatino = private unnamed_addr constant [3 x i8] c"0\0A\00" + +define void @tinkywinky() { +bb: + %tmp = load i32, i32* @a + %tmp1 = icmp sge i32 %tmp, 0 + br i1 %tmp1, label %bb2, label %bb7 +bb2: + %tmp4 = icmp sgt i32 %tmp, 0 +; CHECK: br i1 %tmp4, label %bb5, label %bb7 + br i1 %tmp4, label %bb5, label %bb7 +bb5: + %tmp6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @patatino, i32 0, i32 0)) + br label %bb7 +bb7: + ret void +} + +declare i32 @printf(i8*, ...) |