On Mon, Nov 21, 2016 at 12:49 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
> On Sun, Nov 20, 2016 at 10:00 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
>>>> This also eliminate quite a few zero-extensions in the compile.exp 
>>>> testsuite
>>>> at -O2 on the SPARC.  Tested on x86-64/Linux and SPARC/Solaris.
>>>>
>>>>
>>>> 2016-11-07  Eric Botcazou  <ebotca...@adacore.com>
>>>>
>>>> PR rtl-optimization/59461
>>>> * doc/rtl.texi (paradoxical subregs): Add missing word.
>>>> * combine.c (reg_nonzero_bits_for_combine): Do not discard results
>>>> in modes with precision larger than that of last_set_mode.
>>>> * rtlanal.c (nonzero_bits1) <SUBREG>: If WORD_REGISTER_OPERATIONS is
>>>> set and LOAD_EXTEND_OP is appropriate, propagate results from inner
>>>> REGs to paradoxical SUBREGs.
>>>> (num_sign_bit_copies1) <SUBREG>: Likewise.  Check that the mode is not
>>>> larger than a word before invoking LOAD_EXTEND_OP on it.
>>>
>>> I have installed it after testing on ARM/EABI and IA-64/Linux.
>>
>> Just a heads-up for now, the above patch introduced following
>> testsuite failures on Alpha [1]:
>>
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-1.c   -O2  execution test
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-1.c   -O3 -g  execution test
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-1.c   -O2 -flto
>> -fno-use-linker-plugin -flto-partition=none  execution test
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-1.c   -O2 -flto
>> -fuse-linker-plugin -fno-fat-lto-objects  execution test
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-2.c   -O2  execution test
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-2.c   -O3 -g  execution test
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-2.c   -O2 -flto
>> -fno-use-linker-plugin -flto-partition=none  execution test
>> FAIL: gcc.dg/atomic/stdatomic-compare-exchange-2.c   -O2 -flto
>> -fuse-linker-plugin -fno-fat-lto-objects  execution test
>>
>> On a first look, it looks that something is wrong with sign-extensions.
>>
>> I will try to look into this a bit more.
>
> Your patch exposes a problem in the ree pass where:
>
>    50: $22:QI=$8:QI
>       REG_EQUAL [`expected']
>    43: [$2:DI+low(`expected')]=$8:QI
>    51: $3:DI=sign_extend($22:QI)
>
> gets converted to:
>
>    50: $3:DI=sign_extend($8:QI)
>   141: $22:DI=$3:DI
>    43: [$2:DI+low(`expected')]=$8:QI
>
> $22:DI is used later in a fallthrough block, and the above sequences
> are certainly not equal wrt. to $22. The first one does have all high
> bits of $22 zero, the second one doesn't.
>
> -fno-ree fixes the failures.
>
> I will fill a PR tomorrow.

PR 78437 [1].

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78437

Uros.

Reply via email to