[gcc(refs/users/meissner/heads/work041)] Fix segfault with VEC_DUPLICATE of const_double.

Michael Meissner meissner@gcc.gnu.org
Wed Mar 17 21:55:54 GMT 2021


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

commit cbdda0c7f8f197a3516a6a27897407f4d3022785
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Wed Mar 17 17:55:38 2021 -0400

    Fix segfault with VEC_DUPLICATE of const_double.
    
    gcc/
    2021-03-17  Michael Meissner  <meissner@linux.ibm.com>
    
            * config/rs6000/rs6000.c (rs6000_expand_vector_init): Don't form
            vector constants with VEC_DUPLICATE.

Diff:
---
 gcc/config/rs6000/rs6000.c | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8ac4bc8cbdc..e00454fae44 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -6651,17 +6651,6 @@ rs6000_expand_vector_init (rtx target, rtx vals)
 
   if (n_var == 0)
     {
-      /* Generate XXSPLTIW/XXSPLTIDP if we can.  */
-      if (TARGET_POWER10 && all_same
-	  && (mode == V4SImode || mode == V4SFmode
-	      || (mode == V2DFmode
-		  && xxspltidp_operand (XVECEXP (vals, 0, 0), inner_mode))))
-	{
-	  rtx dup = gen_rtx_VEC_DUPLICATE (mode, XVECEXP (vals, 0, 0));
-	  emit_insn (gen_rtx_SET (target, dup));							 
-	  return;
-	}
-
       rtx const_vec = gen_rtx_CONST_VECTOR (mode, XVEC (vals, 0));
       bool int_vector_p = (GET_MODE_CLASS (mode) == MODE_VECTOR_INT);
       if ((int_vector_p || TARGET_VSX) && all_const_zero)


More information about the Gcc-cvs mailing list