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]));

Reply via email to