Commit c3eaf15a by Michael Meissner Committed by Michael Meissner

altivec.md (VNEG iterator): New iterator for VNEGW/VNEGD instructions.

[gcc]
2016-05-24  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/altivec.md (VNEG iterator): New iterator for
	VNEGW/VNEGD instructions.
	(p9_neg<mode>2): New insns for ISA 3.0 VNEGW/VNEGD.
	(neg<mode>2): Add expander for V2DImode added in ISA 2.06, and
	support for ISA 3.0 VNEGW/VNEGD instructions.

[gcc/testsuite]
2016-05-24  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* gcc.target/powerpc/p9-vneg.c: New test for ISA 3.0 VNEGW/VNEGD
	instructions.

From-SVN: r236679
parent e46c7770
2016-05-24 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/altivec.md (VNEG iterator): New iterator for
VNEGW/VNEGD instructions.
(p9_neg<mode>2): New insns for ISA 3.0 VNEGW/VNEGD.
(neg<mode>2): Add expander for V2DImode added in ISA 2.06, and
support for ISA 3.0 VNEGW/VNEGD instructions.
2016-05-24 Cesar Philippidis <cesar@codesourcery.com>
* gimplify.c (omp_notice_variable): Use zero-length arrays for data
......
......@@ -214,6 +214,9 @@
(define_mode_attr VP_small_lc [(V2DI "v4si") (V4SI "v8hi") (V8HI "v16qi")])
(define_mode_attr VU_char [(V2DI "w") (V4SI "h") (V8HI "b")])
;; Vector negate
(define_mode_iterator VNEG [V4SI V2DI])
;; Vector move instructions.
(define_insn "*altivec_mov<mode>"
[(set (match_operand:VM2 0 "nonimmediate_operand" "=Z,v,v,*Y,*r,*r,v,v,*r")
......@@ -2761,20 +2764,28 @@
DONE;
})
(define_insn "*p9_neg<mode>2"
[(set (match_operand:VNEG 0 "altivec_register_operand" "=v")
(neg:VNEG (match_operand:VNEG 1 "altivec_register_operand" "v")))]
"TARGET_P9_VECTOR"
"vneg<VI_char> %0,%1"
[(set_attr "type" "vecsimple")])
(define_expand "neg<mode>2"
[(use (match_operand:VI 0 "register_operand" ""))
(use (match_operand:VI 1 "register_operand" ""))]
"TARGET_ALTIVEC"
"
[(set (match_operand:VI2 0 "register_operand" "")
(neg:VI2 (match_operand:VI2 1 "register_operand" "")))]
"<VI_unit>"
{
rtx vzero;
if (!TARGET_P9_VECTOR || (<MODE>mode != V4SImode && <MODE>mode != V2DImode))
{
rtx vzero;
vzero = gen_reg_rtx (GET_MODE (operands[0]));
emit_insn (gen_altivec_vspltis<VI_char> (vzero, const0_rtx));
emit_insn (gen_sub<mode>3 (operands[0], vzero, operands[1]));
DONE;
}")
vzero = gen_reg_rtx (GET_MODE (operands[0]));
emit_move_insn (vzero, CONST0_RTX (<MODE>mode));
emit_insn (gen_sub<mode>3 (operands[0], vzero, operands[1]));
DONE;
}
})
(define_expand "udot_prod<mode>"
[(set (match_operand:V4SI 0 "register_operand" "=v")
......
2016-05-24 Michael Meissner <meissner@linux.vnet.ibm.com>
* gcc.target/powerpc/p9-vneg.c: New test for ISA 3.0 VNEGW/VNEGD
instructions.
2016-05-24 Cesar Philippidis <cesar@codesourcery.com>
* c-c++-common/goacc/data-clause-duplicate-1.c: Adjust test.
......
/* { dg-do compile { target { powerpc64*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9 -O2" } */
/* Verify P9 vector negate instructions. */
vector long long v2di_neg (vector long long a) { return -a; }
vector int v4si_neg (vector int a) { return -a; }
/* { dg-final { scan-assembler "vnegd" } } */
/* { dg-final { scan-assembler "vnegw" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment