------- Comment #2 from kkojima at gcc dot gnu dot org 2009-02-03 13:31 ------- It seems that the move insn in problem is generated when reloading but has no insn definition matched.
The patch --- ORIG/trunk/gcc/config/sh/predicates.md 2008-04-05 09:19:14.000000000 +0900 +++ INTEST/trunk/gcc/config/sh/predicates.md 2009-02-03 14:40:07.000000000 +0900 @@ -392,12 +392,6 @@ return 0; } - if ((mode == QImode || mode == HImode) - && (GET_CODE (op) == SUBREG - && GET_CODE (XEXP (op, 0)) == REG - && system_reg_operand (XEXP (op, 0), mode))) - return 0; - if (TARGET_SHMEDIA && (GET_CODE (op) == PARALLEL || GET_CODE (op) == CONST_VECTOR) && sh_rep_vec (op, mode)) will workaround this issue, though it may be slightly invasive and a thorough test will be needed. BTW, the asm statement in the test case looks a bit worse than __asm__( "swap.b %1, %0;" : "=r" (__reg) : "r" ((unsigned short) t)); which give a chance for compiler to allocate better registers in general. The above asm can avoid this PR too. -- kkojima at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kkojima at gcc dot gnu dot | |org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords| |ice-on-valid-code Known to fail| |4.3.3 4.4.0 Known to work| |4.2.4 Priority|P3 |P4 Last reconfirmed|0000-00-00 00:00:00 |2009-02-03 13:31:38 date| | Summary|ICE in extract_insn at |[4.3/4.4 Regression] SH: ICE |recog.c:1990 |in extract_insn at | |recog.c:1990 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38991