diff mbox series

cprop_hardreg: Ensure replacement reg has compatible mode [PR99221]

Message ID 20210312165421.3379003-1-stefansf@linux.ibm.com
State New
Headers show
Series cprop_hardreg: Ensure replacement reg has compatible mode [PR99221] | expand

Commit Message

Stefan Schulze Frielinghaus March 12, 2021, 4:54 p.m. UTC
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.

Bootstrapped and regtested on IBM Z.  Ok for mainline?

gcc/ChangeLog:

	* regcprop.c (find_oldest_value_reg): Ask target whether
	  different mode is fine for replacement register.
---
 gcc/regcprop.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Jeff Law March 20, 2021, 3:34 p.m. UTC | #1
On 3/12/2021 10:54 AM, Stefan Schulze Frielinghaus via Gcc-patches wrote:
> 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.
>
> Bootstrapped and regtested on IBM Z.  Ok for mainline?
>
> gcc/ChangeLog:
>
> 	* regcprop.c (find_oldest_value_reg): Ask target whether
> 	  different mode is fine for replacement register.

OK

jeff
diff mbox series

Patch

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)