From: Segher Boessenkool Date: Tue, 4 Jun 2019 23:27:57 +0000 (+0200) Subject: rs6000: Simplify VS[ra]* for VSX_[BDF] X-Git-Tag: upstream/12.2.0~24173 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=012f609e02aa915808883cda0159cb59751b37f4;p=platform%2Fupstream%2Fgcc.git rs6000: Simplify VS[ra]* for VSX_[BDF] When used in VSX_B, VSX_D, or VSX_F, both and are always just "wa" now. Similarly and . The former of those is always "wa", so we can remove the mode attribute completely. * config/rs6000/vsx.md (define_mode_attr VSr2): Delete. (rest of file): Replace all , , , and that are used with VSX_B, VSX_D, or VSX_F, with just "wa". From-SVN: r271929 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b3fe98..8353f04 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-06-04 Segher Boessenkool + + * config/rs6000/vsx.md (define_mode_attr VSr2): Delete. + (rest of file): Replace all , , , and that are + used with VSX_B, VSX_D, or VSX_F, with just "wa". + 2019-06-04 Bill Schmidt PR target/78263 diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index 4450537..11e50bf 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -123,16 +123,7 @@ (TI "wa")]) ;; Map the register class used for float<->int conversions (floating point side) -;; VSr2 is the preferred register class, VSr3 is any register class that will -;; hold the data -(define_mode_attr VSr2 [(V2DF "wa") - (V4SF "wa") - (DF "wa") - (SF "ww") - (DI "wa") - (KF "wq") - (TF "wp")]) - +;; VSr3 is any register class that will hold the data (define_mode_attr VSr3 [(V2DF "wa") (V4SF "wa") (DF "wa") @@ -429,7 +420,7 @@ ;; The patterns for LE permuted loads and stores come before the general ;; VSX moves so they match first. (define_insn_and_split "*vsx_le_perm_load_" - [(set (match_operand:VSX_D 0 "vsx_register_operand" "=") + [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa") (match_operand:VSX_D 1 "indexed_or_indirect_operand" "Z"))] "!BYTES_BIG_ENDIAN && TARGET_VSX && !TARGET_P9_VECTOR" "#" @@ -644,7 +635,7 @@ (define_insn "*vsx_le_perm_store_" [(set (match_operand:VSX_D 0 "indexed_or_indirect_operand" "=Z") - (match_operand:VSX_D 1 "vsx_register_operand" "+"))] + (match_operand:VSX_D 1 "vsx_register_operand" "+wa"))] "!BYTES_BIG_ENDIAN && TARGET_VSX && !TARGET_P9_VECTOR" "#" [(set_attr "type" "vecstore") @@ -1599,25 +1590,25 @@ ;; instructions are now combined with the insn for the traditional floating ;; point unit. (define_insn "*vsx_add3" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (plus:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (plus:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvadd %x0,%x1,%x2" [(set_attr "type" "")]) (define_insn "*vsx_sub3" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (minus:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa>") + (minus:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvsub %x0,%x1,%x2" [(set_attr "type" "")]) (define_insn "*vsx_mul3" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (mult:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (mult:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvmul %x0,%x1,%x2" [(set_attr "type" "")]) @@ -1663,9 +1654,9 @@ [(set_attr "type" "mul")]) (define_insn "*vsx_div3" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (div:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (div:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvdiv %x0,%x1,%x2" [(set_attr "type" "")]) @@ -1794,71 +1785,71 @@ }) (define_insn "*vsx_tdiv3_internal" - [(set (match_operand:CCFP 0 "cc_reg_operand" "=x,x") - (unspec:CCFP [(match_operand:VSX_B 1 "vsx_register_operand" ",") - (match_operand:VSX_B 2 "vsx_register_operand" ",")] + [(set (match_operand:CCFP 0 "cc_reg_operand" "=x") + (unspec:CCFP [(match_operand:VSX_B 1 "vsx_register_operand" "wa") + (match_operand:VSX_B 2 "vsx_register_operand" "wa")] UNSPEC_VSX_TDIV))] "VECTOR_UNIT_VSX_P (mode)" "xtdiv %0,%x1,%x2" [(set_attr "type" "")]) (define_insn "vsx_fre2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" ",")] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "wa")] UNSPEC_FRES))] "VECTOR_UNIT_VSX_P (mode)" "xvre %x0,%x1" [(set_attr "type" "")]) (define_insn "*vsx_neg2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (neg:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (neg:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvneg %x0,%x1" [(set_attr "type" "")]) (define_insn "*vsx_abs2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (abs:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (abs:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvabs %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_nabs2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") (neg:VSX_F (abs:VSX_F - (match_operand:VSX_F 1 "vsx_register_operand" ","))))] + (match_operand:VSX_F 1 "vsx_register_operand" "wa"))))] "VECTOR_UNIT_VSX_P (mode)" "xvnabs %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_smax3" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (smax:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (smax:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvmax %x0,%x1,%x2" [(set_attr "type" "")]) (define_insn "*vsx_smin3" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (smin:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (smin:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvmin %x0,%x1,%x2" [(set_attr "type" "")]) (define_insn "*vsx_sqrt2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (sqrt:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (sqrt:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvsqrt %x0,%x1" [(set_attr "type" "")]) (define_insn "*vsx_rsqrte2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" ",")] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "wa")] UNSPEC_RSQRT))] "VECTOR_UNIT_VSX_P (mode)" "xvrsqrte %x0,%x1" @@ -1891,8 +1882,8 @@ }) (define_insn "*vsx_tsqrt2_internal" - [(set (match_operand:CCFP 0 "cc_reg_operand" "=x,x") - (unspec:CCFP [(match_operand:VSX_B 1 "vsx_register_operand" ",")] + [(set (match_operand:CCFP 0 "cc_reg_operand" "=x") + (unspec:CCFP [(match_operand:VSX_B 1 "vsx_register_operand" "wa")] UNSPEC_VSX_TSQRT))] "VECTOR_UNIT_VSX_P (mode)" "xtsqrt %0,%x1" @@ -1929,32 +1920,28 @@ [(set_attr "type" "vecdouble")]) (define_insn "*vsx_fms4" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,,?,?") + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa,wa") (fma:VSX_F - (match_operand:VSX_F 1 "vsx_register_operand" "%,,,") - (match_operand:VSX_F 2 "vsx_register_operand" ",0,,0") + (match_operand:VSX_F 1 "vsx_register_operand" "%wa,wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa,0") (neg:VSX_F - (match_operand:VSX_F 3 "vsx_register_operand" "0,,0,"))))] + (match_operand:VSX_F 3 "vsx_register_operand" "0,wa"))))] "VECTOR_UNIT_VSX_P (mode)" "@ xvmsuba %x0,%x1,%x2 - xvmsubm %x0,%x1,%x3 - xvmsuba %x0,%x1,%x2 xvmsubm %x0,%x1,%x3" [(set_attr "type" "")]) (define_insn "*vsx_nfma4" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,,?,?") + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa,wa") (neg:VSX_F (fma:VSX_F - (match_operand:VSX_F 1 "vsx_register_operand" ",,,") - (match_operand:VSX_F 2 "vsx_register_operand" ",0,,0") - (match_operand:VSX_F 3 "vsx_register_operand" "0,,0,"))))] + (match_operand:VSX_F 1 "vsx_register_operand" "wa,wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa,0") + (match_operand:VSX_F 3 "vsx_register_operand" "0,wa"))))] "VECTOR_UNIT_VSX_P (mode)" "@ xvnmadda %x0,%x1,%x2 - xvnmaddm %x0,%x1,%x3 - xvnmadda %x0,%x1,%x2 xvnmaddm %x0,%x1,%x3" [(set_attr "type" "")]) @@ -1989,25 +1976,25 @@ ;; Vector conditional expressions (no scalar version for these instructions) (define_insn "vsx_eq" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (eq:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (eq:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvcmpeq %x0,%x1,%x2" [(set_attr "type" "")]) (define_insn "vsx_gt" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (gt:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (gt:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvcmpgt %x0,%x1,%x2" [(set_attr "type" "")]) (define_insn "*vsx_ge" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (ge:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (ge:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvcmpge %x0,%x1,%x2" [(set_attr "type" "")]) @@ -2017,10 +2004,10 @@ (define_insn "*vsx_eq__p" [(set (reg:CC CR6_REGNO) (unspec:CC - [(eq:CC (match_operand:VSX_F 1 "vsx_register_operand" ",?") - (match_operand:VSX_F 2 "vsx_register_operand" ",?"))] + [(eq:CC (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa"))] UNSPEC_PREDICATE)) - (set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") + (set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") (eq:VSX_F (match_dup 1) (match_dup 2)))] "VECTOR_UNIT_VSX_P (mode)" @@ -2030,10 +2017,10 @@ (define_insn "*vsx_gt__p" [(set (reg:CC CR6_REGNO) (unspec:CC - [(gt:CC (match_operand:VSX_F 1 "vsx_register_operand" ",?") - (match_operand:VSX_F 2 "vsx_register_operand" ",?"))] + [(gt:CC (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa"))] UNSPEC_PREDICATE)) - (set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") + (set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") (gt:VSX_F (match_dup 1) (match_dup 2)))] "VECTOR_UNIT_VSX_P (mode)" @@ -2043,10 +2030,10 @@ (define_insn "*vsx_ge__p" [(set (reg:CC CR6_REGNO) (unspec:CC - [(ge:CC (match_operand:VSX_F 1 "vsx_register_operand" ",?") - (match_operand:VSX_F 2 "vsx_register_operand" ",?"))] + [(ge:CC (match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa"))] UNSPEC_PREDICATE)) - (set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") + (set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") (ge:VSX_F (match_dup 1) (match_dup 2)))] "VECTOR_UNIT_VSX_P (mode)" @@ -2078,10 +2065,10 @@ ;; Copy sign (define_insn "vsx_copysign3" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") (unspec:VSX_F - [(match_operand:VSX_F 1 "vsx_register_operand" ",") - (match_operand:VSX_F 2 "vsx_register_operand" ",")] + [(match_operand:VSX_F 1 "vsx_register_operand" "wa") + (match_operand:VSX_F 2 "vsx_register_operand" "wa")] UNSPEC_COPYSIGN))] "VECTOR_UNIT_VSX_P (mode)" "xvcpsgn %x0,%x2,%x1" @@ -2094,76 +2081,76 @@ ;; Don't use vsx_register_operand here, use gpc_reg_operand to match rs6000.md ;; in allowing virtual registers. (define_insn "vsx_float2" - [(set (match_operand:VSX_F 0 "gpc_reg_operand" "=,?") - (float:VSX_F (match_operand: 1 "gpc_reg_operand" ",")))] + [(set (match_operand:VSX_F 0 "gpc_reg_operand" "=wa") + (float:VSX_F (match_operand: 1 "gpc_reg_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvcvsx %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_floatuns2" - [(set (match_operand:VSX_F 0 "gpc_reg_operand" "=,?") - (unsigned_float:VSX_F (match_operand: 1 "gpc_reg_operand" ",")))] + [(set (match_operand:VSX_F 0 "gpc_reg_operand" "=wa") + (unsigned_float:VSX_F (match_operand: 1 "gpc_reg_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvcvux %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_fix_trunc2" - [(set (match_operand: 0 "gpc_reg_operand" "=,?") - (fix: (match_operand:VSX_F 1 "gpc_reg_operand" ",")))] + [(set (match_operand: 0 "gpc_reg_operand" "=wa") + (fix: (match_operand:VSX_F 1 "gpc_reg_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xcvsxs %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_fixuns_trunc2" - [(set (match_operand: 0 "gpc_reg_operand" "=,?") - (unsigned_fix: (match_operand:VSX_F 1 "gpc_reg_operand" ",")))] + [(set (match_operand: 0 "gpc_reg_operand" "=wa") + (unsigned_fix: (match_operand:VSX_F 1 "gpc_reg_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xcvuxs %x0,%x1" [(set_attr "type" "")]) ;; Math rounding functions (define_insn "vsx_xri" - [(set (match_operand:VSX_B 0 "vsx_register_operand" "=,?") - (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" ",")] + [(set (match_operand:VSX_B 0 "vsx_register_operand" "=wa") + (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" "wa")] UNSPEC_VSX_ROUND_I))] "VECTOR_UNIT_VSX_P (mode)" "xri %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_xric" - [(set (match_operand:VSX_B 0 "vsx_register_operand" "=,?") - (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" ",")] + [(set (match_operand:VSX_B 0 "vsx_register_operand" "=wa") + (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" "wa")] UNSPEC_VSX_ROUND_IC))] "VECTOR_UNIT_VSX_P (mode)" "xric %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_btrunc2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (fix:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" ",")))] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (fix:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa")))] "VECTOR_UNIT_VSX_P (mode)" "xvriz %x0,%x1" [(set_attr "type" "")]) (define_insn "*vsx_b2trunc2" - [(set (match_operand:VSX_B 0 "vsx_register_operand" "=,?") - (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" ",")] + [(set (match_operand:VSX_B 0 "vsx_register_operand" "=wa") + (unspec:VSX_B [(match_operand:VSX_B 1 "vsx_register_operand" "wa")] UNSPEC_FRIZ))] "VECTOR_UNIT_VSX_P (mode)" "xriz %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_floor2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" ",")] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "wa")] UNSPEC_FRIM))] "VECTOR_UNIT_VSX_P (mode)" "xvrim %x0,%x1" [(set_attr "type" "")]) (define_insn "vsx_ceil2" - [(set (match_operand:VSX_F 0 "vsx_register_operand" "=,?") - (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" ",")] + [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa") + (unspec:VSX_F [(match_operand:VSX_F 1 "vsx_register_operand" "wa")] UNSPEC_FRIP))] "VECTOR_UNIT_VSX_P (mode)" "xvrip %x0,%x1" @@ -2987,9 +2974,9 @@ ;; xxpermdi for little endian loads and stores. We need several of ;; these since the form of the PARALLEL differs by mode. (define_insn "*vsx_xxpermdi2_le_" - [(set (match_operand:VSX_D 0 "vsx_register_operand" "=") + [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa") (vec_select:VSX_D - (match_operand:VSX_D 1 "vsx_register_operand" "") + (match_operand:VSX_D 1 "vsx_register_operand" "wa") (parallel [(const_int 1) (const_int 0)])))] "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (mode)" "xxpermdi %x0,%x1,%x1,2" @@ -3036,7 +3023,7 @@ ;; lxvd2x for little endian loads. We need several of ;; these since the form of the PARALLEL differs by mode. (define_insn "*vsx_lxvd2x2_le_" - [(set (match_operand:VSX_D 0 "vsx_register_operand" "=") + [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa") (vec_select:VSX_D (match_operand:VSX_D 1 "memory_operand" "Z") (parallel [(const_int 1) (const_int 0)])))] @@ -3087,7 +3074,7 @@ (define_insn "*vsx_stxvd2x2_le_" [(set (match_operand:VSX_D 0 "memory_operand" "=Z") (vec_select:VSX_D - (match_operand:VSX_D 1 "vsx_register_operand" "") + (match_operand:VSX_D 1 "vsx_register_operand" "wa") (parallel [(const_int 1) (const_int 0)])))] "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (mode) && !TARGET_P9_VECTOR" "stxvd2x %x1,%y0" @@ -3184,11 +3171,11 @@ ;; register was picked. Limit the scalar value to FPRs for now. (define_insn "vsx_extract_" - [(set (match_operand: 0 "gpc_reg_operand" "=d, d, wr, wr") + [(set (match_operand: 0 "gpc_reg_operand" "=d, d, wr, wr") (vec_select: - (match_operand:VSX_D 1 "gpc_reg_operand" ", , wa, wa") + (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")])))] + [(match_operand:QI 2 "const_0_to_1_operand" "wD, n, wD, n")])))] "VECTOR_MEM_VSX_P (mode)" { int element = INTVAL (operands[2]); @@ -4103,7 +4090,7 @@ }) (define_insn "vsx_splat__reg" - [(set (match_operand:VSX_D 0 "vsx_register_operand" "=,we") + [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa,we") (vec_duplicate:VSX_D (match_operand: 1 "gpc_reg_operand" "wa,b")))] "VECTOR_MEM_VSX_P (mode)" @@ -4112,8 +4099,8 @@ mtvsrdd %x0,%1,%1" [(set_attr "type" "vecperm")]) -(define_insn "vsx_splat__mem" - [(set (match_operand:VSX_D 0 "vsx_register_operand" "=") +(define_insn "vsx_splat__mem" + [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa") (vec_duplicate:VSX_D (match_operand: 1 "memory_operand" "Z")))] "VECTOR_MEM_VSX_P (mode)"