diff options
author | Bin Cheng <bin.cheng@arm.com> | 2014-06-04 03:45:50 +0000 |
---|---|---|
committer | Bin Cheng <amker@gcc.gnu.org> | 2014-06-04 03:45:50 +0000 |
commit | 348d4b0a54328f618754aa5f7f7067ea50e7b3bc (patch) | |
tree | a7d5682908854f0ee0bc05e9c8b99bc079e21873 /gcc | |
parent | 1b1b580c5baa662d0d739fba67c7eed8e06f6040 (diff) | |
download | gcc-348d4b0a54328f618754aa5f7f7067ea50e7b3bc.zip gcc-348d4b0a54328f618754aa5f7f7067ea50e7b3bc.tar.gz gcc-348d4b0a54328f618754aa5f7f7067ea50e7b3bc.tar.bz2 |
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64-simd.md | 16 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 10 |
3 files changed, 21 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ece0da1..c188d41 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +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> * config/aarch64/aarch64.c (aarch64_if_then_else_costs): Allow non comparisons diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index a1f0ff5..8b3cfa1 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -19,8 +19,8 @@ ;; <http://www.gnu.org/licenses/>. (define_expand "mov<mode>" - [(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "") - (match_operand:VALL 1 "aarch64_simd_general_operand" ""))] + [(set (match_operand:VALL 0 "nonimmediate_operand" "") + (match_operand:VALL 1 "general_operand" ""))] "TARGET_SIMD" " if (GET_CODE (operands[0]) == MEM) @@ -29,8 +29,8 @@ ) (define_expand "movmisalign<mode>" - [(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "") - (match_operand:VALL 1 "aarch64_simd_general_operand" ""))] + [(set (match_operand:VALL 0 "nonimmediate_operand" "") + (match_operand:VALL 1 "general_operand" ""))] "TARGET_SIMD" { /* This pattern is not permitted to fail during expansion: if both arguments @@ -91,9 +91,9 @@ ) (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") - (match_operand:VD 1 "aarch64_simd_general_operand" + (match_operand:VD 1 "general_operand" "m, w, w, w, r, r, Dn"))] "TARGET_SIMD && (register_operand (operands[0], <MODE>mode) @@ -119,9 +119,9 @@ ) (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") - (match_operand:VQ 1 "aarch64_simd_general_operand" + (match_operand:VQ 1 "general_operand" "m, w, w, w, r, r, Dn"))] "TARGET_SIMD && (register_operand (operands[0], <MODE>mode) diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 3d5f48c..b26e5f5 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -3158,11 +3158,11 @@ aarch64_classify_address (struct aarch64_address_info *info, enum rtx_code code = GET_CODE (x); rtx op0, op1; 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 AdvSIMD. */ - if (aarch64_vector_mode_p (mode) + if (aarch64_vect_struct_mode_p (mode) && (code != POST_INC && code != REG)) return false; @@ -4092,8 +4092,8 @@ aarch64_legitimize_reload_address (rtx *x_p, { rtx x = *x_p; - /* Do not allow mem (plus (reg, const)) if vector mode. */ - if (aarch64_vector_mode_p (mode) + /* Do not allow mem (plus (reg, const)) if vector struct mode. */ + if (aarch64_vect_struct_mode_p (mode) && GET_CODE (x) == PLUS && REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1))) |