OSDN Git Service

2010-07-02 Sandra Loosemore <sandra@codesourcery.com>
authorsandra <sandra@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Jul 2010 14:48:04 +0000 (14:48 +0000)
committersandra <sandra@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Jul 2010 14:48:04 +0000 (14:48 +0000)
commit79a8350398717c09d021cbd1a7fe91a44962111c
tree496d9999349fb60c99c98dfea93f7718bb2efaa4
parentd0f1d3d4892d96cfe930993141f7ef113ecbbff4
2010-07-02  Sandra Loosemore  <sandra@codesourcery.com>

gcc/
* config/arm/arm.c (neon_vdup_constant): Expand into canonical RTL
instead of an unspec.
(neon_expand_vector_init): Likewise.
* config/arm/neon.md (UNSPEC_VCOMBINE): Delete.
(UNSPEC_VDUP_LANE): Delete.
(UNSPEC VDUP_N): Delete.
(UNSPEC_VGET_HIGH): Delete.
(UNSPEC_VGET_LANE): Delete.
(UNSPEC_VGET_LOW): Delete.
(UNSPEC_VMVN): Delete.
(UNSPEC_VSET_LANE): Delete.
(V_double_vector_mode): New.
(vec_set<mode>_internal): Make code emitted match that for the
corresponding intrinsics.
(vec_setv2di_internal): Likewise.
(neon_vget_lanedi): Rewrite to expand into emit_move_insn.
(neon_vget_lanev2di): Rewrite to expand into vec_extractv2di.
(neon_vset_lane<mode>): Combine double and quad patterns and
expand into vec_set<mode>_internal instead of UNSPEC_VSET_LANE.
(neon_vset_lanedi): Rewrite to expand into emit_move_insn.
(neon_vdup_n<mode>): Rewrite RTL without unspec.
(neon_vdup_ndi): Rewrite as define_expand and use emit_move_insn.
(neon_vdup_nv2di): Rewrite RTL without unspec and merge with
with neon_vdup_lanev2di, adjusting the pattern from the latter
to be predicable for consistency.
(neon_vdup_lane<mode>_internal): New.
(neon_vdup_lane<mode>): Turn into a define_expand and rewrite
to avoid using an unspec.
(neon_vdup_lanedi): Rewrite RTL pattern to avoid unspec.
(neon_vdup_lanev2di): Turn into a define_expand.
(neon_vcombine): Rewrite pattern to eliminate UNPSEC_VCOMBINE.
(neon_vget_high<mode>): Replace with....
(neon_vget_highv16qi): New pattern using canonical RTL.
(neon_vget_highv8hi): Likewise.
(neon_vget_highv4si): Likewise.
(neon_vget_highv4sf): Likewise.
(neon_vget_highv2di): Likewise.
(neon_vget_low<mode>): Replace with....
(neon_vget_lowv16qi): New pattern using canonical RTL.
(neon_vget_lowv8hi): Likewise.
(neon_vget_lowv4si): Likewise.
(neon_vget_lowv4sf): Likewise.
(neon_vget_lowv2di): Likewise.

* config/arm/neon.ml (Vget_lane): Add No_op attribute to suppress
test for this emitting vmov.
(Vset_lane): Likewise.
(Vdup_n): Likewise.
(Vmov_n): Likewise.

* doc/arm-neon-intrinsics.texi: Regenerated.

gcc/testsuite/
* gcc.target/arm/neon/vdup_ns64.c: Regenerated.
* gcc.target/arm/neon/vdup_nu64.c: Regenerated.
* gcc.target/arm/neon/vdupQ_ns64.c: Regenerated.
* gcc.target/arm/neon/vdupQ_nu64.c: Regenerated.
* gcc.target/arm/neon/vmov_ns64.c: Regenerated.
* gcc.target/arm/neon/vmov_nu64.c: Regenerated.
* gcc.target/arm/neon/vmovQ_ns64.c: Regenerated.
* gcc.target/arm/neon/vmovQ_nu64.c: Regenerated.
* gcc.target/arm/neon/vget_lanes64.c: Regenerated.
* gcc.target/arm/neon/vget_laneu64.c: Regenerated.
* gcc.target/arm/neon/vset_lanes64.c: Regenerated.
* gcc.target/arm/neon/vset_laneu64.c: Regenerated.
* gcc.target/arm/neon-vdup_ns64.c: New.
* gcc.target/arm/neon-vdup_nu64.c: New.
* gcc.target/arm/neon-vdupQ_ns64.c: New.
* gcc.target/arm/neon-vdupQ_nu64.c: New.
* gcc.target/arm/neon-vdupQ_lanes64.c: New.
* gcc.target/arm/neon-vdupQ_laneu64.c: New.
* gcc.target/arm/neon-vmov_ns64.c: New.
* gcc.target/arm/neon-vmov_nu64.c: New.
* gcc.target/arm/neon-vmovQ_ns64.c: New.
* gcc.target/arm/neon-vmovQ_nu64.c: New.
* gcc.target/arm/neon-vget_lanes64.c: New.
* gcc.target/arm/neon-vget_laneu64.c: New.
* gcc.target/arm/neon-vset_lanes64.c: New.
* gcc.target/arm/neon-vset_laneu64.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161720 138bc75d-0d04-0410-961f-82ee72b054a4
32 files changed:
gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/arm/neon.md
gcc/config/arm/neon.ml
gcc/doc/arm-neon-intrinsics.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/neon-vdupQ_lanes64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vdupQ_laneu64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vdupQ_ns64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vdupQ_nu64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vdup_ns64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vdup_nu64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vget_lanes64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vget_laneu64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vmovQ_ns64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vmovQ_nu64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vmov_ns64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vmov_nu64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vset_lanes64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon-vset_laneu64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c
gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c
gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c
gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c
gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c
gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c
gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c
gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c
gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c
gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c
gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c
gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c