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