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

Thanks,
Kyrill

Reply via email to