> On 10 Dec 2024, at 7:09 PM, Richard Sandiford <[email protected]>
> wrote:
>
> External email: Use caution opening links or attachments
>
>
> Soumya AR <[email protected]> writes:
>> @@ -1815,6 +1849,42 @@
>> }
>> )
>>
>> +(define_insn "*aarch64_sve2_bsl2n_unpred<mode>"
>> + [(set (match_operand:VDQ_I 0 "register_operand")
>> + (ior:VDQ_I
>> + (and:VDQ_I
>> + (match_operand:VDQ_I 1 "register_operand")
>> + (match_operand:VDQ_I 2 "register_operand"))
>> + (and:VDQ_I
>> + (not:VDQ_I
>> + (match_operand:VDQ_I 3 "register_operand"))
>> + (not:VDQ_I
>> + (match_dup BSL_DUP)))))]
>
> The second "and" should be indented by the same amount as the first "and":
>
> (define_insn "*aarch64_sve2_bsl2n_unpred<mode>"
> [(set (match_operand:VDQ_I 0 "register_operand")
> (ior:VDQ_I
> (and:VDQ_I
> (match_operand:VDQ_I 1 "register_operand")
> (match_operand:VDQ_I 2 "register_operand"))
> (and:VDQ_I
> (not:VDQ_I (match_operand:VDQ_I 3 "register_operand"))
> (not:VDQ_I (match_dup BSL_DUP)))))]
>
>> + "TARGET_SVE2"
>> + {@ [ cons: =0 , 1 , 2 , 3 ; attrs: movprfx ]
>> + [ w , <bsl_1st> , <bsl_2nd> , w ; * ]
>> bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z<bsl_dup>.d
>> + [ ?&w , w , w , w ; yes ]
>> movprfx\t%Z0, %Z<bsl_mov>\;bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z<bsl_dup>.d
>> + }
>> +)
>> +
>> +(define_insn "*aarch64_sve2_bsl2n_unpred<mode>"
>> + [(set (match_operand:VDQ_I 0 "register_operand")
>> + (ior:VDQ_I
>> + (and:VDQ_I
>> + (match_operand:VDQ_I 1 "register_operand")
>> + (match_operand:VDQ_I 2 "register_operand"))
>> + (and:VDQ_I
>> + (not:VDQ_I
>> + (match_dup BSL_DUP))
>> + (not:VDQ_I
>> + (match_operand:VDQ_I 3 "register_operand")))))]
>
> Similarly here.
>
> OK with those changes, thanks.
>
Ah my bad, fixed those.
Committed: 65b7c8db9c61bcdfd07a3404047dd2d2beac4bbb
Thank you.
Best,
Soumya
> Richard
>
>> + "TARGET_SVE2"
>> + {@ [ cons: =0 , 1 , 2 , 3 ; attrs: movprfx ]
>> + [ w , <bsl_1st> , <bsl_2nd> , w ; * ]
>> bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z<bsl_dup>.d
>> + [ ?&w , w , w , w ; yes ]
>> movprfx\t%Z0, %Z<bsl_mov>\;bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z<bsl_dup>.d
>> + }
>> +)
>> +
>> ;; -------------------------------------------------------------------------
>> ;; ---- [INT] Shift-and-accumulate operations
>> ;; -------------------------------------------------------------------------
>> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/bitsel.c
>> b/gcc/testsuite/gcc.target/aarch64/sve/bitsel.c
>> new file mode 100644
>> index 00000000000..635bfefc17c
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/aarch64/sve/bitsel.c
>> @@ -0,0 +1,35 @@
>> +/* { dg-options "-O2 -mcpu=neoverse-v2 --param
>> aarch64-autovec-preference=asimd-only" } */
>> +
>> +#include <stdint.h>
>> +
>> +#define OPNBSL(x,y,z) (~(((x) & (z)) | ((y) & ~(z))))
>> +#define OPBSL1N(x,y,z) ((~(x) & (z)) | ((y) & ~(z)))
>> +#define OPBSL2N(x,y,z) (((x) & (z)) | (~(y) & ~(z)))
>> +
>> +#define N 1024
>> +
>> +#define TYPE(N) int##N##_t
>> +
>> +#define TEST(SIZE, OP, SUFFIX) \
>> +void __attribute__ ((noinline, noclone)) \
>> +f_##SIZE##_##SUFFIX \
>> + (TYPE(SIZE) *restrict a, TYPE(SIZE) *restrict b, \
>> + TYPE(SIZE) *restrict c, TYPE(SIZE) *restrict d) \
>> +{ \
>> + for (int i = 0; i < N; i++) \
>> + a[i] = OP (b[i], c[i], d[i]); \
>> +}
>> +
>> +#define TEST_ALL(SIZE) \
>> + TEST(SIZE, OPNBSL, nbsl) \
>> + TEST(SIZE, OPBSL1N, bsl1n) \
>> + TEST(SIZE, OPBSL2N, bsl2n)
>> +
>> +TEST_ALL(8);
>> +TEST_ALL(16);
>> +TEST_ALL(32);
>> +TEST_ALL(64);
>> +
>> +/* { dg-final { scan-assembler-times {\tnbsl\tz[0-9]+\.d, z[0-9]+\.d,
>> z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
>> +/* { dg-final { scan-assembler-times {\tbsl1n\tz[0-9]+\.d, z[0-9]+\.d,
>> z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
>> +/* { dg-final { scan-assembler-times {\tbsl2n\tz[0-9]+\.d, z[0-9]+\.d,
>> z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
>> \ No newline at end of file