]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000: Delete VS_scalar
authorSegher Boessenkool <segher@kernel.crashing.org>
Thu, 9 Jun 2022 19:45:03 +0000 (19:45 +0000)
committerSegher Boessenkool <segher@kernel.crashing.org>
Tue, 14 Jun 2022 17:31:15 +0000 (17:31 +0000)
It is just the same as VEC_base, which is a more generic name.

2022-06-14  Segher Boessenkool  <segher@kernel.crashing.org>

* config/rs6000/vsx.md (VS_scalar): Delete.
(rest of file): Adjust.

gcc/config/rs6000/vsx.md

index 1b75538f42f96c5bfd880b46a9ce19b86b49e3f2..e226a93bbe551564d6872551b1b5cb4c6c7bc017 100644 (file)
                                 (V4SF "vecfdiv")
                                 (DF   "ddiv")])
 
-;; Map the scalar mode for a vector type
-(define_mode_attr VS_scalar [(V1TI     "TI")
-                            (V2DF      "DF")
-                            (V2DI      "DI")
-                            (V4SF      "SF")
-                            (V4SI      "SI")
-                            (V8HI      "HI")
-                            (V16QI     "QI")])
-
 ;; Map to a double-sized vector mode
 (define_mode_attr VS_double [(V4SI     "V8SI")
                             (V4SF      "V8SF")
 (define_insn "vsx_concat_<mode>"
   [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa,we")
        (vec_concat:VSX_D
-        (match_operand:<VS_scalar> 1 "gpc_reg_operand" "wa,b")
-        (match_operand:<VS_scalar> 2 "gpc_reg_operand" "wa,b")))]
+        (match_operand:<VEC_base> 1 "gpc_reg_operand" "wa,b")
+        (match_operand:<VEC_base> 2 "gpc_reg_operand" "wa,b")))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
 {
   if (which_alternative == 0)
 (define_insn "*vsx_concat_<mode>_1"
   [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
        (vec_concat:VSX_D
-        (vec_select:<VS_scalar>
+        (vec_select:<VEC_base>
          (match_operand:VSX_D 1 "gpc_reg_operand" "wa")
          (parallel [(match_operand:QI 2 "const_0_to_1_operand" "n")]))
-        (match_operand:<VS_scalar> 3 "gpc_reg_operand" "wa")))]
+        (match_operand:<VEC_base> 3 "gpc_reg_operand" "wa")))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
 {
   HOST_WIDE_INT dword = INTVAL (operands[2]);
 (define_insn "*vsx_concat_<mode>_2"
   [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
        (vec_concat:VSX_D
-        (match_operand:<VS_scalar> 1 "gpc_reg_operand" "wa")
-        (vec_select:<VS_scalar>
+        (match_operand:<VEC_base> 1 "gpc_reg_operand" "wa")
+        (vec_select:<VEC_base>
          (match_operand:VSX_D 2 "gpc_reg_operand" "wa")
          (parallel [(match_operand:QI 3 "const_0_to_1_operand" "n")]))))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
 (define_insn "*vsx_concat_<mode>_3"
   [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
        (vec_concat:VSX_D
-        (vec_select:<VS_scalar>
+        (vec_select:<VEC_base>
          (match_operand:VSX_D 1 "gpc_reg_operand" "wa")
          (parallel [(match_operand:QI 2 "const_0_to_1_operand" "n")]))
-        (vec_select:<VS_scalar>
+        (vec_select:<VEC_base>
          (match_operand:VSX_D 3 "gpc_reg_operand" "wa")
          (parallel [(match_operand:QI 4 "const_0_to_1_operand" "n")]))))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
 (define_expand "vsx_set_<mode>"
   [(use (match_operand:VSX_D 0 "vsx_register_operand"))
    (use (match_operand:VSX_D 1 "vsx_register_operand"))
-   (use (match_operand:<VS_scalar> 2 "gpc_reg_operand"))
+   (use (match_operand:<VEC_base> 2 "gpc_reg_operand"))
    (use (match_operand:QI 3 "const_0_to_1_operand"))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
 {
   rtx vec_reg = operands[1];
   rtx value = operands[2];
   rtx ele = operands[3];
-  rtx tmp = gen_reg_rtx (<VS_scalar>mode);
+  rtx tmp = gen_reg_rtx (<VEC_base>mode);
 
   if (ele == const0_rtx)
     {
 ;; Or see if we can avoid doing the move at all
 
 (define_insn "vsx_extract_<mode>"
-  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=wa, wa, wr, wr")
-       (vec_select:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "gpc_reg_operand" "=wa, wa, wr, wr")
+       (vec_select:<VEC_base>
         (match_operand:VSX_D 1 "gpc_reg_operand"       "wa, wa, wa, wa")
         (parallel
          [(match_operand:QI 2 "const_0_to_1_operand"   "wD, n,  wD, n")])))]
 
 ;; Optimize extracting a single scalar element from memory.
 (define_insn_and_split "*vsx_extract_<P:mode>_<VSX_D:mode>_load"
-  [(set (match_operand:<VS_scalar> 0 "register_operand" "=wa,wr")
-       (vec_select:<VSX_D:VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "register_operand" "=wa,wr")
+       (vec_select:<VSX_D:VEC_base>
         (match_operand:VSX_D 1 "memory_operand" "m,m")
         (parallel [(match_operand:QI 2 "const_0_to_1_operand" "n,n")])))
    (clobber (match_scratch:P 3 "=&b,&b"))]
   [(set (match_dup 0) (match_dup 4))]
 {
   operands[4] = rs6000_adjust_vec_address (operands[0], operands[1], operands[2],
-                                          operands[3], <VSX_D:VS_scalar>mode);
+                                          operands[3], <VSX_D:VEC_base>mode);
 }
   [(set_attr "type" "fpload,load")
    (set_attr "length" "8")])
 ;; Optimize storing a single scalar element that is the right location to
 ;; memory
 (define_insn "*vsx_extract_<mode>_store"
-  [(set (match_operand:<VS_scalar> 0 "memory_operand" "=m,Z,wY")
-       (vec_select:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "memory_operand" "=m,Z,wY")
+       (vec_select:<VEC_base>
         (match_operand:VSX_D 1 "register_operand" "d,v,v")
         (parallel [(match_operand:QI 2 "vsx_scalar_64bit" "wD,wD,wD")])))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
 
 ;; Variable V2DI/V2DF extract shift
 (define_insn "vsx_vslo_<mode>"
-  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=v")
-       (unspec:<VS_scalar> [(match_operand:VSX_D 1 "gpc_reg_operand" "v")
+  [(set (match_operand:<VEC_base> 0 "gpc_reg_operand" "=v")
+       (unspec:<VEC_base> [(match_operand:VSX_D 1 "gpc_reg_operand" "v")
                             (match_operand:V2DI 2 "gpc_reg_operand" "v")]
                            UNSPEC_VSX_VSLO))]
   "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_DIRECT_MOVE_64BIT"
 
 ;; Variable V2DI/V2DF extract from a register
 (define_insn_and_split "vsx_extract_<mode>_var"
-  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=v")
-       (unspec:<VS_scalar> [(match_operand:VSX_D 1 "gpc_reg_operand" "v")
+  [(set (match_operand:<VEC_base> 0 "gpc_reg_operand" "=v")
+       (unspec:<VEC_base> [(match_operand:VSX_D 1 "gpc_reg_operand" "v")
                             (match_operand:DI 2 "gpc_reg_operand" "r")]
                            UNSPEC_VSX_EXTRACT))
    (clobber (match_scratch:DI 3 "=r"))
 
 ;; Variable V2DI/V2DF extract from memory
 (define_insn_and_split "*vsx_extract_<mode>_var_load"
-  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=wa,r")
-       (unspec:<VS_scalar> [(match_operand:VSX_D 1 "memory_operand" "Q,Q")
+  [(set (match_operand:<VEC_base> 0 "gpc_reg_operand" "=wa,r")
+       (unspec:<VEC_base> [(match_operand:VSX_D 1 "memory_operand" "Q,Q")
                             (match_operand:DI 2 "gpc_reg_operand" "r,r")]
                            UNSPEC_VSX_EXTRACT))
    (clobber (match_scratch:DI 3 "=&b,&b"))]
   [(set (match_dup 0) (match_dup 4))]
 {
   operands[4] = rs6000_adjust_vec_address (operands[0], operands[1], operands[2],
-                                          operands[3], <VS_scalar>mode);
+                                          operands[3], <VEC_base>mode);
 }
   [(set_attr "type" "fpload,load")])
 
 ;; none of the small types were allowed in a vector register, so we had to
 ;; extract to a DImode and either do a direct move or store.
 (define_expand  "vsx_extract_<mode>"
-  [(parallel [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand")
-                  (vec_select:<VS_scalar>
+  [(parallel [(set (match_operand:<VEC_base> 0 "gpc_reg_operand")
+                  (vec_select:<VEC_base>
                    (match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand")
                    (parallel [(match_operand:QI 2 "const_int_operand")])))
              (clobber (match_scratch:VSX_EXTRACT_I 3))])]
 })
 
 (define_insn "vsx_extract_<mode>_p9"
-  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=r,<VSX_EX>")
-       (vec_select:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "gpc_reg_operand" "=r,<VSX_EX>")
+       (vec_select:<VEC_base>
         (match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "v,<VSX_EX>")
         (parallel [(match_operand:QI 2 "<VSX_EXTRACT_PREDICATE>" "n,n")])))
    (clobber (match_scratch:SI 3 "=r,X"))]
    (set_attr "isa" "p9v,*")])
 
 (define_split
-  [(set (match_operand:<VS_scalar> 0 "int_reg_operand")
-       (vec_select:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "int_reg_operand")
+       (vec_select:<VEC_base>
         (match_operand:VSX_EXTRACT_I 1 "altivec_register_operand")
         (parallel [(match_operand:QI 2 "const_int_operand")])))
    (clobber (match_operand:SI 3 "int_reg_operand"))]
 (define_insn_and_split "*vsx_extract_<mode>_di_p9"
   [(set (match_operand:DI 0 "gpc_reg_operand" "=r,<VSX_EX>")
        (zero_extend:DI
-        (vec_select:<VS_scalar>
+        (vec_select:<VEC_base>
          (match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "v,<VSX_EX>")
          (parallel [(match_operand:QI 2 "const_int_operand" "n,n")]))))
    (clobber (match_scratch:SI 3 "=r,X"))]
   "#"
   "&& reload_completed"
   [(parallel [(set (match_dup 4)
-                  (vec_select:<VS_scalar>
+                  (vec_select:<VEC_base>
                    (match_dup 1)
                    (parallel [(match_dup 2)])))
              (clobber (match_dup 3))])]
 {
-  operands[4] = gen_rtx_REG (<VS_scalar>mode, REGNO (operands[0]));
+  operands[4] = gen_rtx_REG (<VEC_base>mode, REGNO (operands[0]));
 }
   [(set_attr "isa" "p9v,*")])
 
 ;; Optimize stores to use the ISA 3.0 scalar store instructions
 (define_insn_and_split "*vsx_extract_<mode>_store_p9"
-  [(set (match_operand:<VS_scalar> 0 "memory_operand" "=Z,m")
-       (vec_select:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "memory_operand" "=Z,m")
+       (vec_select:<VEC_base>
         (match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "<VSX_EX>,v")
         (parallel [(match_operand:QI 2 "const_int_operand" "n,n")])))
-   (clobber (match_scratch:<VS_scalar> 3 "=<VSX_EX>,&*r"))
+   (clobber (match_scratch:<VEC_base> 3 "=<VSX_EX>,&*r"))
    (clobber (match_scratch:SI 4 "=X,&r"))]
   "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_VEXTRACTUB"
   "#"
   "&& reload_completed"
   [(parallel [(set (match_dup 3)
-                  (vec_select:<VS_scalar>
+                  (vec_select:<VEC_base>
                    (match_dup 1)
                    (parallel [(match_dup 2)])))
              (clobber (match_dup 4))])
    (set_attr "isa" "*,p8v,*")])
 
 (define_insn_and_split  "*vsx_extract_<mode>_p8"
-  [(set (match_operand:<VS_scalar> 0 "nonimmediate_operand" "=r")
-       (vec_select:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "nonimmediate_operand" "=r")
+       (vec_select:<VEC_base>
         (match_operand:VSX_EXTRACT_I2 1 "gpc_reg_operand" "v")
         (parallel [(match_operand:QI 2 "<VSX_EXTRACT_PREDICATE>" "n")])))
    (clobber (match_scratch:VSX_EXTRACT_I2 3 "=v"))]
 
 ;; Optimize extracting a single scalar element from memory.
 (define_insn_and_split "*vsx_extract_<mode>_load"
-  [(set (match_operand:<VS_scalar> 0 "register_operand" "=r")
-       (vec_select:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "register_operand" "=r")
+       (vec_select:<VEC_base>
         (match_operand:VSX_EXTRACT_I 1 "memory_operand" "m")
         (parallel [(match_operand:QI 2 "<VSX_EXTRACT_PREDICATE>" "n")])))
    (clobber (match_scratch:DI 3 "=&b"))]
   [(set (match_dup 0) (match_dup 4))]
 {
   operands[4] = rs6000_adjust_vec_address (operands[0], operands[1], operands[2],
-                                          operands[3], <VS_scalar>mode);
+                                          operands[3], <VEC_base>mode);
 }
   [(set_attr "type" "load")
    (set_attr "length" "8")])
 
 ;; Variable V16QI/V8HI/V4SI extract from a register
 (define_insn_and_split "vsx_extract_<mode>_var"
-  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=r,r")
-       (unspec:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "gpc_reg_operand" "=r,r")
+       (unspec:<VEC_base>
         [(match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "v,v")
          (match_operand:DI 2 "gpc_reg_operand" "r,r")]
         UNSPEC_VSX_EXTRACT))
 
 ;; Variable V16QI/V8HI/V4SI extract from memory
 (define_insn_and_split "*vsx_extract_<mode>_var_load"
-  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=r")
-       (unspec:<VS_scalar>
+  [(set (match_operand:<VEC_base> 0 "gpc_reg_operand" "=r")
+       (unspec:<VEC_base>
         [(match_operand:VSX_EXTRACT_I 1 "memory_operand" "Q")
          (match_operand:DI 2 "gpc_reg_operand" "r")]
         UNSPEC_VSX_EXTRACT))
   [(set (match_dup 0) (match_dup 4))]
 {
   operands[4] = rs6000_adjust_vec_address (operands[0], operands[1], operands[2],
-                                          operands[3], <VS_scalar>mode);
+                                          operands[3], <VEC_base>mode);
 }
   [(set_attr "type" "load")])
 
 (define_expand "vreplace_elt_<mode>"
   [(set (match_operand:REPLACE_ELT 0 "register_operand")
   (unspec:REPLACE_ELT [(match_operand:REPLACE_ELT 1 "register_operand")
-                      (match_operand:<VS_scalar> 2 "register_operand")
+                      (match_operand:<VEC_base> 2 "register_operand")
                       (match_operand:QI 3 "const_0_to_3_operand")]
                      UNSPEC_REPLACE_ELT))]
  "TARGET_POWER10"
 (define_insn "vreplace_elt_<mode>_inst"
  [(set (match_operand:REPLACE_ELT 0 "register_operand" "=v")
   (unspec:REPLACE_ELT [(match_operand:REPLACE_ELT 1 "register_operand" "0")
-                      (match_operand:<VS_scalar> 2 "register_operand" "r")
+                      (match_operand:<VEC_base> 2 "register_operand" "r")
                       (match_operand:QI 3 "const_0_to_12_operand" "n")]
                      UNSPEC_REPLACE_ELT))]
  "TARGET_POWER10"
 (define_insn "vreplace_un_<mode>"
  [(set (match_operand:V16QI 0 "register_operand" "=v")
   (unspec:V16QI [(match_operand:REPLACE_ELT 1 "register_operand" "0")
-                 (match_operand:<VS_scalar> 2 "register_operand" "r")
+                 (match_operand:<VEC_base> 2 "register_operand" "r")
                 (match_operand:QI 3 "const_0_to_12_operand" "n")]
                UNSPEC_REPLACE_UN))]
  "TARGET_POWER10"
 ;; Where <ftype> is SFmode, DFmode (and KFmode/TFmode if those types are IEEE
 ;; 128-bit hardware types) and <vtype> is vector char, vector unsigned char,
 ;; vector short or vector unsigned short.
-(define_insn_and_split "*vsx_ext_<VSX_EXTRACT_I:VS_scalar>_fl_<FL_CONV:mode>"
+(define_insn_and_split "*vsx_ext_<VSX_EXTRACT_I:VEC_base>_fl_<FL_CONV:mode>"
   [(set (match_operand:FL_CONV 0 "gpc_reg_operand" "=wa")
        (float:FL_CONV
-        (vec_select:<VSX_EXTRACT_I:VS_scalar>
+        (vec_select:<VSX_EXTRACT_I:VEC_base>
          (match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "v")
          (parallel [(match_operand:QI 2 "const_int_operand" "n")]))))
-   (clobber (match_scratch:<VSX_EXTRACT_I:VS_scalar> 3 "=v"))]
+   (clobber (match_scratch:<VSX_EXTRACT_I:VEC_base> 3 "=v"))]
   "VECTOR_MEM_VSX_P (<VSX_EXTRACT_I:MODE>mode) && TARGET_DIRECT_MOVE_64BIT
    && TARGET_P9_VECTOR"
   "#"
   "&& reload_completed"
   [(parallel [(set (match_dup 3)
-                  (vec_select:<VSX_EXTRACT_I:VS_scalar>
+                  (vec_select:<VSX_EXTRACT_I:VEC_base>
                    (match_dup 1)
                    (parallel [(match_dup 2)])))
              (clobber (scratch:SI))])
 }
   [(set_attr "isa" "<FL_CONV:VSisa>")])
 
-(define_insn_and_split "*vsx_ext_<VSX_EXTRACT_I:VS_scalar>_ufl_<FL_CONV:mode>"
+(define_insn_and_split "*vsx_ext_<VSX_EXTRACT_I:VEC_base>_ufl_<FL_CONV:mode>"
   [(set (match_operand:FL_CONV 0 "gpc_reg_operand" "=wa")
        (unsigned_float:FL_CONV
-        (vec_select:<VSX_EXTRACT_I:VS_scalar>
+        (vec_select:<VSX_EXTRACT_I:VEC_base>
          (match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "v")
          (parallel [(match_operand:QI 2 "const_int_operand" "n")]))))
-   (clobber (match_scratch:<VSX_EXTRACT_I:VS_scalar> 3 "=v"))]
+   (clobber (match_scratch:<VSX_EXTRACT_I:VEC_base> 3 "=v"))]
   "VECTOR_MEM_VSX_P (<VSX_EXTRACT_I:MODE>mode) && TARGET_DIRECT_MOVE_64BIT
    && TARGET_P9_VECTOR"
   "#"
   "&& reload_completed"
   [(parallel [(set (match_dup 3)
-                  (vec_select:<VSX_EXTRACT_I:VS_scalar>
+                  (vec_select:<VSX_EXTRACT_I:VEC_base>
                    (match_dup 1)
                    (parallel [(match_dup 2)])))
              (clobber (scratch:SI))])
   [(set (match_operand:VSX_EXTRACT_I 0 "gpc_reg_operand" "=<VSX_EX>")
        (unspec:VSX_EXTRACT_I
         [(match_operand:VSX_EXTRACT_I 1 "gpc_reg_operand" "0")
-         (match_operand:<VS_scalar> 2 "gpc_reg_operand" "<VSX_EX>")
+         (match_operand:<VEC_base> 2 "gpc_reg_operand" "<VSX_EX>")
          (match_operand:QI 3 "<VSX_EXTRACT_PREDICATE>" "n")]
         UNSPEC_VSX_SET))]
   "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_P9_VECTOR && TARGET_POWERPC64"
   if (!BYTES_BIG_ENDIAN)
     ele = nunits - 1 - ele;
 
-  operands[3] = GEN_INT (GET_MODE_SIZE (<VS_scalar>mode) * ele);
+  operands[3] = GEN_INT (GET_MODE_SIZE (<VEC_base>mode) * ele);
   if (<MODE>mode == V4SImode)
     return "xxinsertw %x0,%x2,%3";
   else
 (define_expand "vsx_splat_<mode>"
   [(set (match_operand:VSX_D 0 "vsx_register_operand")
        (vec_duplicate:VSX_D
-        (match_operand:<VS_scalar> 1 "input_operand")))]
+        (match_operand:<VEC_base> 1 "input_operand")))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
 {
   rtx op1 = operands[1];
   if (MEM_P (op1))
     operands[1] = rs6000_force_indexed_or_indirect_mem (op1);
   else if (!REG_P (op1))
-    op1 = force_reg (<VSX_D:VS_scalar>mode, op1);
+    op1 = force_reg (<VSX_D:VEC_base>mode, op1);
 })
 
 (define_insn "vsx_splat_<mode>_reg"
   [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa,we")
        (vec_duplicate:VSX_D
-        (match_operand:<VS_scalar> 1 "gpc_reg_operand" "wa,b")))]
+        (match_operand:<VEC_base> 1 "gpc_reg_operand" "wa,b")))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
   "@
    xxpermdi %x0,%x1,%x1,0
 (define_insn "vsx_splat_<mode>_mem"
   [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
        (vec_duplicate:VSX_D
-        (match_operand:<VSX_D:VS_scalar> 1 "memory_operand" "Z")))]
+        (match_operand:<VSX_D:VEC_base> 1 "memory_operand" "Z")))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
   "lxvdsx %x0,%y1"
   [(set_attr "type" "vecload")])
 (define_insn "vsx_xxspltw_<mode>"
   [(set (match_operand:VSX_W 0 "vsx_register_operand" "=wa")
        (vec_duplicate:VSX_W
-        (vec_select:<VS_scalar>
+        (vec_select:<VEC_base>
          (match_operand:VSX_W 1 "vsx_register_operand" "wa")
          (parallel
           [(match_operand:QI 2 "u5bit_cint_operand" "n")]))))]
 (define_insn "vsx_vsplt<VSX_SPLAT_SUFFIX>_di"
   [(set (match_operand:VSX_SPLAT_I 0 "altivec_register_operand" "=v")
        (vec_duplicate:VSX_SPLAT_I
-        (truncate:<VS_scalar>
+        (truncate:<VEC_base>
          (match_operand:DI 1 "altivec_register_operand" "v"))))]
   "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_DIRECT_MOVE_64BIT"
   "vsplt<VSX_SPLAT_SUFFIX> %0,%1,<VSX_SPLAT_COUNT>"