[Bug target/79004] ICE in gcc.dg/torture/fp-int-convert-float128-ieee.c with -mcpu=power9

bergner at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Jan 5 20:47:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79004

--- Comment #3 from Peter Bergner <bergner at gcc dot gnu.org> ---
Minimal test case:

bergner@genoa:~/gcc/BUGS/PR79004$ cat pr79004.i 
int
main (void)
{
  char ivin;
  _Float64x fv2 = ivin;
}
bergner@genoa:~/gcc/BUGS/PR79004$
/home/bergner/gcc/build/gcc-fsf-mainline-reg-move_costs-debug/gcc/xgcc
-B/home/bergner/gcc/build/gcc-fsf-mainline-reg-move_costs-debug/gcc -O0
-mfloat128 -mvsx -S -mcpu=power9 pr79004.i 
pr79004.i: In function ‘main’:
pr79004.i:6:1: internal compiler error: in gen_reg_rtx, at emit-rtl.c:1026
 }
 ^
0x106e9fbb gen_reg_rtx(machine_mode)
       
/home/bergner/gcc/gcc-fsf-mainline-reg-move_costs-lra/gcc/emit-rtl.c:1026
0x1137ea7f convert_int_to_float128(rtx_def**, rtx_code)
       
/home/bergner/gcc/gcc-fsf-mainline-reg-move_costs-lra/gcc/config/rs6000/rs6000.c:24395
0x11694d2b gen_split_412(rtx_insn*, rtx_def**)
       
/home/bergner/gcc/gcc-fsf-mainline-reg-move_costs-lra/gcc/config/rs6000/rs6000.md:14358

The problem is that we're trying to generate a new reg, but reload_completed is
true, so we cannot.  We're trying to generate the new reg here:

void
convert_int_to_float128 (rtx *operands, enum rtx_code code)
{
  rtx dest = operands[0];
  rtx src = operands[1];
  rtx tmp = operands[2];
  rtx cvt;
  rtvec cvt_vec;
  rtx cvt_unspec;
  rtvec move_vec;
  rtx move_unspec;
  rtx unsigned_flag;

  if (GET_CODE (tmp) == SCRATCH)
    tmp = gen_reg_rtx (V2DImode);


More information about the Gcc-bugs mailing list