diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2011-07-12 14:30:32 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2011-07-12 14:30:32 +0000 |
commit | 12c4ecb13a60ac686ec32b61ece46372d0d19760 (patch) | |
tree | 581be602b956042e9c00dc5710952795eb7903ba /gcc | |
parent | b46a23dd68efa720566e94e63653bdc49d3bfbc6 (diff) | |
download | gcc-12c4ecb13a60ac686ec32b61ece46372d0d19760.zip gcc-12c4ecb13a60ac686ec32b61ece46372d0d19760.tar.gz gcc-12c4ecb13a60ac686ec32b61ece46372d0d19760.tar.bz2 |
predicates.md (neon_struct_operand): Make a normal predicate.
gcc/
* config/arm/predicates.md (neon_struct_operand): Make a normal
predicate.
(neon_struct_or_register_operand): New predicate.
* config/arm/neon.md (movmisalign<mode>): Replace predicates
with neon_struct_or_register_operand.
(*movmisalign<mode>_neon_store, *movmisalign<mode>_neon_load): Use
neon_struct_operand instead of memory_operand.
From-SVN: r176204
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/arm/neon.md | 16 | ||||
-rw-r--r-- | gcc/config/arm/predicates.md | 6 |
3 files changed, 23 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d121c5c..792508d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2011-07-12 Richard Sandiford <richard.sandiford@linaro.org> + + * config/arm/predicates.md (neon_struct_operand): Make a normal + predicate. + (neon_struct_or_register_operand): New predicate. + * config/arm/neon.md (movmisalign<mode>): Replace predicates + with neon_struct_or_register_operand. + (*movmisalign<mode>_neon_store, *movmisalign<mode>_neon_load): Use + neon_struct_operand instead of memory_operand. + 2011-07-12 Martin Jambor <mjambor@suse.cz> * cgraph.h (cgraph_get_node_or_alias): Removed declaration. diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index becb524..1f9ea67 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -372,8 +372,8 @@ }) (define_expand "movmisalign<mode>" - [(set (match_operand:VDQX 0 "nonimmediate_operand" "") - (unspec:VDQX [(match_operand:VDQX 1 "general_operand" "")] + [(set (match_operand:VDQX 0 "neon_struct_or_register_operand") + (unspec:VDQX [(match_operand:VDQX 1 "neon_struct_or_register_operand")] UNSPEC_MISALIGNED_ACCESS))] "TARGET_NEON && !BYTES_BIG_ENDIAN" { @@ -386,7 +386,7 @@ }) (define_insn "*movmisalign<mode>_neon_store" - [(set (match_operand:VDX 0 "memory_operand" "=Um") + [(set (match_operand:VDX 0 "neon_struct_operand" "=Um") (unspec:VDX [(match_operand:VDX 1 "s_register_operand" " w")] UNSPEC_MISALIGNED_ACCESS))] "TARGET_NEON && !BYTES_BIG_ENDIAN" @@ -394,15 +394,15 @@ [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]) (define_insn "*movmisalign<mode>_neon_load" - [(set (match_operand:VDX 0 "s_register_operand" "=w") - (unspec:VDX [(match_operand:VDX 1 "memory_operand" " Um")] + [(set (match_operand:VDX 0 "s_register_operand" "=w") + (unspec:VDX [(match_operand:VDX 1 "neon_struct_operand" " Um")] UNSPEC_MISALIGNED_ACCESS))] "TARGET_NEON && !BYTES_BIG_ENDIAN" "vld1.<V_sz_elem>\t{%P0}, %A1" [(set_attr "neon_type" "neon_vld1_1_2_regs")]) (define_insn "*movmisalign<mode>_neon_store" - [(set (match_operand:VQX 0 "memory_operand" "=Um") + [(set (match_operand:VQX 0 "neon_struct_operand" "=Um") (unspec:VQX [(match_operand:VQX 1 "s_register_operand" " w")] UNSPEC_MISALIGNED_ACCESS))] "TARGET_NEON && !BYTES_BIG_ENDIAN" @@ -410,8 +410,8 @@ [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]) (define_insn "*movmisalign<mode>_neon_load" - [(set (match_operand:VQX 0 "s_register_operand" "=w") - (unspec:VQX [(match_operand:VQX 1 "memory_operand" " Um")] + [(set (match_operand:VQX 0 "s_register_operand" "=w") + (unspec:VQX [(match_operand:VQX 1 "neon_struct_operand" " Um")] UNSPEC_MISALIGNED_ACCESS))] "TARGET_NEON && !BYTES_BIG_ENDIAN" "vld1.<V_sz_elem>\t{%q0}, %A1" diff --git a/gcc/config/arm/predicates.md b/gcc/config/arm/predicates.md index 215d58d..678a31c 100644 --- a/gcc/config/arm/predicates.md +++ b/gcc/config/arm/predicates.md @@ -732,9 +732,13 @@ return true; }) -(define_special_predicate "neon_struct_operand" +(define_predicate "neon_struct_operand" (and (match_code "mem") (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 2)"))) +(define_predicate "neon_struct_or_register_operand" + (ior (match_operand 0 "neon_struct_operand") + (match_operand 0 "s_register_operand"))) + (define_special_predicate "add_operator" (match_code "plus")) |