cprop_hardreg: Ensure replacement reg has compatible mode [PR99221]

In addition to the existing check also ask the target whether a
replacement register may be accessed in a different mode than it was set
before.

gcc/ChangeLog:

	* regcprop.c (find_oldest_value_reg): Ask target whether
	  different mode is fine for replacement register.
This commit is contained in:
Stefan Schulze Frielinghaus 2021-03-12 17:32:42 +01:00
parent e54da1b6b3
commit a28cc94a27
1 changed files with 2 additions and 1 deletions

View File

@ -474,7 +474,8 @@ find_oldest_value_reg (enum reg_class cl, rtx reg, struct value_data *vd)
(set (...) (reg:DI r9))
Replacing r9 with r11 is invalid. */
if (mode != vd->e[regno].mode
&& REG_NREGS (reg) > hard_regno_nregs (regno, vd->e[regno].mode))
&& (REG_NREGS (reg) > hard_regno_nregs (regno, vd->e[regno].mode)
|| !REG_CAN_CHANGE_MODE_P (regno, mode, vd->e[regno].mode)))
return NULL_RTX;
for (i = vd->e[regno].oldest_regno; i != regno; i = vd->e[i].next_regno)