Changes in directory llvm/lib/Transforms/Scalar:
InstructionCombining.cpp updated: 1.593 -> 1.594 --- Log message: Fix Transforms/InstCombine/2007-01-13-ExtCompareMiscompile.ll, which is part of PR1107: http://llvm.org/PR1107 --- Diffs of the changes: (+13 -3) InstructionCombining.cpp | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.593 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.594 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.593 Fri Jan 12 01:05:14 2007 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Sat Jan 13 17:11:38 2007 @@ -5263,9 +5263,19 @@ 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 _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits