Commit 12c4ecb1 by Richard Sandiford Committed by Richard Sandiford

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
parent b46a23dd
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> 2011-07-12 Martin Jambor <mjambor@suse.cz>
* cgraph.h (cgraph_get_node_or_alias): Removed declaration. * cgraph.h (cgraph_get_node_or_alias): Removed declaration.
......
...@@ -372,8 +372,8 @@ ...@@ -372,8 +372,8 @@
}) })
(define_expand "movmisalign<mode>" (define_expand "movmisalign<mode>"
[(set (match_operand:VDQX 0 "nonimmediate_operand" "") [(set (match_operand:VDQX 0 "neon_struct_or_register_operand")
(unspec:VDQX [(match_operand:VDQX 1 "general_operand" "")] (unspec:VDQX [(match_operand:VDQX 1 "neon_struct_or_register_operand")]
UNSPEC_MISALIGNED_ACCESS))] UNSPEC_MISALIGNED_ACCESS))]
"TARGET_NEON && !BYTES_BIG_ENDIAN" "TARGET_NEON && !BYTES_BIG_ENDIAN"
{ {
...@@ -386,7 +386,7 @@ ...@@ -386,7 +386,7 @@
}) })
(define_insn "*movmisalign<mode>_neon_store" (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:VDX [(match_operand:VDX 1 "s_register_operand" " w")]
UNSPEC_MISALIGNED_ACCESS))] UNSPEC_MISALIGNED_ACCESS))]
"TARGET_NEON && !BYTES_BIG_ENDIAN" "TARGET_NEON && !BYTES_BIG_ENDIAN"
...@@ -394,15 +394,15 @@ ...@@ -394,15 +394,15 @@
[(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]) [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")])
(define_insn "*movmisalign<mode>_neon_load" (define_insn "*movmisalign<mode>_neon_load"
[(set (match_operand:VDX 0 "s_register_operand" "=w") [(set (match_operand:VDX 0 "s_register_operand" "=w")
(unspec:VDX [(match_operand:VDX 1 "memory_operand" " Um")] (unspec:VDX [(match_operand:VDX 1 "neon_struct_operand" " Um")]
UNSPEC_MISALIGNED_ACCESS))] UNSPEC_MISALIGNED_ACCESS))]
"TARGET_NEON && !BYTES_BIG_ENDIAN" "TARGET_NEON && !BYTES_BIG_ENDIAN"
"vld1.<V_sz_elem>\t{%P0}, %A1" "vld1.<V_sz_elem>\t{%P0}, %A1"
[(set_attr "neon_type" "neon_vld1_1_2_regs")]) [(set_attr "neon_type" "neon_vld1_1_2_regs")])
(define_insn "*movmisalign<mode>_neon_store" (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:VQX [(match_operand:VQX 1 "s_register_operand" " w")]
UNSPEC_MISALIGNED_ACCESS))] UNSPEC_MISALIGNED_ACCESS))]
"TARGET_NEON && !BYTES_BIG_ENDIAN" "TARGET_NEON && !BYTES_BIG_ENDIAN"
...@@ -410,8 +410,8 @@ ...@@ -410,8 +410,8 @@
[(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]) [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")])
(define_insn "*movmisalign<mode>_neon_load" (define_insn "*movmisalign<mode>_neon_load"
[(set (match_operand:VQX 0 "s_register_operand" "=w") [(set (match_operand:VQX 0 "s_register_operand" "=w")
(unspec:VQX [(match_operand:VQX 1 "memory_operand" " Um")] (unspec:VQX [(match_operand:VQX 1 "neon_struct_operand" " Um")]
UNSPEC_MISALIGNED_ACCESS))] UNSPEC_MISALIGNED_ACCESS))]
"TARGET_NEON && !BYTES_BIG_ENDIAN" "TARGET_NEON && !BYTES_BIG_ENDIAN"
"vld1.<V_sz_elem>\t{%q0}, %A1" "vld1.<V_sz_elem>\t{%q0}, %A1"
......
...@@ -732,9 +732,13 @@ ...@@ -732,9 +732,13 @@
return true; return true;
}) })
(define_special_predicate "neon_struct_operand" (define_predicate "neon_struct_operand"
(and (match_code "mem") (and (match_code "mem")
(match_test "TARGET_32BIT && neon_vector_mem_operand (op, 2)"))) (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" (define_special_predicate "add_operator"
(match_code "plus")) (match_code "plus"))
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