From db6cb1a90cd0ab35e2dadc97962a5d67742c0bbc Mon Sep 17 00:00:00 2001 From: James Molloy Date: Tue, 26 Jan 2016 13:30:49 +0000 Subject: [PATCH] Merging r258690: ------------------------------------------------------------------------ r258690 | jamesm | 2016-01-25 14:49:36 +0000 (Mon, 25 Jan 2016) | 7 lines [DemandedBits] Fix computation of demanded bits for ICmps The computation of ICmp demanded bits is independent of the individual operand being evaluated. We simply return a mask consisting of the minimum leading zeroes of both operands. We were incorrectly passing "I" to ComputeKnownBits - this should be "UserI->getOperand(0)". In cases where we were evaluating the 1th operand, we were taking the minimum leading zeroes of it and itself. This should fix PR26266. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_38@258805 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/DemandedBits.cpp | 2 +- test/Analysis/DemandedBits/basic.ll | 13 +++++++++++-- utils/release/merge.sh | 4 ++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/Analysis/DemandedBits.cpp b/lib/Analysis/DemandedBits.cpp index 912c5ceb754..143d0b79f18 100644 --- a/lib/Analysis/DemandedBits.cpp +++ b/lib/Analysis/DemandedBits.cpp @@ -244,7 +244,7 @@ void DemandedBits::determineLiveOperandBits( break; case Instruction::ICmp: // Count the number of leading zeroes in each operand. - ComputeKnownBits(BitWidth, I, UserI->getOperand(1)); + ComputeKnownBits(BitWidth, UserI->getOperand(0), UserI->getOperand(1)); auto NumLeadingZeroes = std::min(KnownZero.countLeadingOnes(), KnownZero2.countLeadingOnes()); AB = ~APInt::getHighBitsSet(BitWidth, NumLeadingZeroes); diff --git a/test/Analysis/DemandedBits/basic.ll b/test/Analysis/DemandedBits/basic.ll index 487e522e9db..9973edf79c1 100644 --- a/test/Analysis/DemandedBits/basic.ll +++ b/test/Analysis/DemandedBits/basic.ll @@ -24,11 +24,20 @@ define i1 @test_icmp1(i32 %a, i32 %b) { ; CHECK-LABEL: 'test_icmp2' ; CHECK-DAG: DemandedBits: 0x1 for %3 = icmp eq i32 %1, %2 -; CHECK-DAG: DemandedBits: 0xFF for %1 = and i32 %a, 255 -; CHECK-DAG: DemandedBits: 0xF for %2 = ashr i32 %1, 4 +; CHECK-DAG: DemandedBits: 0xFFF for %1 = and i32 %a, 255 +; CHECK-DAG: DemandedBits: 0xFF for %2 = ashr i32 %1, 4 define i1 @test_icmp2(i32 %a, i32 %b) { %1 = and i32 %a, 255 %2 = ashr i32 %1, 4 %3 = icmp eq i32 %1, %2 ret i1 %3 } + +; CHECK-LABEL: 'test_icmp3' +; CHECK-DAG: DemandedBits: 0xFFFFFFFF for %1 = and i32 %a, 255 +; CHECK-DAG: DemandedBits: 0x1 for %2 = icmp eq i32 -1, %1 +define i1 @test_icmp3(i32 %a) { + %1 = and i32 %a, 255 + %2 = icmp eq i32 -1, %1 + ret i1 %2 +} diff --git a/utils/release/merge.sh b/utils/release/merge.sh index 93e08c7ce13..6ef7d26d5a7 100755 --- a/utils/release/merge.sh +++ b/utils/release/merge.sh @@ -72,7 +72,7 @@ else fi svn log -c $rev http://llvm.org/svn/llvm-project/$proj/trunk >> $tempfile 2>&1 -cd $proj.src +#cd $proj.src echo "# Updating tree" svn up @@ -81,7 +81,7 @@ if [ $revert = "yes" ]; then svn merge -c -$rev . || exit 1 else echo "# Merging r$rev into $proj locally" - svn merge -c $rev https://llvm.org/svn/llvm-project/$proj/trunk . || exit 1 + svn merge -c $rev https://jamesm@llvm.org/svn/llvm-project/$proj/trunk . || exit 1 fi echo -- 2.34.1