diff options
author | Cullen Rhodes <cullen.rhodes@arm.com> | 2021-12-07 09:53:16 +0000 |
---|---|---|
committer | Cullen Rhodes <cullen.rhodes@arm.com> | 2021-12-07 10:38:26 +0000 |
commit | 0395e015830085b3623369a68cc031c86aec7221 (patch) | |
tree | 3c46524e7bd06cc62765e76f8119507adb0029e5 /llvm/lib/Analysis/ValueTracking.cpp | |
parent | 3460cc2585c5c94ecc296d1f48b63cba37092cae (diff) | |
download | llvm-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.cpp | 18 |
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); |