aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/pr92618.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-11-22 19:17:04 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-11-22 19:17:04 +0100
commit204b0bebee5343b5bd07e2a7be6fd74d6698b937 (patch)
tree052293e4a3a5094dff1140f32ce16b304bf224ef /gcc/testsuite/gcc.c-torture/compile/pr92618.c
parent54aa6b58fe2fe73bbe67e0485777e0c410a18673 (diff)
downloadgcc-204b0bebee5343b5bd07e2a7be6fd74d6698b937.zip
gcc-204b0bebee5343b5bd07e2a7be6fd74d6698b937.tar.gz
gcc-204b0bebee5343b5bd07e2a7be6fd74d6698b937.tar.bz2
re PR tree-optimization/92618 (error: type mismatch in binary expression in reassoc since r273490)
PR tree-optimization/92618 * tree-ssa-reassoc.c (v_info): Change from auto_vec to a struct containing the auto_vec and a tree. (undistribute_bitref_for_vector): Handle the case when element type of vec is not the same as type of the BIT_FIELD_REF. Formatting fixes. * gcc.c-torture/compile/pr92618.c: New test. * gcc.c-torture/execute/pr92618.c: New test. From-SVN: r278626
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/compile/pr92618.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr92618.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr92618.c b/gcc/testsuite/gcc.c-torture/compile/pr92618.c
new file mode 100644
index 0000000..b2a2eea
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr92618.c
@@ -0,0 +1,67 @@
+/* PR tree-optimization/92618 */
+
+typedef long long __m128i __attribute__((__may_alias__, __vector_size__(2 * sizeof (long long))));
+typedef long long __m256i __attribute__((__may_alias__, __vector_size__(4 * sizeof (long long))));
+typedef long long __m512i __attribute__((__may_alias__, __vector_size__(8 * sizeof (long long))));
+
+double a[32];
+unsigned long long b[32];
+__m128i bar (void);
+__m256i qux (void);
+__m512i corge (void);
+
+void
+foo (unsigned long long *x)
+{
+ __m128i c = bar ();
+ __m128i d = bar ();
+ __m256i e = qux ();
+ __m256i f = qux ();
+ __m256i g = qux ();
+ __m512i h = corge ();
+ __m512i i = corge ();
+ *(__m128i *) &b[0] = c;
+ *(__m128i *) &b[2] = d;
+ *(__m256i *) &b[4] = e;
+ *(__m256i *) &b[8] = f;
+ *(__m256i *) &b[12] = g;
+ *(__m512i *) &b[16] = h;
+ *(__m512i *) &b[24] = i;
+ *x = b[0] + b[1] + b[2] + b[3]
+ + b[4] + b[5] + b[6] + b[7]
+ + b[8] + b[9] + b[10] + b[11]
+ + b[12] + b[13] + b[14] + b[15]
+ + b[16] + b[17] + b[18] + b[19]
+ + b[20] + b[21] + b[22] + b[23]
+ + b[24] + b[25] + b[26] + b[27]
+ + b[28] + b[29] + b[30] + b[31];
+}
+
+void
+baz (double *x)
+{
+#if __SIZEOF_LONG_LONG__ == __SIZEOF_DOUBLE__
+ __m128i c = bar ();
+ __m128i d = bar ();
+ __m256i e = qux ();
+ __m256i f = qux ();
+ __m256i g = qux ();
+ __m512i h = corge ();
+ __m512i i = corge ();
+ *(__m128i *) &a[0] = c;
+ *(__m128i *) &a[2] = d;
+ *(__m256i *) &a[4] = e;
+ *(__m256i *) &a[8] = f;
+ *(__m256i *) &a[12] = g;
+ *(__m512i *) &a[16] = h;
+ *(__m512i *) &a[24] = i;
+ *x = a[0] + a[1] + a[2] + a[3]
+ + a[4] + a[5] + a[6] + a[7]
+ + a[8] + a[9] + a[10] + a[11]
+ + a[12] + a[13] + a[14] + a[15]
+ + a[16] + a[17] + a[18] + a[19]
+ + a[20] + a[21] + a[22] + a[23]
+ + a[24] + a[25] + a[26] + a[27]
+ + a[28] + a[29] + a[30] + a[31];
+#endif
+}