From: Roger Sayle Date: Tue, 16 May 2006 04:16:00 +0000 (+0000) Subject: re PR target/26600 (internal compiler error: in push_reload, at reload.c:1303) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d0b898529b9ac6e3c227567a197d12dcf71dc800;p=gcc.git re PR target/26600 (internal compiler error: in push_reload, at reload.c:1303) PR target/26600 * config/i386/i386.c (legitimate_constant_p) : TImode integer constants other than zero are only legitimate on TARGET_64BIT. Only zero vectors are legitimate. (ix86_cannot_force_const_mem): Integral and vector constants can always be put in the constant pool. * gcc.target/i386/pr26600.c: New test case. From-SVN: r113818 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f01eebdae81..b4119862cd5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2006-05-15 Roger Sayle + + PR target/26600 + * config/i386/i386.c (legitimate_constant_p) : TImode + integer constants other than zero are only legitimate on TARGET_64BIT. + Only zero vectors are legitimate. + (ix86_cannot_force_const_mem): Integral and vector constants can + always be put in the constant pool. + 2006-05-16 DJ Delorie * crtstuff.c (__dso_handle): Set section from diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c81dee81152..3ff5abbd66c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5934,6 +5934,18 @@ legitimate_constant_p (rtx x) return false; break; + case CONST_DOUBLE: + if (GET_MODE (x) == TImode + && x != CONST0_RTX (TImode) + && !TARGET_64BIT) + return false; + break; + + case CONST_VECTOR: + if (x == CONST0_RTX (GET_MODE (x))) + return true; + return false; + default: break; } @@ -5949,6 +5961,17 @@ legitimate_constant_p (rtx x) static bool ix86_cannot_force_const_mem (rtx x) { + /* We can always put integral constants and vectors in memory. */ + switch (GET_CODE (x)) + { + case CONST_INT: + case CONST_DOUBLE: + case CONST_VECTOR: + return false; + + default: + break; + } return !legitimate_constant_p (x); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 529a209fa28..9f65c93f1af 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-05-15 Roger Sayle + + PR target/26600 + * gcc.target/i386/pr26600.c: New test case. + 2006-05-15 Mark Mitchell PR c++/27505 diff --git a/gcc/testsuite/gcc.target/i386/pr26600.c b/gcc/testsuite/gcc.target/i386/pr26600.c new file mode 100644 index 00000000000..bbe0663da7e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr26600.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-vectorize -msse2" } */ + +void foo(int *p, int N) +{ + int i; + for (i=0; i<8; ++i, ++p) + { + int j = N+2*(N+p[0]), k = 2*N+p[0]; + p[0] = j+N; + p[5] = j+k; + } +} +