[Bug target/38991] [4.3/4.4 Regression] SH: ICE in extract_insn at recog.c:1990
kkojima at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Feb 3 13:31:00 GMT 2009
------- 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
More information about the Gcc-bugs
mailing list