From a5c5e7715c107d051f59b2f0ef78d6acd9229afa Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 13 Jan 2007 23:11:38 +0000 Subject: [PATCH] Fix Transforms/InstCombine/2007-01-13-ExtCompareMiscompile.ll, which is part of PR1107 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33185 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/InstructionCombining.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index aecc9a93ef1..743502240d4 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -5263,9 +5263,19 @@ Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) { RHSCIOp = CI->getOperand(0); if (RHSCIOp->getType() != LHSCIOp->getType()) return 0; - else - // Okay, just insert a compare of the reduced operands now! - return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); + + // If the signedness of the two compares doesn't agree (i.e. one is a sext + // and the other is a zext), then we can't handle this. + if (CI->getOpcode() != LHSCI->getOpcode()) + return 0; + + // Likewise, if the signedness of the [sz]exts and the compare don't match, + // then we can't handle this. + if (isSignedExt != isSignedCmp && !ICI.isEquality()) + return 0; + + // Okay, just insert a compare of the reduced operands now! + return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); } // If we aren't dealing with a constant on the RHS, exit early -- 2.34.1