Hi Bin,

On 3 May 2017 at 12:12, Bin.Cheng <amker.ch...@gmail.com> wrote:
> On Wed, May 3, 2017 at 11:09 AM, Kyrill Tkachov
> <kyrylo.tkac...@foss.arm.com> wrote:
>> Hi Bin,
>>
>>
>> On 03/05/17 11:02, Bin.Cheng wrote:
>>>
>>> On Wed, May 3, 2017 at 9:38 AM, Bin.Cheng <amker.ch...@gmail.com> wrote:
>>>>
>>>> On Wed, May 3, 2017 at 7:17 AM, Eric Botcazou <ebotca...@adacore.com>
>>>> wrote:
>>>>>>
>>>>>> 2017-04-11  Bin Cheng  <bin.ch...@arm.com>
>>>>>>
>>>>>>        * rtlanal.c (rtx_cost): Handle TRUNCATE between tieable modes.
>>>>>
>>>>> This breaks bootstrap with RTL checking:
>>>>>
>>>>> /home/eric/build/gcc/native/./gcc/xgcc
>>>>> -B/home/eric/build/gcc/native/./gcc/ -
>>>>> nostdinc -x c /dev/null -S -o /dev/null -fself-
>>>>> test=/home/eric/svn/gcc/gcc/testsuite/selftests
>>>>> cc1: internal compiler error: RTL check: expected code 'subreg', have
>>>>> 'truncate' in rtx_cost, at rtlanal.c:4169
>>>>> 0xbae338 rtl_check_failed_code1(rtx_def const*, rtx_code, char const*,
>>>>> int,
>>>>> char const*)
>>>>>          /home/eric/svn/gcc/gcc/rtl.c:829
>>>>> 0xbbc9b4 rtx_cost(rtx_def*, machine_mode, rtx_code, int, bool)
>>>>>          /home/eric/svn/gcc/gcc/rtlanal.c:4169
>>>>> 0x8517e6 set_src_cost
>>>>>          /home/eric/svn/gcc/gcc/rtl.h:2685
>>>>> 0x8517e6 init_expmed_one_conv
>>>>>          /home/eric/svn/gcc/gcc/expmed.c:142
>>>>> 0x8517e6 init_expmed_one_mode
>>>>>          /home/eric/svn/gcc/gcc/expmed.c:209
>>>>> 0x853fb2 init_expmed()
>>>>>          /home/eric/svn/gcc/gcc/expmed.c:270
>>>>> 0xc45974 backend_init_target
>>>>>          /home/eric/svn/gcc/gcc/toplev.c:1665
>>>>> 0xc45974 initialize_rtl()
>>>>>
>>>> Sorry for disturbing, I will revert this if can't fix today.
>>>
>>> It looks bogus and I couldn't find the motivating case for it, so
>>> revert with attached patch.  Build on x86 and commit as obvious.
>>>
>>> Thanks,
>>> bin
>>> 2017-05-03  Bin Cheng  <bin.ch...@arm.com>
>>>
>>>      Revert
>>>      2017-05-02  Bin Cheng  <bin.ch...@arm.com>
>>>      * rtlanal.c (rtx_cost): Handle TRUNCATE between tieable modes.
>>
>>
>> Looking at the code in the patch...
>>
>> +    case TRUNCATE:
>> +      /* If we can tie these modes, make this cheap.  */
>> +      if (MODES_TIEABLE_P (mode, GET_MODE (SUBREG_REG (x))))
>>
>> 'code' here is GET_CODE (x) and in this case it is TRUNCATE.
>> SUBREG_REG asserts (in RTL checking mode) that its argument is a SUBREG, so
>> passing it a TRUNCATE rtx would cause
>> the checking failure Eric reported. I think you meant to use XEXP (x, 0)
>> instead of SUBREG_REG (x) ?
> Yes, I guess so.  Reverted since I couldn't find the original test.
>

If it helps, your patch also introduced regressions on some arm targets.
See: 
http://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/247509/report-build-info.html

    gcc.c-torture/execute/pr53645-2.c   -O2  (test for excess errors)
    gcc.c-torture/execute/pr53645-2.c   -O2 -flto
-fno-use-linker-plugin -flto-partition=none  (test for excess errors)
    gcc.c-torture/execute/pr53645-2.c   -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects  (test for excess errors)
    gcc.c-torture/execute/pr53645-2.c   -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions  (test for
excess errors)
    gcc.c-torture/execute/pr53645-2.c   -O3 -g  (test for excess errors)

Thanks,

Christophe

> Thanks,
> bin
>>
>> Thanks,
>> Kyrill
>>

Reply via email to