diff options
author | Richard Biener <rguenther@suse.de> | 2024-02-13 13:39:29 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2024-02-13 13:42:02 +0100 |
commit | 4a1cd5560b9b545eb848eb1d1e06d345fb606f76 (patch) | |
tree | 0f956c677cece47be1a723b8caebb8cf654138c4 /gcc | |
parent | 94225dfb5623725fa519eac69338f7a632a509ae (diff) | |
download | gcc-4a1cd5560b9b545eb848eb1d1e06d345fb606f76.zip gcc-4a1cd5560b9b545eb848eb1d1e06d345fb606f76.tar.gz gcc-4a1cd5560b9b545eb848eb1d1e06d345fb606f76.tar.bz2 |
tree-optimization/113896 - testcase for fixed PR
The SLP permute optimization rewrite fixed this.
PR tree-optimization/113896
* g++.dg/torture/pr113896.C: New testcase.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr113896.C | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/torture/pr113896.C b/gcc/testsuite/g++.dg/torture/pr113896.C new file mode 100644 index 0000000..534c1c2 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr113896.C @@ -0,0 +1,35 @@ +// { dg-do run } +// { dg-additional-options "-ffast-math" } + +double a1 = 1.0; +double a2 = 1.0; + +void __attribute__((noipa)) +f(double K[2], bool b) +{ + double A[] = { + b ? a1 : a2, + 0, + 0, + 0 + }; + + double sum{}; + for(double a : A) sum += a; + for(double& a : A) a /= sum; + + if (b) { + K[0] = A[0]; // 1.0 + K[1] = A[1]; // 0.0 + } else { + K[0] = A[0] + A[1]; + } +} + +int main() +{ + double K[2]{}; + f(K, true); + if (K[0] != 1. || K[1] != 0.) + __builtin_abort (); +} |