This patch is to adjust define_insn altivec_v{add,sub}uqm
with standard names, as the associated test case shows, w/o
this patch, it ends up with scalar {add,subf}c/{add,subf}e,
the standard names help to exploit v{add,sub}uqm.
gcc/ChangeLog:
* config/rs6000/altivec.md (altivec_vadduqm): Rename to ...
(addv1ti3): ... this.
(altivec_vsubuqm): Rename to ...
(subv1ti3): ... this.
* config/rs6000/rs6000-builtins.def (__builtin_altivec_vadduqm):
Replace bif expander altivec_vadduqm with addv1ti3.
(__builtin_altivec_vsubuqm): Replace bif expander altivec_vsubuqm with
subv1ti3.
gcc/testsuite/ChangeLog:
* gcc.target/powerpc/p8vector-int128-3.c: New test.
;; ISA 2.07 128-bit binary support to target the VMX/altivec registers without
;; having to worry about the register allocator deciding GPRs are better.
-(define_insn "altivec_vadduqm"
+(define_insn "addv1ti3"
[(set (match_operand:V1TI 0 "register_operand" "=v")
(plus:V1TI (match_operand:V1TI 1 "register_operand" "v")
(match_operand:V1TI 2 "register_operand" "v")))]
"vaddcuq %0,%1,%2"
[(set_attr "type" "vecsimple")])
-(define_insn "altivec_vsubuqm"
+(define_insn "subv1ti3"
[(set (match_operand:V1TI 0 "register_operand" "=v")
(minus:V1TI (match_operand:V1TI 1 "register_operand" "v")
(match_operand:V1TI 2 "register_operand" "v")))]
VADDUDM addv2di3 {}
const vsq __builtin_altivec_vadduqm (vsq, vsq);
- VADDUQM altivec_vadduqm {}
+ VADDUQM addv1ti3 {}
const vsll __builtin_altivec_vbpermq (vsc, vsc);
VBPERMQ altivec_vbpermq {}
VSUBUDM subv2di3 {}
const vsq __builtin_altivec_vsubuqm (vsq, vsq);
- VSUBUQM altivec_vsubuqm {}
+ VSUBUQM subv1ti3 {}
const vsll __builtin_altivec_vupkhsw (vsi);
VUPKHSW altivec_vupkhsw {}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-mdejagnu-cpu=power8 -mvsx -O2" } */
+/* { dg-require-effective-target powerpc_vsx } */
+/* { dg-require-effective-target int128 } */
+
+#ifndef TYPE
+#define TYPE vector __int128_t
+#endif
+
+TYPE
+do_adduqm (TYPE p, TYPE q)
+{
+ return p + q;
+}
+
+TYPE
+do_subuqm (TYPE p, TYPE q)
+{
+ return p - q;
+}
+
+/* { dg-final { scan-assembler-times "vadduqm" 1 } } */
+/* { dg-final { scan-assembler-times "vsubuqm" 1 } } */