Regression with r200947: [CodeGenPrepare] Move away sign extensions that get in the way of addressing mode.

Quentin Colombet qcolombet at apple.com
Fri Feb 14 14:30:03 PST 2014


On Feb 14, 2014, at 2:06 PM, Tom Stellard <tom at stellard.net> wrote:

> On Thu, Feb 13, 2014 at 09:39:52AM -0800, Quentin Colombet wrote:
>> Hi Tom,
>> On Feb 13, 2014, at 8:22 AM, Tom Stellard <tom at stellard.net> wrote:
>> 
>>> On Wed, Feb 12, 2014 at 02:55:57PM -0800, Quentin Colombet wrote:
>>>> 
>>>> On Feb 12, 2014, at 2:07 PM, Tom Stellard <tom at stellard.net> wrote:
>>>> 
>>>>> On Wed, Feb 12, 2014 at 01:43:25PM -0800, Quentin Colombet wrote:
>>>>>> Hi Tom,
>>>>>> 
>>>>>> I think you find a bug in TargetLoweringBase::isLegalAddressingMode.
>>>>>> 
>>>>>> Indeed, TargetLoweringBase::isLegalAddressingMode (which is what it is called in your case), says that 3*r + r is a valid addressing mode.
>>>>>> Basically, this returns true for every scale that is not 0, 1, and 2. I believe it misses a default case in the switch statement that return false.
>>>>>> 
>>>>>> Alternatively, you could have overloaded this function for your target, to be sure it accepts only what it should.
>>>>>> 
>>>>>> Assuming you fixes this problem, the promotion would still be performed because in that case the transformation is neutral (i.e., we do not create new instructions).
>>>>>> The difference is: instead of selecting:
>>>>>> %in + %sext
>>>>>> we would select:
>>>>>> %in + %promoted_mul
>>>>>> 
>>>>>> That said, the mul 64bit is not a legal operation on your platform (nor is mul i32), thus, I could drop the change if we did not fold the instruction into the addressing mode when the operation is not legal.
>>>>>> 
>>>>> 
>>>>> I think it makes sense to avoid the promotion if the result can't be
>>>>> folded into the addressing mode.
>>>> Well, that is a bit more complex than this.
>>>> When it is neutral, it may still be a good idea to perform the transformation because it may expose more simplifications (like sext + load).
>>>> However, I would prefer the promotion not to be smart about that, at least for now.
>>>> 
>>>> Therefore, I still think that checking for an  operation to be legal or not may still be a viable approach.
>>>> 
>>>> 
>>>>> How will you determine whether or not an
>>>>> operation is legal?
>>>> TLI.isOperationLegalOrCustom?
>>>> 
>>> 
>>> Ok, I didn't realize IR passes had access to this.
>>> 
>>>> See the attached patch for an example of implementation.
>>>> 
>>>> If this serves your purposes, let me know when you fixed the isLegalAddressingMode and I will commit this patch with your test case.
>>>> 
>>> 
>>> I just sent a patch to the list to fix isLegalAddressingMode.  I
>>> included the test case with that patch and marked it as XFAIL.  With
>>> this patch and your patch everything works fine.
>> Great!
>> I’ll wait for that patch to land before including this one.
>> 
> 
> I just committed this patch.  Make sure to remove XFAIL from the test case when you
> commit yours.  Thanks for fixing this.
Done in r201439.

Thanks,
-Quentin

> 
> -Tom
> 
>> Thanks,
>> -Quentin
>> 
>>> 
>>> Thanks,
>>> Tom
>>> 
>>>> As it is the matched thinks the mul is folded anyway, making the proposed tuning useless.
>>>> 
>>>> Thanks,
>>>> -Quentin
>>>> 
>>>>> 
>>>>> -Tom
>>>>> 
>>>>>> Thanks for the test case.
>>>>>> -Quentin
>>>>>> 
>>>>>> On Feb 12, 2014, at 12:58 PM, Quentin Colombet <qcolombet at apple.com> wrote:
>>>>>> 
>>>>>>> Sure, I’m looking into it.
>>>>>>> 
>>>>>>> -Quentin
>>>>>>> 
>>>>>>> On Feb 12, 2014, at 12:03 PM, Tom Stellard <tom at stellard.net> wrote:
>>>>>>> 
>>>>>>>> Hi Quentin,
>>>>>>>> 
>>>>>>>> I've discovered a regression with this commit, please see the attached test case.
>>>>>>>> In this case, CodeGenPrepare is promoting the mul in a sext + mul pattern even
>>>>>>>> though the addressing mode it is creating isn't legal.
>>>>>>>> 
>>>>>>>> One interesting thing about this test case is that if you remove the
>>>>>>>> nsw from the mul instruction, then the incorrect transform does not
>>>>>>>> take place.  I'm not sure why this matters.  Would you mind taking a look?
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Tom
>>>>>>>> <codegen-prepare-addrmode-sext.ll>
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> llvm-commits mailing list
>>>>>>> llvm-commits at cs.uiuc.edu
>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140214/4680daec/attachment.html>


More information about the llvm-commits mailing list