aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2005-11-07 18:52:24 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2005-11-07 18:52:24 +0000
commita7297856af43a0c5f563ff5a71a4503f9e01f625 (patch)
treeefcd355fd7b8282c5663bd962ea914ec9b2433bd /gcc
parent6afdc7412b108d0e859476472e1a7ea7454819b3 (diff)
downloadgcc-a7297856af43a0c5f563ff5a71a4503f9e01f625.zip
gcc-a7297856af43a0c5f563ff5a71a4503f9e01f625.tar.gz
gcc-a7297856af43a0c5f563ff5a71a4503f9e01f625.tar.bz2
re PR rtl-optimization/24683 (ICE in in extract_insn, at recog.c:2084)
./: PR rtl-optimization/24683 * config/i386/i386.c (legitimize_pic_address): If constant operand to PLUS is too large, put it in a register. testsuite/: PR rtl-optimization/24683 * gcc.dg/pr24683.c: New test. From-SVN: r106601
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr24683.c11
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 57e0f82a..80e2f86 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-07 Ian Lance Taylor <ian@airs.com>
+
+ PR rtl-optimization/24683
+ * config/i386/i386.c (legitimize_pic_address): If constant operand
+ to PLUS is too large, put it in a register.
+
2005-11-07 Jie Zhang <jie.zhang@analog.com>
* configure.ac: Enable checking assembler dwarf2 support for bfin
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 26f0299..9a0301f 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6178,7 +6178,11 @@ legitimize_pic_address (rtx orig, rtx reg)
{
if (INTVAL (op1) < -16*1024*1024
|| INTVAL (op1) >= 16*1024*1024)
- new = gen_rtx_PLUS (Pmode, force_reg (Pmode, op0), op1);
+ {
+ if (!x86_64_immediate_operand (op1, Pmode))
+ op1 = force_reg (Pmode, op1);
+ new = gen_rtx_PLUS (Pmode, force_reg (Pmode, op0), op1);
+ }
}
}
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fbe39be..9b09e79 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-07 Ian Lance Taylor <ian@airs.com>
+
+ PR rtl-optimization/24683
+ * gcc.dg/pr24683.c: New test.
+
2005-11-07 Uros Bizjak <uros@kss-loka.si>
* gcc.dg/vect/pr24225.c: Add cleanup-coverage-files.
diff --git a/gcc/testsuite/gcc.dg/pr24683.c b/gcc/testsuite/gcc.dg/pr24683.c
new file mode 100644
index 0000000..79d3210
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr24683.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -fPIC" } */
+int *block;
+void final(unsigned int j)
+{
+ unsigned int i;
+ unsigned char *data = (unsigned char *)"\0";
+ for (i = 0; i < 8; i++)
+ for (; j + 63 < 1; j += 64)
+ block = (int *) &data[j];
+}