[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