From 2b331f9a4661e87cd9872fcd105ac4ae59653a4c Mon Sep 17 00:00:00 2001 From: hubicka Date: Mon, 31 Oct 2005 18:42:23 +0000 Subject: [PATCH] PR target/20928 * i386.c (legitimize_pic_address): Deal with large immediates. * gcc.c-torture/compile/pr20928.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106284 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 3 +++ gcc/config/i386/i386.c | 13 ++++++++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr20928.c | 10 ++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr20928.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b31e67c370c..7f69964ea4c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2005-10-31 Jan Hubicka + PR target/20928 + * i386.c (legitimize_pic_address): Deal with large immediates. + PR profile/20815 * coverage.c (coverage_checksum_string): Fix code to stip random seeds from symbol names while computing checkup. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 5fe9e3f0062..7b3f8887996 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -6016,7 +6016,18 @@ legitimize_pic_address (rtx orig, rtx reg) } else { - if (GET_CODE (addr) == CONST) + if (GET_CODE (addr) == CONST_INT + && !x86_64_immediate_operand (addr, VOIDmode)) + { + if (reg) + { + emit_move_insn (reg, addr); + new = reg; + } + else + new = force_reg (Pmode, addr); + } + else if (GET_CODE (addr) == CONST) { addr = XEXP (addr, 0); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7b0e3e7064e..78bee8652c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-10-31 Jan Hubicka + + PR target/20928 + * gcc.c-torture/compile/pr20928.c: New test. + 2005-10-31 Andrew Pinski PR middle-end/23492 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr20928.c b/gcc/testsuite/gcc.c-torture/compile/pr20928.c new file mode 100644 index 00000000000..ea8be9e8757 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr20928.c @@ -0,0 +1,10 @@ +extern struct bar_t bar; +void *a; +void +foo (void) +{ + void **p = a; + do { + *p++ = ((unsigned char *) &bar + ((unsigned long int) 1L << 31)); + } while (p); +} -- 2.11.4.GIT