aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorCullen Rhodes <cullen.rhodes@arm.com>2021-12-07 09:53:16 +0000
committerCullen Rhodes <cullen.rhodes@arm.com>2021-12-07 10:38:26 +0000
commit0395e015830085b3623369a68cc031c86aec7221 (patch)
tree3c46524e7bd06cc62765e76f8119507adb0029e5 /llvm/lib/Analysis/ValueTracking.cpp
parent3460cc2585c5c94ecc296d1f48b63cba37092cae (diff)
downloadllvm-0395e015830085b3623369a68cc031c86aec7221.zip
llvm-0395e015830085b3623369a68cc031c86aec7221.tar.gz
llvm-0395e015830085b3623369a68cc031c86aec7221.tar.bz2
[IR] Split vscale_range interface
Interface is split from: std::pair<unsigned, unsigned> getVScaleRangeArgs() into separate functions for min/max: unsigned getVScaleRangeMin(); Optional<unsigned> getVScaleRangeMax(); Reviewed By: sdesmalen, paulwalker-arm Differential Revision: https://reviews.llvm.org/D114075
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 1c41c77..4bec851 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -1709,23 +1709,25 @@ static void computeKnownBitsFromOperator(const Operator *I,
!II->getFunction()->hasFnAttribute(Attribute::VScaleRange))
break;
- auto VScaleRange = II->getFunction()
- ->getFnAttribute(Attribute::VScaleRange)
- .getVScaleRangeArgs();
+ auto Attr = II->getFunction()->getFnAttribute(Attribute::VScaleRange);
+ Optional<unsigned> VScaleMax = Attr.getVScaleRangeMax();
- if (VScaleRange.second == 0)
+ if (!VScaleMax)
break;
+ unsigned VScaleMin = Attr.getVScaleRangeMin();
+
// If vscale min = max then we know the exact value at compile time
// and hence we know the exact bits.
- if (VScaleRange.first == VScaleRange.second) {
- Known.One = VScaleRange.first;
- Known.Zero = VScaleRange.first;
+ if (VScaleMin == VScaleMax) {
+ Known.One = VScaleMin;
+ Known.Zero = VScaleMin;
Known.Zero.flipAllBits();
break;
}
- unsigned FirstZeroHighBit = 32 - countLeadingZeros(VScaleRange.second);
+ unsigned FirstZeroHighBit =
+ 32 - countLeadingZeros(VScaleMax.getValue());
if (FirstZeroHighBit < BitWidth)
Known.Zero.setBitsFrom(FirstZeroHighBit);