------- Comment #2 from kkojima at gcc dot gnu dot org 2007-07-03 00:21 -------
> Related to #21220?
Ah, maybe.
A reduced testcase:
unsigned int
foo (unsigned int n, unsigned d)
{
return n % d;
}
which fails on sh64-unknown-linux-gnu with -O -fpic -m5-64media-nofpu.
I've confirmed that the reduced testcase fails on all 4.[0123] and
doesn't fail on 3.4.6.
udivsi3_i1_media insn uses the predicate target_operand which permits
symbol_ref. When reloading, it's reloaded with a target register and,
in PIC case, legitimize_pic_address tries to use this target register
to compute the address with GOTOFF. This results the ICE.
I'm testing the attached patch.
--- ORIG/trunk/gcc/config/sh/sh.md Thu Jun 28 08:15:35 2007
+++ LOCAL/trunk/gcc/config/sh/sh.md Mon Jul 2 21:44:49 2007
@@ -1765,7 +1765,7 @@
(clobber (reg:DI TR0_REG))
(clobber (reg:DI TR1_REG))
(clobber (reg:DI TR2_REG))
- (use (match_operand 1 "target_operand" "b"))]
+ (use (match_operand 1 "target_reg_operand" "b"))]
"TARGET_SHMEDIA && (! TARGET_SHMEDIA_FPU || ! TARGET_DIVIDE_FP)"
"blink %1, r18"
[(set_attr "type" "sfunc")
@@ -1962,7 +1962,7 @@
(clobber (reg:SI R20_REG))
(clobber (reg:SI R21_REG))
(clobber (reg:SI TR0_REG))
- (use (match_operand 1 "target_operand" "b"))]
+ (use (match_operand 1 "target_reg_operand" "b"))]
"TARGET_SHMEDIA && (! TARGET_SHMEDIA_FPU || ! TARGET_DIVIDE_FP)"
"blink %1, r18"
[(set_attr "type" "sfunc")])
@@ -1976,7 +1976,7 @@
(clobber (reg:SI R21_REG))
(clobber (reg:SI TR0_REG))
(use (reg:SI R20_REG))
- (use (match_operand 1 "target_operand" "b"))]
+ (use (match_operand 1 "target_reg_operand" "b"))]
"TARGET_SHMEDIA && (! TARGET_SHMEDIA_FPU || ! TARGET_DIVIDE_FP)"
"blink %1, r18"
[(set_attr "type" "sfunc")])
--
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
GCC target triplet|sh64-superh-linux-gnu-ld |sh64-superh-linux-gnu
Keywords| |ice-on-valid-code
Known to fail|4.0.4 |4.0.4 4.1.2 4.2.0 4.3.0
Known to work| |3.4.6
Last reconfirmed|0000-00-00 00:00:00 |2007-07-03 00:21:57
date| |
Summary|cross compile sh64-superh- |[4.1/4.2/4.3 Regression]
|linux-gnu internal compiler |cross compile sh64-superh-
|error: in change_address_1, |linux-gnu internal compiler
|at emit-rtl.c:1800 |error: in change_address_1,
| |at emit-rtl.c:1800
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32506