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 >>