Hi all,

this patch is to fix a force_reg returned rtx potentially modified in
`aarch64_general_expand_builtin`.

Bootstrapped and reg-tested on aarch64-none-linux-gnu.

Okay for trunk?

Thanks

  Andrea

2020-11-06  Andrea Corallo  <andrea.cora...@arm.com>

        * config/aarch64/aarch64-builtins.c
        (aarch64_expand_fcmla_builtin): Do not alter force_reg returned
        register.

>From 203d9688cee6298a10f14a79e6ca58b2fadeafc9 Mon Sep 17 00:00:00 2001
From: Andrea Corallo <andrea.cora...@arm.com>
Date: Fri, 6 Nov 2020 16:17:32 +0000
Subject: [PATCH] aarch64: Do not alter force_reg returned register expanding
 fcmla

2020-11-06  Andrea Corallo  <andrea.cora...@arm.com>

        * config/aarch64/aarch64-builtins.c
        (aarch64_expand_fcmla_builtin): Do not alter force_reg returned
        register.
---
 gcc/config/aarch64/aarch64-builtins.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/gcc/config/aarch64/aarch64-builtins.c 
b/gcc/config/aarch64/aarch64-builtins.c
index 9d5e8c75c55..3a63107d6ff 100644
--- a/gcc/config/aarch64/aarch64-builtins.c
+++ b/gcc/config/aarch64/aarch64-builtins.c
@@ -1856,10 +1856,10 @@ aarch64_expand_fcmla_builtin (tree exp, rtx target, int 
fcode)
      only need to know the order in a V2mode.  */
   lane_idx = aarch64_endian_lane_rtx (V2DImode, lane);
 
-  if (!target)
+  if (!target
+      || !REG_P (target)
+      || GET_MODE (target) != d->mode)
     target = gen_reg_rtx (d->mode);
-  else
-    target = force_reg (d->mode, target);
 
   rtx pat = NULL_RTX;
 
-- 
2.20.1

Reply via email to