aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2015-07-21 19:54:23 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2015-07-21 19:54:23 +0000
commit6998b929fa954dc791b77011ce7d3252d6f107fe (patch)
tree1ce16f28ab5396c2dcefab8ca2acdf55f9f9146b /gcc/testsuite
parentf9ffade09c3cc13eb1a199a24517b9b1909c6e80 (diff)
downloadgcc-6998b929fa954dc791b77011ce7d3252d6f107fe.zip
gcc-6998b929fa954dc791b77011ce7d3252d6f107fe.tar.gz
gcc-6998b929fa954dc791b77011ce7d3252d6f107fe.tar.bz2
re PR ipa/66424 (wrong code at -O2 and -O3 on x86_64-linux-gnu in 32-bit mode)
2015-07-21 Vladimir Makarov <vmakarov@redhat.com> PR ipa/66424. * lra-remat.c (operand_to_remat): Prevent using insns with input subregs processed separately by IRA. 2015-07-21 Vladimir Makarov <vmakarov@redhat.com> PR ipa/66424. * gcc.target/i386/pr66424.c: New. From-SVN: r226053
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr66424.c51
2 files changed, 56 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 35c7758..16d1caf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-07-21 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR ipa/66424.
+ * gcc.target/i386/pr66424.c: New.
+
2015-07-21 Alex Velenko <Alex.Velenko@arm.com>
* gcc.target/arm/thumb-bitfld1.c (foo): Add explicit return type.
diff --git a/gcc/testsuite/gcc.target/i386/pr66424.c b/gcc/testsuite/gcc.target/i386/pr66424.c
new file mode 100644
index 0000000..f5f5e1e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr66424.c
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-require-effective-target ia32 } */
+int a, b, c, d, e[2], f, l, m, n, o;
+long long g = 1, j;
+static unsigned int h;
+static int i, k;
+
+void
+fn1 (long long p)
+{
+ int q = p;
+ f = 1 ^ e[f ^ (q & 1)];
+}
+
+static void
+fn2 (long long p)
+{
+ f = 1 ^ e[(f ^ 1) & 1];
+ fn1 (p >> 1 & 1);
+ fn1 (p >> 32 & 1);
+}
+
+void
+fn3 (int p)
+{
+ g |= j = p;
+}
+
+int
+main ()
+{
+ e[0] = 1;
+ char p = l;
+ h = --g;
+ i = o = c;
+ m = d ? 1 / d : 0;
+ fn3 (l || 0);
+ b = a;
+ n = j++;
+ k--;
+ fn2 (g);
+ fn2 (h);
+ fn2 (i);
+
+ if (k + f)
+ __builtin_abort ();
+
+ return 0;
+}
+