On 2022/06/11 16:58, Max Filippov wrote:
Hi Suwa-san,
hi!
this change results in a bunch of ICEs in the tests like this:
during RTL pass: split2
gcc/gcc/testsuite/gcc.c-torture/compile/20120727-1.c: In function 'f':
gcc/gcc/testsuite/gcc.c-torture/compile/20120727-1.c:13:1: internal
compiler error: in gen_split_5, at config/xtensa/xtensa.md:1186
[from config/xtensa/xtensa.md]
if (GET_MODE (x) == SFmode)
REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (x), l[0]);
else if (GET_MODE (x) == DFmode)
REAL_VALUE_TO_TARGET_DOUBLE (*CONST_DOUBLE_REAL_VALUE (x), l);
else
gcc_unreachable (); // line 1186
x = gen_rtx_REG (SImode, REGNO (operands[0]));
umm, i don't know how 'XEXP (operands[1], 0)' can be neither SFmode nor
DFmode...
please tell me that test piece of code, and/or apply the below patch and
reply what the compiler print to stderr:
--- gcc/config/xtensa/xtensa.md
+++ gcc/config/xtensa/xtensa.md
@@ -1183,7 +1183,10 @@
else if (GET_MODE (x) == DFmode)
REAL_VALUE_TO_TARGET_DOUBLE (*CONST_DOUBLE_REAL_VALUE (x), l);
else
- gcc_unreachable ();
+ {
+ print_rtl_single (stderr, x);
+ gcc_unreachable ();
+ }
x = gen_rtx_REG (SImode, REGNO (operands[0]));
if (! xtensa_constantsynth (x, l[i]))
emit_move_insn (x, GEN_INT (l[i]));