diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2015-07-21 19:54:23 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2015-07-21 19:54:23 +0000 |
commit | 6998b929fa954dc791b77011ce7d3252d6f107fe (patch) | |
tree | 1ce16f28ab5396c2dcefab8ca2acdf55f9f9146b /gcc/testsuite | |
parent | f9ffade09c3cc13eb1a199a24517b9b1909c6e80 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr66424.c | 51 |
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; +} + |