Hi Soumya > On 17 Oct 2024, at 06:10, Soumya AR <soum...@nvidia.com> wrote: > > Hi Richard, > > Thanks for the feedback. I’ve updated the patch with the suggested change. > Ok for mainline? > > Best, > Soumya > > > On 14 Oct 2024, at 6:40 PM, Richard Sandiford <richard.sandif...@arm.com> > > wrote: > > > > External email: Use caution opening links or attachments > > > > > > Soumya AR <soum...@nvidia.com> writes: > >> This patch implements constant folding for svlsl. Test cases have been > >> added to > >> check for the following cases: > >> > >> Zero, merge, and don't care predication. > >> Shift by 0. > >> Shift by register width. > >> Overflow shift on signed and unsigned integers. > >> Shift on a negative integer. > >> Maximum possible shift, eg. shift by 7 on an 8-bit integer. > >> > >> The patch was bootstrapped and regtested on aarch64-linux-gnu, no > >> regression. > >> OK for mainline? > >> > >> Signed-off-by: Soumya AR <soum...@nvidia.com> > >> > >> gcc/ChangeLog: > >> > >> * config/aarch64/aarch64-sve-builtins-base.cc (svlsl_impl::fold): > >> Try constant folding. > >> > >> gcc/testsuite/ChangeLog: > >> > >> * gcc.target/aarch64/sve/const_fold_lsl_1.c: New test. > >> > >> From 0cf5223e51623dcdbc47a06cbd17d927c74094e2 Mon Sep 17 00:00:00 2001 > >> From: Soumya AR <soum...@nvidia.com> > >> Date: Tue, 24 Sep 2024 09:09:32 +0530 > >> Subject: [PATCH] SVE intrinsics: Fold constant operands for svlsl. > >> > >> This patch implements constant folding for svlsl. Test cases have been > >> added to > >> check for the following cases: > >> > >> Zero, merge, and don't care predication. > >> Shift by 0. > >> Shift by register width. > >> Overflow shift on signed and unsigned integers. > >> Shift on a negative integer. > >> Maximum possible shift, eg. shift by 7 on an 8-bit integer. > >> > >> The patch was bootstrapped and regtested on aarch64-linux-gnu, no > >> regression. > >> OK for mainline? > >> > >> Signed-off-by: Soumya AR <soum...@nvidia.com> > >> > >> gcc/ChangeLog: > >> > >> * config/aarch64/aarch64-sve-builtins-base.cc (svlsl_impl::fold): > >> Try constant folding. > >> > >> gcc/testsuite/ChangeLog: > >> > >> * gcc.target/aarch64/sve/const_fold_lsl_1.c: New test. > >> --- > >> .../aarch64/aarch64-sve-builtins-base.cc | 15 +- > >> .../gcc.target/aarch64/sve/const_fold_lsl_1.c | 133 ++++++++++++++++++ > >> 2 files changed, 147 insertions(+), 1 deletion(-) > >> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/const_fold_lsl_1.c > >> > >> diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc > >> b/gcc/config/aarch64/aarch64-sve-builtins-base.cc > >> index afce52a7e8d..be5d6eae525 100644 > >> --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc > >> +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc > >> @@ -1893,6 +1893,19 @@ public: > >> } > >> }; > >> > >> +class svlsl_impl : public rtx_code_function > >> +{ > >> +public: > >> + CONSTEXPR svlsl_impl () > >> + : rtx_code_function (ASHIFT, ASHIFT) {} > >> + > >> + gimple * > >> + fold (gimple_folder &f) const override > >> + { > >> + return f.fold_const_binary (LSHIFT_EXPR); > >> + } > >> +}; > >> + > > > > Sorry for the slow review. I think we should also make aarch64_const_binop > > return 0 for LSHIFT_EXPR when the shift is out of range, to match the > > behaviour of the underlying instruction. > > > > It looks good otherwise. > > > > Thanks, > > Richard > > >
In the test case: +/* +** s64_x_bit_width: +** mov z[0-9]+\.b, #0 +** ret +*/ +svint64_t s64_x_bit_width (svbool_t pg) { + return svlsl_n_s64_x (pg, svdup_s64 (5), 64); +} + +/* +** s64_x_out_of_range: +** mov z[0-9]+\.b, #0 +** ret +*/ You’ll need to adjust the scan for register zeroing according to the upcoming changes from Tamar as per: https://gcc.gnu.org/pipermail/gcc-patches/2024-October/665669.html The patch LGTM (but Richard should approve as it’s SVE-specific) Thanks, Kyrill