aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-07-03 12:47:07 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-07-03 12:47:07 +0000
commitcc49641a7132b66a8fdf26038aa1343e60473eaa (patch)
treed3f05a4e7e4d60636a87fb2192c4979f54ef1703
parentd398999dbe0eca4978beaa82bf84b3e3b0798f0e (diff)
downloadgcc-cc49641a7132b66a8fdf26038aa1343e60473eaa.zip
gcc-cc49641a7132b66a8fdf26038aa1343e60473eaa.tar.gz
gcc-cc49641a7132b66a8fdf26038aa1343e60473eaa.tar.bz2
re PR tree-optimization/91069 (Miscompare of 453.povray since r272843)
2019-07-03 Richard Biener <rguenther@suse.de> PR middle-end/91069 * match.pd (vec_perm -> bit_insert): Fix element read from first vector. * gcc.dg/pr91069.c: New testcase. From-SVN: r273007
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/match.pd2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr91069.c20
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 63160aa..b3695cf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-07-03 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/91069
+ * match.pd (vec_perm -> bit_insert): Fix element read from
+ first vector.
+
2019-07-03 Martin Liska <mliska@suse.cz>
* dbgcnt.def (DEBUG_COUNTER): Add match debug counter.
diff --git a/gcc/match.pd b/gcc/match.pd
index f8e35e9..4a7aa01 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -5520,7 +5520,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
first vector we only can insert the first elt from
the first vector. */
at = 0;
- if ((ins = fold_read_from_vector (cop0, 0)))
+ if ((ins = fold_read_from_vector (cop0, sel[0])))
op0 = op1;
}
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0214647..95db1ad 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-03 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/91069
+ * gcc.dg/pr91069.c: New testcase.
+
2019-07-03 Martin Liska <mliska@suse.cz>
* gcc.dg/tree-prof/val-prof-2.c: Update scanned pattern
diff --git a/gcc/testsuite/gcc.dg/pr91069.c b/gcc/testsuite/gcc.dg/pr91069.c
new file mode 100644
index 0000000..221da30
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr91069.c
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+/* { dg-options "-std=gnu11" } */
+
+typedef double v2df __attribute__((vector_size(16)));
+typedef long v2di __attribute__((vector_size(16)));
+
+void foo (v2df *res, v2df *src)
+{
+ v2df x = *src;
+ *res = __builtin_shuffle ((v2df) { 1.0, 0.0 }, x, (v2di) { 1, 3 });
+}
+
+int main()
+{
+ v2df x = (v2df) { 0.0, 2.0 };
+ foo (&x, &x);
+ if (x[0] != 0.0 || x[1] != 2.0)
+ __builtin_abort ();
+ return 0;
+}