aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Tietz <ktietz@redhat.com>2012-02-24 17:31:41 +0100
committerKai Tietz <ktietz@gcc.gnu.org>2012-02-24 17:31:41 +0100
commit15498cfa4ee495c125aaf847a77bf1001505178b (patch)
tree027d1fd870e3186814d86965217207d0b68d3f8c
parent39e73abcec49d4f6320bb2524c60c0c3ea3543df (diff)
downloadgcc-15498cfa4ee495c125aaf847a77bf1001505178b.zip
gcc-15498cfa4ee495c125aaf847a77bf1001505178b.tar.gz
gcc-15498cfa4ee495c125aaf847a77bf1001505178b.tar.bz2
i386.c (ix86_delegitimize_address): Handle UNSPEC_PCREL plus displacement.
* config/i386/i386.c (ix86_delegitimize_address): Handle UNSPEC_PCREL plus displacement. From-SVN: r184560
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c13
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5e0c1e6..121d74a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-23 Kai Tietz <ktietz@redhat.com>
+
+ * config/i386/i386.c (ix86_delegitimize_address): Handle
+ UNSPEC_PCREL plus displacement.
+
2012-02-24 Georg-Johann Lay <avr@gjlay.de>
PR target/52261
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 24dbc49..52fcb61 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -13241,6 +13241,19 @@ ix86_delegitimize_address (rtx x)
if (TARGET_64BIT)
{
+ if (GET_CODE (x) == CONST
+ && GET_CODE (XEXP (x, 0)) == PLUS
+ && GET_MODE (XEXP (x, 0)) == Pmode
+ && CONST_INT_P (XEXP (XEXP (x, 0), 1))
+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == UNSPEC
+ && XINT (XEXP (XEXP (x, 0), 0), 1) == UNSPEC_PCREL)
+ {
+ rtx x2 = XVECEXP (XEXP (XEXP (x, 0), 0), 0, 0);
+ x = gen_rtx_PLUS (Pmode, XEXP (XEXP (x, 0), 1), x2);
+ if (MEM_P (orig_x))
+ x = replace_equiv_address_nv (orig_x, x);
+ return x;
+ }
if (GET_CODE (x) != CONST
|| GET_CODE (XEXP (x, 0)) != UNSPEC
|| (XINT (XEXP (x, 0), 1) != UNSPEC_GOTPCREL