aarch64-simd.md (aarch64_combine<mode>): Directly call aarch64_split_simd_combine.
2017-06-19 Michael Collison <michael.collison@arm.com> * config/aarch64/aarch64-simd.md (aarch64_combine<mode>): Directly call aarch64_split_simd_combine. * (aarch64_combine_internal<mode>): Delete pattern. * config/aarch64/aarch64.c (aarch64_split_simd_combine): Allow register and subreg operands. From-SVN: r249702
This commit is contained in:
parent
b2cf76f3a5
commit
a977dc0c5e
|
@ -1,3 +1,11 @@
|
||||||
|
2017-06-27 Michael Collison <michael.collison@arm.com>
|
||||||
|
|
||||||
|
* config/aarch64/aarch64-simd.md (aarch64_combine<mode>): Directly
|
||||||
|
call aarch64_split_simd_combine.
|
||||||
|
* (aarch64_combine_internal<mode>): Delete pattern.
|
||||||
|
* config/aarch64/aarch64.c (aarch64_split_simd_combine):
|
||||||
|
Allow register and subreg operands.
|
||||||
|
|
||||||
2017-06-27 Jerome Lambourg <lambourg@adacore.com>
|
2017-06-27 Jerome Lambourg <lambourg@adacore.com>
|
||||||
|
|
||||||
* config/i386/vxworks.h (ASM_SPEC): Remove definition. No target
|
* config/i386/vxworks.h (ASM_SPEC): Remove definition. No target
|
||||||
|
|
|
@ -2809,38 +2809,10 @@
|
||||||
(match_operand:VDC 2 "register_operand")]
|
(match_operand:VDC 2 "register_operand")]
|
||||||
"TARGET_SIMD"
|
"TARGET_SIMD"
|
||||||
{
|
{
|
||||||
rtx op1, op2;
|
|
||||||
if (BYTES_BIG_ENDIAN)
|
|
||||||
{
|
|
||||||
op1 = operands[2];
|
|
||||||
op2 = operands[1];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
op1 = operands[1];
|
|
||||||
op2 = operands[2];
|
|
||||||
}
|
|
||||||
emit_insn (gen_aarch64_combine_internal<mode> (operands[0], op1, op2));
|
|
||||||
DONE;
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
(define_insn_and_split "aarch64_combine_internal<mode>"
|
|
||||||
[(set (match_operand:<VDBL> 0 "register_operand" "=&w")
|
|
||||||
(vec_concat:<VDBL> (match_operand:VDC 1 "register_operand" "w")
|
|
||||||
(match_operand:VDC 2 "register_operand" "w")))]
|
|
||||||
"TARGET_SIMD"
|
|
||||||
"#"
|
|
||||||
"&& reload_completed"
|
|
||||||
[(const_int 0)]
|
|
||||||
{
|
|
||||||
if (BYTES_BIG_ENDIAN)
|
|
||||||
aarch64_split_simd_combine (operands[0], operands[2], operands[1]);
|
|
||||||
else
|
|
||||||
aarch64_split_simd_combine (operands[0], operands[1], operands[2]);
|
aarch64_split_simd_combine (operands[0], operands[1], operands[2]);
|
||||||
|
|
||||||
DONE;
|
DONE;
|
||||||
}
|
}
|
||||||
[(set_attr "type" "multiple")]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
(define_expand "aarch64_simd_combine<mode>"
|
(define_expand "aarch64_simd_combine<mode>"
|
||||||
|
|
|
@ -1732,9 +1732,10 @@ aarch64_split_simd_combine (rtx dst, rtx src1, rtx src2)
|
||||||
machine_mode dst_mode = GET_MODE (dst);
|
machine_mode dst_mode = GET_MODE (dst);
|
||||||
|
|
||||||
gcc_assert (VECTOR_MODE_P (dst_mode));
|
gcc_assert (VECTOR_MODE_P (dst_mode));
|
||||||
|
gcc_assert (register_operand (dst, dst_mode)
|
||||||
|
&& register_operand (src1, src_mode)
|
||||||
|
&& register_operand (src2, src_mode));
|
||||||
|
|
||||||
if (REG_P (dst) && REG_P (src1) && REG_P (src2))
|
|
||||||
{
|
|
||||||
rtx (*gen) (rtx, rtx, rtx);
|
rtx (*gen) (rtx, rtx, rtx);
|
||||||
|
|
||||||
switch (src_mode)
|
switch (src_mode)
|
||||||
|
@ -1767,7 +1768,6 @@ aarch64_split_simd_combine (rtx dst, rtx src1, rtx src2)
|
||||||
emit_insn (gen (dst, src1, src2));
|
emit_insn (gen (dst, src1, src2));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Split a complex SIMD move. */
|
/* Split a complex SIMD move. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue