summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorJames Molloy <james.molloy@arm.com>2016-01-25 14:49:36 +0000
committerJames Molloy <james.molloy@arm.com>2016-01-25 14:49:36 +0000
commit121de0bcfaf321bc39366cd7b2b31b80e2c157c6 (patch)
treea837a864fa1af22a05896ea8f95a8ae33edb4cc3 /llvm/test
parent1bd7f993fc1f6dda20bd39983d9bfc280459b3ef (diff)
downloadbcm5719-llvm-121de0bcfaf321bc39366cd7b2b31b80e2c157c6.tar.gz
bcm5719-llvm-121de0bcfaf321bc39366cd7b2b31b80e2c157c6.zip
[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. llvm-svn: 258690
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Analysis/DemandedBits/basic.ll13
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/test/Analysis/DemandedBits/basic.ll b/llvm/test/Analysis/DemandedBits/basic.ll
index 487e522e9db..9973edf79c1 100644
--- a/llvm/test/Analysis/DemandedBits/basic.ll
+++ b/llvm/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
+}
OpenPOWER on IntegriCloud