Commit 69a35085 by Richard Sandiford Committed by Richard Sandiford

Fix mode_for_size units in caller-save.c (PR83761)

The new opt_mode asserts triggered for replace_reg_with_saved_mem
because it was passing bytes rather than bits to mode_for_size.
Previously we ended up with a BLKmode register instead, but
presumably that didn't matter because this is "only" used for
debug insns.

2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	PR rtl-optimization/83761
	* caller-save.c (replace_reg_with_saved_mem): Pass bits rather
	than bytes to mode_for_size.

From-SVN: r256525
parent fab58852
2018-01-11 Richard Sandiford <richard.sandiford@linaro.org>
PR rtl-optimization/83761
* caller-save.c (replace_reg_with_saved_mem): Pass bits rather
than bytes to mode_for_size.
2018-01-10 Jan Hubicka <hubicka@ucw.cz>
PR middle-end/83189
......
......@@ -1147,7 +1147,8 @@ replace_reg_with_saved_mem (rtx *loc,
machine_mode smode = save_mode[regno];
gcc_assert (smode != VOIDmode);
if (hard_regno_nregs (regno, smode) > 1)
smode = mode_for_size (exact_div (GET_MODE_SIZE (mode), nregs),
smode = mode_for_size (exact_div (GET_MODE_BITSIZE (mode),
nregs),
GET_MODE_CLASS (mode), 0).require ();
XVECEXP (mem, 0, i) = gen_rtx_REG (smode, regno + i);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment