function_expander::get_reg_target didn't actually check for a register,
meaning that it could return a memory target instead.  That doesn't
really matter for the current direct and indirect uses (svundef*,
svcreate*, and svset*) but it will for later patches.

Tested on aarch64-linux-gnu.  OK to install?

Richard


gcc/
        * config/aarch64/aarch64-sve-builtins.cc
        (function_expander::get_reg_target): Check whether the target
        is a valid register_operand.
---
 gcc/config/aarch64/aarch64-sve-builtins.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc 
b/gcc/config/aarch64/aarch64-sve-builtins.cc
index 2b627a95060..01833a8de73 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
@@ -4004,7 +4004,8 @@ rtx
 function_expander::get_reg_target ()
 {
   machine_mode target_mode = result_mode ();
-  if (!possible_target || GET_MODE (possible_target) != target_mode)
+  if (!possible_target
+      || !register_operand (possible_target, target_mode))
     possible_target = gen_reg_rtx (target_mode);
   return possible_target;
 }
-- 
2.43.0

Reply via email to