aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2011-07-21 22:36:11 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2011-07-21 15:36:11 -0700
commit628c1ac95a382b5f53a8a26a8757d9df4cad7684 (patch)
treee057064fc22cbc5f50acaba03e7fbf4318fc522d /gcc
parent08a8923efc660d4f4cad7885771db91a305f32db (diff)
downloadgcc-628c1ac95a382b5f53a8a26a8757d9df4cad7684.zip
gcc-628c1ac95a382b5f53a8a26a8757d9df4cad7684.tar.gz
gcc-628c1ac95a382b5f53a8a26a8757d9df4cad7684.tar.bz2
Convert to Pmode if needed in ix86_legitimize_address.
2011-07-21 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (ix86_legitimize_address): Convert to Pmode if needed. From-SVN: r176595
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf52904..3daa072 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2011-07-21 H.J. Lu <hongjiu.lu@intel.com>
+ * config/i386/i386.c (ix86_legitimize_address): Convert to
+ Pmode if needed.
+
+2011-07-21 H.J. Lu <hongjiu.lu@intel.com>
+
* config/i386/i386.c (function_value_64): Always return pointers
in Pmode.
(ix86_promote_function_mode): New.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 957b51d..f1803c3 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -12644,7 +12644,11 @@ ix86_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
rtx temp = gen_reg_rtx (Pmode);
rtx val = force_operand (XEXP (x, 1), temp);
if (val != temp)
- emit_move_insn (temp, val);
+ {
+ if (GET_MODE (val) != Pmode)
+ val = convert_to_mode (Pmode, val, 1);
+ emit_move_insn (temp, val);
+ }
XEXP (x, 1) = temp;
return x;
@@ -12655,7 +12659,11 @@ ix86_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
rtx temp = gen_reg_rtx (Pmode);
rtx val = force_operand (XEXP (x, 0), temp);
if (val != temp)
- emit_move_insn (temp, val);
+ {
+ if (GET_MODE (val) != Pmode)
+ val = convert_to_mode (Pmode, val, 1);
+ emit_move_insn (temp, val);
+ }
XEXP (x, 0) = temp;
return x;