Commit 348d4b0a by Bin Cheng Committed by Bin Cheng

* config/aarch64/aarch64.c (aarch64_classify_address)

	(aarch64_legitimize_reload_address): Support full addressing modes
	for vector modes.
	* config/aarch64/aarch64.md (mov<mode>, movmisalign<mode>)
	(*aarch64_simd_mov<mode>, *aarch64_simd_mov<mode>): Relax predicates.

From-SVN: r211211
parent 1b1b580c
2014-06-04 Bin Cheng <bin.cheng@arm.com>
* config/aarch64/aarch64.c (aarch64_classify_address)
(aarch64_legitimize_reload_address): Support full addressing modes
for vector modes.
* config/aarch64/aarch64.md (mov<mode>, movmisalign<mode>)
(*aarch64_simd_mov<mode>, *aarch64_simd_mov<mode>): Relax predicates.
2014-06-03 Andrew Pinski <apinski@cavium.com> 2014-06-03 Andrew Pinski <apinski@cavium.com>
* config/aarch64/aarch64.c (aarch64_if_then_else_costs): Allow non comparisons * config/aarch64/aarch64.c (aarch64_if_then_else_costs): Allow non comparisons
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
;; <http://www.gnu.org/licenses/>. ;; <http://www.gnu.org/licenses/>.
(define_expand "mov<mode>" (define_expand "mov<mode>"
[(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "") [(set (match_operand:VALL 0 "nonimmediate_operand" "")
(match_operand:VALL 1 "aarch64_simd_general_operand" ""))] (match_operand:VALL 1 "general_operand" ""))]
"TARGET_SIMD" "TARGET_SIMD"
" "
if (GET_CODE (operands[0]) == MEM) if (GET_CODE (operands[0]) == MEM)
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
) )
(define_expand "movmisalign<mode>" (define_expand "movmisalign<mode>"
[(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "") [(set (match_operand:VALL 0 "nonimmediate_operand" "")
(match_operand:VALL 1 "aarch64_simd_general_operand" ""))] (match_operand:VALL 1 "general_operand" ""))]
"TARGET_SIMD" "TARGET_SIMD"
{ {
/* This pattern is not permitted to fail during expansion: if both arguments /* This pattern is not permitted to fail during expansion: if both arguments
...@@ -91,9 +91,9 @@ ...@@ -91,9 +91,9 @@
) )
(define_insn "*aarch64_simd_mov<mode>" (define_insn "*aarch64_simd_mov<mode>"
[(set (match_operand:VD 0 "aarch64_simd_nonimmediate_operand" [(set (match_operand:VD 0 "nonimmediate_operand"
"=w, m, w, ?r, ?w, ?r, w") "=w, m, w, ?r, ?w, ?r, w")
(match_operand:VD 1 "aarch64_simd_general_operand" (match_operand:VD 1 "general_operand"
"m, w, w, w, r, r, Dn"))] "m, w, w, w, r, r, Dn"))]
"TARGET_SIMD "TARGET_SIMD
&& (register_operand (operands[0], <MODE>mode) && (register_operand (operands[0], <MODE>mode)
...@@ -119,9 +119,9 @@ ...@@ -119,9 +119,9 @@
) )
(define_insn "*aarch64_simd_mov<mode>" (define_insn "*aarch64_simd_mov<mode>"
[(set (match_operand:VQ 0 "aarch64_simd_nonimmediate_operand" [(set (match_operand:VQ 0 "nonimmediate_operand"
"=w, m, w, ?r, ?w, ?r, w") "=w, m, w, ?r, ?w, ?r, w")
(match_operand:VQ 1 "aarch64_simd_general_operand" (match_operand:VQ 1 "general_operand"
"m, w, w, w, r, r, Dn"))] "m, w, w, w, r, r, Dn"))]
"TARGET_SIMD "TARGET_SIMD
&& (register_operand (operands[0], <MODE>mode) && (register_operand (operands[0], <MODE>mode)
......
...@@ -3158,11 +3158,11 @@ aarch64_classify_address (struct aarch64_address_info *info, ...@@ -3158,11 +3158,11 @@ aarch64_classify_address (struct aarch64_address_info *info,
enum rtx_code code = GET_CODE (x); enum rtx_code code = GET_CODE (x);
rtx op0, op1; rtx op0, op1;
bool allow_reg_index_p = bool allow_reg_index_p =
outer_code != PARALLEL && GET_MODE_SIZE(mode) != 16; outer_code != PARALLEL && (GET_MODE_SIZE (mode) != 16
|| aarch64_vector_mode_supported_p (mode));
/* Don't support anything other than POST_INC or REG addressing for /* Don't support anything other than POST_INC or REG addressing for
AdvSIMD. */ AdvSIMD. */
if (aarch64_vector_mode_p (mode) if (aarch64_vect_struct_mode_p (mode)
&& (code != POST_INC && code != REG)) && (code != POST_INC && code != REG))
return false; return false;
...@@ -4092,8 +4092,8 @@ aarch64_legitimize_reload_address (rtx *x_p, ...@@ -4092,8 +4092,8 @@ aarch64_legitimize_reload_address (rtx *x_p,
{ {
rtx x = *x_p; rtx x = *x_p;
/* Do not allow mem (plus (reg, const)) if vector mode. */ /* Do not allow mem (plus (reg, const)) if vector struct mode. */
if (aarch64_vector_mode_p (mode) if (aarch64_vect_struct_mode_p (mode)
&& GET_CODE (x) == PLUS && GET_CODE (x) == PLUS
&& REG_P (XEXP (x, 0)) && REG_P (XEXP (x, 0))
&& CONST_INT_P (XEXP (x, 1))) && CONST_INT_P (XEXP (x, 1)))
......
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