From: James Molloy <james.molloy@arm.com>
Date: Tue, 26 Jan 2016 13:30:49 +0000 (+0000)
Subject: Merging r258690:
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=db6cb1a90cd0ab35e2dadc97962a5d67742c0bbc;p=oota-llvm.git

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
---

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