diff options
author | Ian Lance Taylor <ian@airs.com> | 2005-11-07 18:52:24 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2005-11-07 18:52:24 +0000 |
commit | a7297856af43a0c5f563ff5a71a4503f9e01f625 (patch) | |
tree | efcd355fd7b8282c5663bd962ea914ec9b2433bd /gcc | |
parent | 6afdc7412b108d0e859476472e1a7ea7454819b3 (diff) | |
download | gcc-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/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 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]; +} |