diff options
| author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-07 18:52:24 +0000 |
|---|---|---|
| committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-07 18:52:24 +0000 |
| commit | 11d2465fb0b48073b16bcba459e9e185b2b3b1da (patch) | |
| tree | efcd355fd7b8282c5663bd962ea914ec9b2433bd | |
| parent | 1c69223fe7f585a0000291062d484f598d0a93bd (diff) | |
| download | ppe42-gcc-11d2465fb0b48073b16bcba459e9e185b2b3b1da.tar.gz ppe42-gcc-11d2465fb0b48073b16bcba459e9e185b2b3b1da.zip | |
./:
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106601 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/config/i386/i386.c | 6 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.dg/pr24683.c | 11 |
4 files changed, 27 insertions, 1 deletions
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 <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 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 <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 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]; +} |

