aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2014-06-04 03:45:50 +0000
committerBin Cheng <amker@gcc.gnu.org>2014-06-04 03:45:50 +0000
commit348d4b0a54328f618754aa5f7f7067ea50e7b3bc (patch)
treea7d5682908854f0ee0bc05e9c8b99bc079e21873 /gcc
parent1b1b580c5baa662d0d739fba67c7eed8e06f6040 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/config/aarch64/aarch64-simd.md16
-rw-r--r--gcc/config/aarch64/aarch64.c10
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)))