This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH AArch64]Support missing vcond pattern by adding/using vec_cmp/vcond_mask patterns.
- From: "Bin.Cheng" <amker dot cheng at gmail dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 24 May 2016 11:13:11 +0100
- Subject: Re: [PATCH AArch64]Support missing vcond pattern by adding/using vec_cmp/vcond_mask patterns.
- Authentication-results: sourceware.org; auth=none
- References: <DB5PR08MB1144FD75076B139152FF6394E7480 at DB5PR08MB1144 dot eurprd08 dot prod dot outlook dot com>
Ping.
Thanks,
bin
On Tue, May 17, 2016 at 10:02 AM, Bin Cheng <Bin.Cheng@arm.com> wrote:
> Hi,
> Alan and Renlin noticed that some vcond patterns are not supported in AArch64(or AArch32?) backend, and they both had some patches fixing this. After investigation, I agree with them that vcond/vcondu in AArch64's backend should be re-implemented using vec_cmp/vcond_mask patterns, so here comes this patch which is based on Alan's. This patch supports all vcond/vcondu patterns by implementing/using vec_cmp and vcond_mask patterns. Different to the original patch, it doesn't change GCC's expanding process, and it keeps vcond patterns. The patch also introduces vec_cmp*_internal to support special case optimization for vcond/vcondu which current implementation does.
> Apart from Alan's patch, I also learned ideas from Renlin's, and it is my change that shall be blamed if any potential bug is introduced.
>
> With this patch, GCC's test condition "vect_cond_mixed" can be enabled on AArch64 (in a following patch).
> Bootstrap and test on AArch64. Is it OK? BTW, this patch is necessary for gcc.dg/vect/PR56541.c (on AArch64) which was added before in tree if-conversion patch.
>
> Thanks,
> bin
>
> 2016-05-11 Alan Lawrence <alan.lawrence@arm.com>
> Renlin Li <renlin.li@arm.com>
> Bin Cheng <bin.cheng@arm.com>
>
> * config/aarch64/iterators.md (V_cmp_mixed, v_cmp_mixed): New.
> * config/aarch64/aarch64-simd.md (<su><maxmin>v2di3): Call
> gen_vcondv2div2di instead of gen_aarch64_vcond_internalv2div2di.
> (aarch64_vcond_internal<mode><mode>): Delete pattern.
> (aarch64_vcond_internal<VDQF_COND:mode><VDQF:mode>): Ditto.
> (vcond_mask_<mode><v_cmp_result>): New pattern.
> (vec_cmp<mode><mode>_internal, vec_cmp<mode><mode>): New pattern.
> (vec_cmp<mode><v_cmp_result>_internal): New pattern.
> (vec_cmp<mode><v_cmp_result>, vec_cmpu<mode><mode>): New pattern.
> (vcond<mode><mode>): Re-implement using vec_cmp and vcond_mask.
> (vcondu<mode><mode>): Ditto.
> (vcond<v_cmp_result><mode>): Delete.
> (vcond<v_cmp_mixed><mode>): New pattern.
> (vcondu<mode><v_cmp_mixed>): New pattern.
> (aarch64_cmtst<mode>): Revise comment using aarch64_vcond instead
> of aarch64_vcond_internal.
>
> gcc/testsuite/ChangeLog
> 2016-05-11 Bin Cheng <bin.cheng@arm.com>
>
> * gcc.target/aarch64/vect-vcond.c: New test.