aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/ConstantRange.cpp
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2022-05-17 10:02:50 +0200
committerNikita Popov <npopov@redhat.com>2022-05-17 10:05:12 +0200
commit2db4dc7ec0595dae4b2fb5499da698eb117e2dc7 (patch)
tree00844d67d8370d56dea8c2a65619521da0a06bce /llvm/lib/IR/ConstantRange.cpp
parent821522d343cd127312fb07b53aa99e22b3aacc0c (diff)
downloadllvm-2db4dc7ec0595dae4b2fb5499da698eb117e2dc7.zip
llvm-2db4dc7ec0595dae4b2fb5499da698eb117e2dc7.tar.gz
llvm-2db4dc7ec0595dae4b2fb5499da698eb117e2dc7.tar.bz2
[ConstantRange] Implement binaryXor() using known bits
This allows us to compute known high bits. It's not optimal, but better than nothing.
Diffstat (limited to 'llvm/lib/IR/ConstantRange.cpp')
-rw-r--r--llvm/lib/IR/ConstantRange.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/llvm/lib/IR/ConstantRange.cpp b/llvm/lib/IR/ConstantRange.cpp
index 16eb4d0..ce2e537 100644
--- a/llvm/lib/IR/ConstantRange.cpp
+++ b/llvm/lib/IR/ConstantRange.cpp
@@ -1430,8 +1430,7 @@ ConstantRange ConstantRange::binaryXor(const ConstantRange &Other) const {
if (isSingleElement() && getSingleElement()->isAllOnes())
return Other.binaryNot();
- // TODO: replace this with something less conservative
- return getFull();
+ return fromKnownBits(toKnownBits() ^ Other.toKnownBits(), /*IsSigned*/false);
}
ConstantRange