diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 57e0f82a744..80e2f86e534 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-11-07 Ian Lance Taylor + + 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 * configure.ac: Enable checking assembler dwarf2 support for bfin diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 26f0299b52b..9a0301f671c 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 fbe39be9c4c..9b09e7963d4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-11-07 Ian Lance Taylor + + PR rtl-optimization/24683 + * gcc.dg/pr24683.c: New test. + 2005-11-07 Uros Bizjak * 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 00000000000..79d3210067c --- /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]; +}