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