> On 3 Sep 2024, at 10:39, Richard Biener <rguent...@suse.de> wrote:
> 
> External email: Use caution opening links or attachments
> 
> 
> On Tue, 3 Sep 2024, Andrew Pinski wrote:
> 
>> On Fri, Aug 30, 2024 at 4:41 AM Jennifer Schmitz <jschm...@nvidia.com> wrote:
>>> 
>>> This patch implements constant folding of binary operations for SVE 
>>> intrinsics
>>> by calling the constant-folding mechanism of the middle-end for a given
>>> tree_code.
>>> In fold-const.cc, the code for folding vector constants was moved from
>>> const_binop to a new function vector_const_binop. This function takes a
>>> function pointer as argument specifying how to fold the vector elements.
>>> The code for folding operations where the first operand is a vector
>>> constant and the second argument is an integer constant was also moved
>>> into vector_const_binop to fold binary SVE intrinsics where the second
>>> operand is an integer (_n).
>>> In the aarch64 backend, the new function aarch64_const_binop was
>>> created, which - in contrast to int_const_binop - does not treat operations 
>>> as
>>> overflowing. This function is passed as callback to vector_const_binop
>>> during gimple folding in intrinsic implementations.
>>> Because aarch64_const_binop calls poly_int_binop, the latter was made 
>>> public.
>>> 
>>> The patch was bootstrapped and regtested on aarch64-linux-gnu, no 
>>> regression.
>>> OK for mainline?
>> 
>> This broke almost all targets (except for aarch64 and riscv since
>> those are NUM_POLY_INT_COEFFS  != 1 targets).
>> Because the assert in poly_int_binop for NUM_POLY_INT_COEFFS is now
>> before the check for both arg1/arg2 being INTEGER_CST since you moved
>> that from int_const_binop into poly_int_binop.
>> 
>> The obvious patch would move the assert below the check for
>> INTEGER_CSTs. I can't test it right now though.
> 
> I'm going to push that change after it survives stage3 build.
Thanks, Andrew for raising the issue and Richard for fixing it.
Best, Jennifer
> 
> Richard.
> 
>> Thanks,
>> Andrew Pinski
>> 
>>> 
>>> Signed-off-by: Jennifer Schmitz <jschm...@nvidia.com>
>>> 
>>> gcc/
>>>        * config/aarch64/aarch64-sve-builtins.cc (aarch64_const_binop):
>>>        New function to fold binary SVE intrinsics without overflow.
>>>        * config/aarch64/aarch64-sve-builtins.h: Declare aarch64_const_binop.
>>>        * fold-const.h: Declare vector_const_binop.
>>>        * fold-const.cc (const_binop): Remove cases for vector constants.
>>>        (vector_const_binop): New function that folds vector constants
>>>        element-wise.
>>>        (int_const_binop): Remove call to wide_int_binop.
>>>        (poly_int_binop): Add call to wide_int_binop.
>> 
> 
> --
> Richard Biener <rguent...@suse.de>
> SUSE Software Solutions Germany GmbH,
> Frankenstrasse 146, 90461 Nuernberg, Germany;
> GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)


Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to