[gcc r11-7775] cprop_hardreg: Ensure replacement reg has compatible mode [PR99221]
Stefan Schulze Frielinghaus
stefansf@gcc.gnu.org
Tue Mar 23 08:51:24 GMT 2021
https://gcc.gnu.org/g:a28cc94a27529b3108ea85be9ef5557a3c95791d
commit r11-7775-ga28cc94a27529b3108ea85be9ef5557a3c95791d
Author: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com>
Date: Fri Mar 12 17:32:42 2021 +0100
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.
Diff:
---
gcc/regcprop.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc/regcprop.c b/gcc/regcprop.c
index e1342f56bd1..02753a12510 100644
--- a/gcc/regcprop.c
+++ b/gcc/regcprop.c
@@ -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)
More information about the Gcc-cvs
mailing list