[gcc(refs/users/marxin/heads/marxin-gcc-benchmark-branch)] Fix PR 93569.

Martin Liska marxin@gcc.gnu.org
Mon Mar 30 10:51:23 GMT 2020


https://gcc.gnu.org/g:a66219dce7fcba068a0998dd926e2ffc6857f149

commit a66219dce7fcba068a0998dd926e2ffc6857f149
Author: Michael Meissner <meissner@gcc.gnu.org>
Date:   Thu Feb 6 18:39:48 2020 -0500

    Fix PR 93569.
    
    2020-02-06  Michael Meissner  <meissner@linux.ibm.com>
    
            PR target/93569
            * config/rs6000/rs6000.c (reg_to_non_prefixed): Before ISA 3.0
            we only had X-FORM (reg+reg) addressing for vectors.  Also before
            ISA 3.0, we only had X-FORM addressing for scalars in the
            traditional Altivec registers.

Diff:
---
 gcc/ChangeLog              |  8 ++++++++
 gcc/config/rs6000/rs6000.c | 11 ++++++++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aec58a06529..9797dd4e81f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2020-02-06  Michael Meissner  <meissner@linux.ibm.com>
+
+	PR target/93569
+	* config/rs6000/rs6000.c (reg_to_non_prefixed): Before ISA 3.0
+	we only had X-FORM (reg+reg) addressing for vectors.  Also before
+	ISA 3.0, we only had X-FORM addressing for scalars in the
+	traditional Altivec registers.
+
 2020-02-06  <zhongyunde@huawei.com>
   	    Vladimir Makarov  <vmakarov@redhat.com>
 
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index f2516a83842..fc68976bb10 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -24932,7 +24932,8 @@ reg_to_non_prefixed (rtx reg, machine_mode mode)
   unsigned size = GET_MODE_SIZE (mode);
 
   /* FPR registers use D-mode for scalars, and DQ-mode for vectors, IEEE
-     128-bit floating point, and 128-bit integers.  */
+     128-bit floating point, and 128-bit integers.  Before power9, only indexed
+     addressing was available for vectors.  */
   if (FP_REGNO_P (r))
     {
       if (mode == SFmode || size == 8 || FLOAT128_2REG_P (mode))
@@ -24945,16 +24946,20 @@ reg_to_non_prefixed (rtx reg, machine_mode mode)
 	       && (VECTOR_MODE_P (mode)
 		   || FLOAT128_VECTOR_P (mode)
 		   || mode == TImode || mode == CTImode))
-	return NON_PREFIXED_DQ;
+	return (TARGET_P9_VECTOR) ? NON_PREFIXED_DQ : NON_PREFIXED_X;
 
       else
 	return NON_PREFIXED_DEFAULT;
     }
 
   /* Altivec registers use DS-mode for scalars, and DQ-mode for vectors, IEEE
-     128-bit floating point, and 128-bit integers.  */
+     128-bit floating point, and 128-bit integers.  Before power9, only indexed
+     addressing was available.  */
   else if (ALTIVEC_REGNO_P (r))
     {
+      if (!TARGET_P9_VECTOR)
+	return NON_PREFIXED_X;
+
       if (mode == SFmode || size == 8 || FLOAT128_2REG_P (mode))
 	return NON_PREFIXED_DS;


More information about the Gcc-cvs mailing list