Commit 411f86ad by Kyrylo Tkachov Committed by Kyrylo Tkachov

[ARM] Remove builtins for vzup, vuzp, vtrn and cleanup.

	* config/arm/arm.c (neon_itype): Remove NEON_RESULTPAIR.
	(arm_init_neon_builtins): Remove handling of NEON_RESULTPAIR.
	Remove associated type declarations and initialisations.
	(arm_expand_neon_builtin): Likewise.
	(neon_emit_pair_result_insn): Delete.
	* config/arm/arm_neon_builtins (vtrn, vzip, vuzp): Delete.
	* config/arm/neon.md (neon_vtrn<mode>): Delete.
	(neon_vzip<mode>): Likewise.
	(neon_vuzp<mode>): Likewise.

From-SVN: r210369
parent 9ce24424
2014-05-13 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/arm/arm.c (neon_itype): Remove NEON_RESULTPAIR.
(arm_init_neon_builtins): Remove handling of NEON_RESULTPAIR.
Remove associated type declarations and initialisations.
(arm_expand_neon_builtin): Likewise.
(neon_emit_pair_result_insn): Delete.
* config/arm/arm_neon_builtins (vtrn, vzip, vuzp): Delete.
* config/arm/neon.md (neon_vtrn<mode>): Delete.
(neon_vzip<mode>): Likewise.
(neon_vuzp<mode>): Likewise.
2014-05-13 Richard Biener <rguenther@suse.de> 2014-05-13 Richard Biener <rguenther@suse.de>
PR ipa/60973 PR ipa/60973
......
...@@ -23085,7 +23085,6 @@ typedef enum { ...@@ -23085,7 +23085,6 @@ typedef enum {
NEON_FLOAT_NARROW, NEON_FLOAT_NARROW,
NEON_FIXCONV, NEON_FIXCONV,
NEON_SELECT, NEON_SELECT,
NEON_RESULTPAIR,
NEON_REINTERP, NEON_REINTERP,
NEON_VTBL, NEON_VTBL,
NEON_VTBX, NEON_VTBX,
...@@ -23550,27 +23549,6 @@ arm_init_neon_builtins (void) ...@@ -23550,27 +23549,6 @@ arm_init_neon_builtins (void)
tree intCI_type_node; tree intCI_type_node;
tree intXI_type_node; tree intXI_type_node;
tree V8QI_pointer_node;
tree V4HI_pointer_node;
tree V2SI_pointer_node;
tree V2SF_pointer_node;
tree V16QI_pointer_node;
tree V8HI_pointer_node;
tree V4SI_pointer_node;
tree V4SF_pointer_node;
tree V2DI_pointer_node;
tree void_ftype_pv8qi_v8qi_v8qi;
tree void_ftype_pv4hi_v4hi_v4hi;
tree void_ftype_pv2si_v2si_v2si;
tree void_ftype_pv2sf_v2sf_v2sf;
tree void_ftype_pdi_di_di;
tree void_ftype_pv16qi_v16qi_v16qi;
tree void_ftype_pv8hi_v8hi_v8hi;
tree void_ftype_pv4si_v4si_v4si;
tree void_ftype_pv4sf_v4sf_v4sf;
tree void_ftype_pv2di_v2di_v2di;
tree reinterp_ftype_dreg[NUM_DREG_TYPES][NUM_DREG_TYPES]; tree reinterp_ftype_dreg[NUM_DREG_TYPES][NUM_DREG_TYPES];
tree reinterp_ftype_qreg[NUM_QREG_TYPES][NUM_QREG_TYPES]; tree reinterp_ftype_qreg[NUM_QREG_TYPES][NUM_QREG_TYPES];
tree dreg_types[NUM_DREG_TYPES], qreg_types[NUM_QREG_TYPES]; tree dreg_types[NUM_DREG_TYPES], qreg_types[NUM_QREG_TYPES];
...@@ -23696,49 +23674,6 @@ arm_init_neon_builtins (void) ...@@ -23696,49 +23674,6 @@ arm_init_neon_builtins (void)
(*lang_hooks.types.register_builtin_type) (intXI_type_node, (*lang_hooks.types.register_builtin_type) (intXI_type_node,
"__builtin_neon_xi"); "__builtin_neon_xi");
/* Pointers to vector types. */
V8QI_pointer_node = build_pointer_type (V8QI_type_node);
V4HI_pointer_node = build_pointer_type (V4HI_type_node);
V2SI_pointer_node = build_pointer_type (V2SI_type_node);
V2SF_pointer_node = build_pointer_type (V2SF_type_node);
V16QI_pointer_node = build_pointer_type (V16QI_type_node);
V8HI_pointer_node = build_pointer_type (V8HI_type_node);
V4SI_pointer_node = build_pointer_type (V4SI_type_node);
V4SF_pointer_node = build_pointer_type (V4SF_type_node);
V2DI_pointer_node = build_pointer_type (V2DI_type_node);
/* Operations which return results as pairs. */
void_ftype_pv8qi_v8qi_v8qi =
build_function_type_list (void_type_node, V8QI_pointer_node, V8QI_type_node,
V8QI_type_node, NULL);
void_ftype_pv4hi_v4hi_v4hi =
build_function_type_list (void_type_node, V4HI_pointer_node, V4HI_type_node,
V4HI_type_node, NULL);
void_ftype_pv2si_v2si_v2si =
build_function_type_list (void_type_node, V2SI_pointer_node, V2SI_type_node,
V2SI_type_node, NULL);
void_ftype_pv2sf_v2sf_v2sf =
build_function_type_list (void_type_node, V2SF_pointer_node, V2SF_type_node,
V2SF_type_node, NULL);
void_ftype_pdi_di_di =
build_function_type_list (void_type_node, intDI_pointer_node,
neon_intDI_type_node, neon_intDI_type_node, NULL);
void_ftype_pv16qi_v16qi_v16qi =
build_function_type_list (void_type_node, V16QI_pointer_node,
V16QI_type_node, V16QI_type_node, NULL);
void_ftype_pv8hi_v8hi_v8hi =
build_function_type_list (void_type_node, V8HI_pointer_node, V8HI_type_node,
V8HI_type_node, NULL);
void_ftype_pv4si_v4si_v4si =
build_function_type_list (void_type_node, V4SI_pointer_node, V4SI_type_node,
V4SI_type_node, NULL);
void_ftype_pv4sf_v4sf_v4sf =
build_function_type_list (void_type_node, V4SF_pointer_node, V4SF_type_node,
V4SF_type_node, NULL);
void_ftype_pv2di_v2di_v2di =
build_function_type_list (void_type_node, V2DI_pointer_node, V2DI_type_node,
V2DI_type_node, NULL);
if (TARGET_CRYPTO && TARGET_HARD_FLOAT) if (TARGET_CRYPTO && TARGET_HARD_FLOAT)
{ {
tree V4USI_type_node = tree V4USI_type_node =
...@@ -24028,25 +23963,6 @@ arm_init_neon_builtins (void) ...@@ -24028,25 +23963,6 @@ arm_init_neon_builtins (void)
} }
break; break;
case NEON_RESULTPAIR:
{
switch (insn_data[d->code].operand[1].mode)
{
case V8QImode: ftype = void_ftype_pv8qi_v8qi_v8qi; break;
case V4HImode: ftype = void_ftype_pv4hi_v4hi_v4hi; break;
case V2SImode: ftype = void_ftype_pv2si_v2si_v2si; break;
case V2SFmode: ftype = void_ftype_pv2sf_v2sf_v2sf; break;
case DImode: ftype = void_ftype_pdi_di_di; break;
case V16QImode: ftype = void_ftype_pv16qi_v16qi_v16qi; break;
case V8HImode: ftype = void_ftype_pv8hi_v8hi_v8hi; break;
case V4SImode: ftype = void_ftype_pv4si_v4si_v4si; break;
case V4SFmode: ftype = void_ftype_pv4sf_v4sf_v4sf; break;
case V2DImode: ftype = void_ftype_pv2di_v2di_v2di; break;
default: gcc_unreachable ();
}
}
break;
case NEON_REINTERP: case NEON_REINTERP:
{ {
/* We iterate over NUM_DREG_TYPES doubleword types, /* We iterate over NUM_DREG_TYPES doubleword types,
...@@ -25289,11 +25205,6 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target) ...@@ -25289,11 +25205,6 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target)
return arm_expand_neon_args (target, icode, 1, type_mode, exp, fcode, return arm_expand_neon_args (target, icode, 1, type_mode, exp, fcode,
NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP); NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
case NEON_RESULTPAIR:
return arm_expand_neon_args (target, icode, 0, type_mode, exp, fcode,
NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
NEON_ARG_STOP);
case NEON_LANEMUL: case NEON_LANEMUL:
case NEON_LANEMULL: case NEON_LANEMULL:
case NEON_LANEMULH: case NEON_LANEMULH:
...@@ -25355,24 +25266,6 @@ neon_reinterpret (rtx dest, rtx src) ...@@ -25355,24 +25266,6 @@ neon_reinterpret (rtx dest, rtx src)
emit_move_insn (dest, gen_lowpart (GET_MODE (dest), src)); emit_move_insn (dest, gen_lowpart (GET_MODE (dest), src));
} }
/* Emit code to place a Neon pair result in memory locations (with equal
registers). */
void
neon_emit_pair_result_insn (enum machine_mode mode,
rtx (*intfn) (rtx, rtx, rtx, rtx), rtx destaddr,
rtx op1, rtx op2)
{
rtx mem = gen_rtx_MEM (mode, destaddr);
rtx tmp1 = gen_reg_rtx (mode);
rtx tmp2 = gen_reg_rtx (mode);
emit_insn (intfn (tmp1, op1, op2, tmp2));
emit_move_insn (mem, tmp1);
mem = adjust_address (mem, mode, GET_MODE_SIZE (mode));
emit_move_insn (mem, tmp2);
}
/* Set up OPERANDS for a register copy from SRC to DEST, taking care /* Set up OPERANDS for a register copy from SRC to DEST, taking care
not to early-clobber SRC registers in the process. not to early-clobber SRC registers in the process.
......
...@@ -148,9 +148,6 @@ VAR1 (VTBX, vtbx1, v8qi), ...@@ -148,9 +148,6 @@ VAR1 (VTBX, vtbx1, v8qi),
VAR1 (VTBX, vtbx2, v8qi), VAR1 (VTBX, vtbx2, v8qi),
VAR1 (VTBX, vtbx3, v8qi), VAR1 (VTBX, vtbx3, v8qi),
VAR1 (VTBX, vtbx4, v8qi), VAR1 (VTBX, vtbx4, v8qi),
VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di), VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di),
VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di), VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di),
VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di), VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di),
......
...@@ -4140,17 +4140,6 @@ ...@@ -4140,17 +4140,6 @@
[(set_attr "type" "neon_permute<q>")] [(set_attr "type" "neon_permute<q>")]
) )
(define_expand "neon_vtrn<mode>"
[(match_operand:SI 0 "s_register_operand" "r")
(match_operand:VDQW 1 "s_register_operand" "w")
(match_operand:VDQW 2 "s_register_operand" "w")]
"TARGET_NEON"
{
neon_emit_pair_result_insn (<MODE>mode, gen_neon_vtrn<mode>_internal,
operands[0], operands[1], operands[2]);
DONE;
})
(define_expand "neon_vzip<mode>_internal" (define_expand "neon_vzip<mode>_internal"
[(parallel [(parallel
[(set (match_operand:VDQW 0 "s_register_operand" "") [(set (match_operand:VDQW 0 "s_register_operand" "")
...@@ -4177,17 +4166,6 @@ ...@@ -4177,17 +4166,6 @@
[(set_attr "type" "neon_zip<q>")] [(set_attr "type" "neon_zip<q>")]
) )
(define_expand "neon_vzip<mode>"
[(match_operand:SI 0 "s_register_operand" "r")
(match_operand:VDQW 1 "s_register_operand" "w")
(match_operand:VDQW 2 "s_register_operand" "w")]
"TARGET_NEON"
{
neon_emit_pair_result_insn (<MODE>mode, gen_neon_vzip<mode>_internal,
operands[0], operands[1], operands[2]);
DONE;
})
(define_expand "neon_vuzp<mode>_internal" (define_expand "neon_vuzp<mode>_internal"
[(parallel [(parallel
[(set (match_operand:VDQW 0 "s_register_operand" "") [(set (match_operand:VDQW 0 "s_register_operand" "")
...@@ -4214,17 +4192,6 @@ ...@@ -4214,17 +4192,6 @@
[(set_attr "type" "neon_zip<q>")] [(set_attr "type" "neon_zip<q>")]
) )
(define_expand "neon_vuzp<mode>"
[(match_operand:SI 0 "s_register_operand" "r")
(match_operand:VDQW 1 "s_register_operand" "w")
(match_operand:VDQW 2 "s_register_operand" "w")]
"TARGET_NEON"
{
neon_emit_pair_result_insn (<MODE>mode, gen_neon_vuzp<mode>_internal,
operands[0], operands[1], operands[2]);
DONE;
})
(define_expand "neon_vreinterpretv8qi<mode>" (define_expand "neon_vreinterpretv8qi<mode>"
[(match_operand:V8QI 0 "s_register_operand" "") [(match_operand:V8QI 0 "s_register_operand" "")
(match_operand:VDX 1 "s_register_operand" "")] (match_operand:VDX 1 "s_register_operand" "")]
......
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