https://gcc.gnu.org/g:ec7cc280c10c8ab65d567de94fd1639110060a9b
commit r16-4956-gec7cc280c10c8ab65d567de94fd1639110060a9b Author: Eric Botcazou <[email protected]> Date: Mon Nov 3 10:00:22 2025 +0100 Ada: Add testcase for missed loop vectorization on x86-64/Windows It has been fixed by swapping operands during SLP discovery. gcc/testsuite/ * gnat.dg/vect19.ads, gnat.dg/vect19.adb: New test. * gnat.dg/vect19_pkg.ads, gnat.dg/vect19_pkg.adb: New helper. Diff: --- gcc/testsuite/gnat.dg/vect19.adb | 17 +++++++++++++++++ gcc/testsuite/gnat.dg/vect19.ads | 7 +++++++ gcc/testsuite/gnat.dg/vect19_pkg.adb | 12 ++++++++++++ gcc/testsuite/gnat.dg/vect19_pkg.ads | 9 +++++++++ 4 files changed, 45 insertions(+) diff --git a/gcc/testsuite/gnat.dg/vect19.adb b/gcc/testsuite/gnat.dg/vect19.adb new file mode 100644 index 000000000000..af6f7e618e44 --- /dev/null +++ b/gcc/testsuite/gnat.dg/vect19.adb @@ -0,0 +1,17 @@ +-- { dg-do compile { target i?86-*-* x86_64-*-* } } +-- { dg-options "-O3 -msse2 -gnatn -fno-tree-slp-vectorize -fdump-tree-vect-details" } + +package body Vect19 is + + function NSum (X : Arr; N : Positive) return Arr is + Ret : Arr := X; + begin + for I in 1 .. N loop + Ret := Sum (Ret, X); + end loop; + return Ret; + end; + +end Vect19; + +-- { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } diff --git a/gcc/testsuite/gnat.dg/vect19.ads b/gcc/testsuite/gnat.dg/vect19.ads new file mode 100644 index 000000000000..475f8d469abf --- /dev/null +++ b/gcc/testsuite/gnat.dg/vect19.ads @@ -0,0 +1,7 @@ +with Vect19_Pkg; use Vect19_Pkg; + +package Vect19 is + + function NSum (X : Arr; N : Positive) return Arr; + +end Vect19; diff --git a/gcc/testsuite/gnat.dg/vect19_pkg.adb b/gcc/testsuite/gnat.dg/vect19_pkg.adb new file mode 100644 index 000000000000..4c3b999317af --- /dev/null +++ b/gcc/testsuite/gnat.dg/vect19_pkg.adb @@ -0,0 +1,12 @@ +package body Vect19_Pkg is + + function Sum (X : Arr; Y : Arr) return Arr is + Result : Arr; + begin + for I in X'Range loop + Result(I) := X(I) + Y(I); + end loop; + return Result; + end; + +end Vect19_Pkg; diff --git a/gcc/testsuite/gnat.dg/vect19_pkg.ads b/gcc/testsuite/gnat.dg/vect19_pkg.ads new file mode 100644 index 000000000000..accd8af5dbf9 --- /dev/null +++ b/gcc/testsuite/gnat.dg/vect19_pkg.ads @@ -0,0 +1,9 @@ +package Vect19_Pkg is + + type Arr is array (1 .. 4) of Float; + for Arr'Alignment use 16; + + function Sum (X : Arr; Y : Arr) return Arr; + pragma Inline (Sum); + +end Vect19_Pkg;
