From: Bill Wendling Date: Sun, 4 Jan 2009 06:19:11 +0000 (+0000) Subject: Revert this transform. It was causing some dramatic slowdowns in a few tests. See... X-Git-Tag: android-x86-6.0-r1~1047^2~16565 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=37d6420cd0ad742568d9db38e0adda3d353d9473;p=android-x86%2Fexternal-llvm.git Revert this transform. It was causing some dramatic slowdowns in a few tests. See PR3266. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61623 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 39c48c3b438..b1474cca843 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -4880,37 +4880,6 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) { if (FCmpInst *FCI = dyn_cast(Op0)) return new FCmpInst(FCI->getInversePredicate(), FCI->getOperand(0), FCI->getOperand(1)); - - // xor (or (cmp x,m),(cmp y,n)),true --> and (!cmp x,m),(!cmp y,n) - // - // Proof: - // Let A = (cmp x,m) - // Let B = (cmp y,n) - // Let C = (or A, B) - // C true implies that either A, B, or both are true. - // - // (xor C, true) is true only if C is false. We can then apply de - // Morgan's law. QED. - BinaryOperator *Op0I = dyn_cast(Op0); - if (Op0I) { - Value *A, *B; - if (match(Op0I, m_Or(m_Value(A), m_Value(B)))) { - ICmpInst *AOp = dyn_cast(A); - ICmpInst *BOp = dyn_cast(B); - - if (AOp && BOp) { - ICmpInst *NewA = new ICmpInst(AOp->getInversePredicate(), - AOp->getOperand(0), - AOp->getOperand(1)); - InsertNewInstBefore(NewA, I); - ICmpInst *NewB = new ICmpInst(BOp->getInversePredicate(), - BOp->getOperand(0), - BOp->getOperand(1)); - InsertNewInstBefore(NewB, I); - return BinaryOperator::CreateAnd(NewA, NewB); - } - } - } } // fold (xor(zext(cmp)), 1) and (xor(sext(cmp)), -1) to ext(!cmp).