[llvm] r273105 - [LoadCombine] Combine Loads formed from GEPS with negative indexes

David Majnemer via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 19 14:58:49 PDT 2016


On Sun, Jun 19, 2016 at 12:08 AM, Eli Friedman <eli.friedman at gmail.com>
wrote:

> On Sat, Jun 18, 2016 at 11:14 PM, David Majnemer via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: majnemer
>> Date: Sun Jun 19 01:14:56 2016
>> New Revision: 273105
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=273105&view=rev
>> Log:
>> [LoadCombine] Combine Loads formed from GEPS with negative indexes
>>
>> Change the underlying offset and comparisons to use int64_t instead of
>> uint64_t.
>>
>> Patch by River Riddle!
>>
>> Differential Revision: http://reviews.llvm.org/D21499
>>
>> Added:
>>     llvm/trunk/test/Transforms/LoadCombine/load-combine-negativegep.ll
>> Modified:
>>     llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp
>>
>> Modified: llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp?rev=273105&r1=273104&r2=273105&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp Sun Jun 19 01:14:56
>> 2016
>> @@ -40,7 +40,7 @@ STATISTIC(NumLoadsCombined, "Number of l
>>  namespace {
>>  struct PointerOffsetPair {
>>    Value *Pointer;
>> -  uint64_t Offset;
>> +  int64_t Offset;
>>  };
>>
>>  struct LoadPOPPair {
>> @@ -102,7 +102,7 @@ PointerOffsetPair LoadCombine::getPointe
>>        unsigned BitWidth = DL.getPointerTypeSizeInBits(GEP->getType());
>>        APInt Offset(BitWidth, 0);
>>        if (GEP->accumulateConstantOffset(DL, Offset))
>> -        POP.Offset += Offset.getZExtValue();
>> +        POP.Offset += Offset.getSExtValue();
>>
>
> This line seems a bit suspcious... one, it assumes pointers are never more
> than 64 bits wide, and two, the addition could have signed overflow.
>

Should be done with r273126, however accumulateConstantOffset's internal
logic also needs to check for signed overflow.


>
>
> -Eli
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160619/94883a21/attachment.html>


More information about the llvm-commits mailing list