From: Jakub Jelinek Date: Tue, 30 May 2017 07:17:45 +0000 (+0200) Subject: backport: re PR middle-end/77377 (c-c++-common/pr59037.c ICEs with -fpic -msse on... X-Git-Tag: releases/gcc-5.5.0~309 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a21f546767e1ecdf1fb0d4cb359506a3e293921;p=thirdparty%2Fgcc.git backport: re PR middle-end/77377 (c-c++-common/pr59037.c ICEs with -fpic -msse on i686) Backported from mainline 2016-08-30 Jakub Jelinek PR middle-end/77377 * simplify-rtx.c (avoid_constant_pool_reference): For out of bounds constant pool reference return x instead of c. * gcc.target/i386/pr77377.c: New test. From-SVN: r248601 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 42f03d60e4e5..d01b2705e7ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-08-30 Jakub Jelinek + + PR middle-end/77377 + * simplify-rtx.c (avoid_constant_pool_reference): For out of bounds + constant pool reference return x instead of c. + 2016-08-16 Jakub Jelinek PR target/71910 diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index c85ae3e1928b..2982bd21a1ed 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -283,15 +283,14 @@ avoid_constant_pool_reference (rtx x) /* If we're accessing the constant in a different mode than it was originally stored, attempt to fix that up via subreg simplifications. If that fails we have no choice but to return the original memory. */ - if ((offset != 0 || cmode != GET_MODE (x)) - && offset >= 0 && offset < GET_MODE_SIZE (cmode)) + if (offset == 0 && cmode == GET_MODE (x)) + return c; + else if (offset >= 0 && offset < GET_MODE_SIZE (cmode)) { rtx tem = simplify_subreg (GET_MODE (x), c, cmode, offset); if (tem && CONSTANT_P (tem)) return tem; } - else - return c; } return x; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 213ce7f0280d..5b189f210b1f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-08-30 Jakub Jelinek + + PR middle-end/77377 + * gcc.target/i386/pr77377.c: New test. + 2016-08-16 Jakub Jelinek PR target/71910 diff --git a/gcc/testsuite/gcc.target/i386/pr77377.c b/gcc/testsuite/gcc.target/i386/pr77377.c new file mode 100644 index 000000000000..4f7eaa4981b3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr77377.c @@ -0,0 +1,6 @@ +/* PR middle-end/77377 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse" } */ +/* { dg-additional-options "-fpic" { target fpic } } */ + +#include "../../c-c++-common/pr59037.c"