On 7/17/2026 10:12 AM, Konstantinos Eleftheriou wrote:
From: Philipp Tomsich <[email protected]>

The (convert (abs (convert@1 @0))) -> (abs @0) rule added by
r17-2276-ge2c4fc6b1cff evaluates TYPE_PRECISION on the outer and inner types
after only types_match, so a vectorized abs-of-narrowed chain like

   vect_1 = (vector(2) int) vect_0;
   vect_2 = ABS_EXPR <vect_1>;
   vect_3 = (vector(2) signed long) vect_2;

trips the vector_type tree check when gimple_simplify visits the
outer conversion (ICE during fre). Use element_precision
so the guard is evaluable for vectors, and require target support
for ABS on the narrow vector type before enabling the transform
there.

Bootstrapped and regtested on aarch64-unknown-linux-gnu, x86_64-pc-linux-gnu
and riscv64-unknown-linux-gnu.

        PR tree-optimization/126291

gcc/ChangeLog:

        * match.pd ((trunc)abs (extend x) -> abs (x)): Use
        element_precision. Require target ABS support for the
        vector case.

gcc/testsuite/ChangeLog:

        * gcc.target/aarch64/pr126291.c: New test.
This is OK and more complete than the hack I did.   It's unclear to me if other pattern which optimizes down to an IFN_COPYSIGN needs the same handling for the element precision.  If so, that's pre-approved as well.

Jeff

Reply via email to