diff options
author | Richard Biener <rguenther@suse.de> | 2023-12-13 14:23:31 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-12-14 16:08:20 +0100 |
commit | d782ec8362eadc3169286eb1e39c631effd02323 (patch) | |
tree | bc36d1c6aef63cb61c3b0541965a4156f3abfdec /gcc/testsuite | |
parent | 8cf5afba5dc482fe7063654720bfb0c45354998c (diff) | |
download | gcc-d782ec8362eadc3169286eb1e39c631effd02323.zip gcc-d782ec8362eadc3169286eb1e39c631effd02323.tar.gz gcc-d782ec8362eadc3169286eb1e39c631effd02323.tar.bz2 |
tree-optimization/112793 - SLP of constant/external code-generated twice
The following makes the attempt at code-generating a constant/external
SLP node twice well-formed as that can happen when partitioning BB
vectorization attempts where we keep constants/externals unpartitioned.
PR tree-optimization/112793
* tree-vect-slp.cc (vect_schedule_slp_node): Already
code-generated constant/external nodes are OK.
* g++.dg/vect/pr112793.cc: New testcase.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/g++.dg/vect/pr112793.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/vect/pr112793.cc b/gcc/testsuite/g++.dg/vect/pr112793.cc new file mode 100644 index 0000000..258d7c1 --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr112793.cc @@ -0,0 +1,32 @@ +// { dg-do compile } +// { dg-require-effective-target c++11 } +// { dg-additional-options "-march=znver2" { target x86_64-*-* i?86-*-* } } + +typedef double T; +T c, s; +T a[16]; +struct Matrix4 { + Matrix4(){} + Matrix4(T e, T f, T i, T j) { + r[1] = r[4] = e; + r[5] = f; + r[8] = i; + r[9] = j; + } + Matrix4 operator*(Matrix4 a) { + return Matrix4( + r[0] * a.r[4] + r[4] + r[15] + r[6], + r[1] * a.r[4] + 1 + 2 + 3, r[0] * r[8] + 1 + 2 + 3, + r[1] * r[8] + r[1] + r[14] + r[2] * r[3]); + } + T r[16] = {}; +}; +Matrix4 t1, t2; +Matrix4 tt; +Matrix4 getRotAltAzToEquatorial() +{ + t2.r[4] = 0; + t1.r[1] = -s; + t1.r[8] = 0; + return t1 * t2; +} |