[llvm] 9c837b7 - [ValueTracking] Improve the coverage of isKnownToBeAPowerOfTwo for vscale
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 7 08:48:23 PDT 2023
Just to close the loop for anyone reading along, this appears to have
been fixed in 5de89b4d9 and f6c7264.
Philip
On 8/7/23 07:28, Philip Reames wrote:
> This appears wrong, please revert. Also, no test cases?
>
> The incorrect case is: shl (vscale), 64. This produces zero, not a
> power of two.
>
> The added case needs to only apply when OrZero is true.
>
> Philip
>
>
> On 8/3/23 18:11, via llvm-commits wrote:
>> Author: Zhongyunde
>> Date: 2023-08-04T09:06:34+08:00
>> New Revision: 9c837b7d0e2e2dffae804f3df49c4aeefe4743c0
>>
>> URL:
>> https://github.com/llvm/llvm-project/commit/9c837b7d0e2e2dffae804f3df49c4aeefe4743c0
>> DIFF:
>> https://github.com/llvm/llvm-project/commit/9c837b7d0e2e2dffae804f3df49c4aeefe4743c0.diff
>>
>> LOG: [ValueTracking] Improve the coverage of isKnownToBeAPowerOfTwo
>> for vscale
>>
>> this PR tries to match the following pattern, seperate from D156881
>> ```
>> %vscale = call i64 @llvm.vscale.i64()
>> %shift = shl nuw nsw i64 %vscale, 11
>> ```
>> Now, we only check the shl recursively when the OrZero is true.
>>
>> Reviewed By: goldstein.w.n
>> Differential Revision: https://reviews.llvm.org/D157062
>>
>> Added:
>>
>> Modified:
>> llvm/lib/Analysis/ValueTracking.cpp
>>
>> Removed:
>>
>>
>> ################################################################################
>>
>> diff --git a/llvm/lib/Analysis/ValueTracking.cpp
>> b/llvm/lib/Analysis/ValueTracking.cpp
>> index e335d7c181995d..f8aa72605a7c21 100644
>> --- a/llvm/lib/Analysis/ValueTracking.cpp
>> +++ b/llvm/lib/Analysis/ValueTracking.cpp
>> @@ -2018,7 +2018,8 @@ bool isKnownToBeAPowerOfTwo(const Value *V,
>> bool OrZero, unsigned Depth,
>> return true;
>> if (match(V, m_Power2()))
>> return true;
>> - if (Q.CxtI && match(V, m_VScale())) {
>> + if (Q.CxtI &&
>> + (match(V, m_VScale()) || match(V, m_Shl(m_VScale(),
>> m_Value())))) {
>> const Function *F = Q.CxtI->getFunction();
>> // The vscale_range indicates vscale is a power-of-two.
>> return F->hasFnAttribute(Attribute::VScaleRange);
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list