52 lines
1.4 KiB
Diff
52 lines
1.4 KiB
Diff
2023-03-21 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
PR tree-optimization/109230
|
|
* match.pd (fneg/fadd simplify): Verify also odd permutation indexes.
|
|
|
|
* gcc.dg/pr109230.c: New test.
|
|
|
|
--- gcc/match.pd.jj 2023-02-18 12:38:30.967022708 +0100
|
|
+++ gcc/match.pd 2023-03-21 19:59:40.209634256 +0100
|
|
@@ -8096,6 +8096,7 @@ and,
|
|
scalar_mode inner_mode = GET_MODE_INNER (vec_mode);
|
|
}
|
|
(if (sel.series_p (0, 2, 0, 2)
|
|
+ && sel.series_p (1, 2, nelts + 1, 2)
|
|
&& GET_MODE_2XWIDER_MODE (inner_mode).exists (&wide_elt_mode)
|
|
&& multiple_p (GET_MODE_NUNITS (vec_mode), 2, &wide_nunits)
|
|
&& related_vector_mode (vec_mode, wide_elt_mode,
|
|
--- gcc/testsuite/gcc.dg/pr109230.c.jj 2023-03-21 20:03:52.811979268 +0100
|
|
+++ gcc/testsuite/gcc.dg/pr109230.c 2023-03-21 20:03:35.884224342 +0100
|
|
@@ -0,0 +1,31 @@
|
|
+/* PR tree-optimization/109230 */
|
|
+/* { dg-do run } */
|
|
+/* { dg-options "-O2 -Wno-psabi" } */
|
|
+
|
|
+#if __SIZEOF_FLOAT__ == __SIZEOF_INT__
|
|
+typedef float V __attribute__((vector_size (4 * sizeof (float))));
|
|
+typedef int VI __attribute__((vector_size (4 * sizeof (float))));
|
|
+
|
|
+__attribute__((noipa)) V
|
|
+foo (V x, V y)
|
|
+{
|
|
+ V a = x - y;
|
|
+ V b = y + x;
|
|
+ return __builtin_shuffle (b, a, (VI) { 0, 5, 2, 3 });
|
|
+}
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+ V a = (V) { 1.0f, 2.0f, 3.0f, 4.0f };
|
|
+ V b = (V) { 8.0f, 9.0f, 10.0f, 11.0f };
|
|
+ V c = foo (a, b);
|
|
+ if (c[0] != 9.0f || c[1] != -7.0f || c[2] != 13.0f || c[3] != 15.0f)
|
|
+ __builtin_abort ();
|
|
+}
|
|
+#else
|
|
+int
|
|
+main ()
|
|
+{
|
|
+}
|
|
+#endif
|