This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][ARM] PR target/70566 Check that condition register is dead in tst-imm -> lsls-imm Thumb2 peepholes


On 11/04/16 14:27, Kyrill Tkachov wrote:
> 
> On 08/04/16 10:30, Richard Earnshaw (lists) wrote:
>> On 07/04/16 15:51, Kyrill Tkachov wrote:
>>> Hi all,
>>>
>>> In this wrong-code PR we have a Thumb2 peephole transforming:
>>>      tst    r3, #2
>>>      bne    .L3
>>>      beq    .L6
>>>
>>> into:
>>>      lsls    r3, r3, #30  // LSLS is shorter than TST in Thumb2
>>>      bmi    .L3
>>>      beq    .L6
>>>
>>> that is, the branch following the extract+compare has its condition
>>> properly changed but the
>>> following branch doesn't get updated to check the opposite condition of
>>> MI (PL).
>>> Since the peepholes in thumb2.md only see the compare and a single
>>> branch the solution,
>>> suggested by Richard, is to guard those peepholes on the condition that
>>> the condition register
>>> is dead after the first branch. This patch does that and with it we no
>>> longer perform the transformation
>>> on the testcase. I've checked manually that we still perform the
>>> peephole when the condition register
>>> is indeed dead after the sequence.
>>>
>>> Bootstrapped and tested on on arm-none-linux-gnueabihf with
>>> --with-mode=thumb as this affects only
>>> Thumb2 codegen.
>>>
>>> Ok for trunk?
>>>
>>> This PR also affects GCC 5 and 4.9 so I'll be testing the patch there as
>>> well.
>>>
>>> Thanks,
>>> Kyrill
>>>
>>>
>>> 2016-04-07  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>>
>>>      PR target/70566
>>>      * config/arm/thumb2.md (tst + branch-> lsls + branch
>>>      peephole below *orsi_not_shiftsi_si): Require that condition
>>>      register is dead after the peephole.
>>>      (second peephole after the above): Likewise.
>>>
>>> 2016-04-07  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>>
>>>      PR target/70566
>>>      * gcc.c-torture/execute/pr70566.c: New test.
>>
>> OK.
> 
> Thanks, the patch has passed bootstrap and test on the GCC 5 and 4.9
> branches. Is it ok to backport it there as well?
> 

OK by me.

R.

> Thanks,
> Kyrill
> 
>>
>> R.
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]