Convert to Pmode if needed in ix86_legitimize_address.
authorH.J. Lu <hongjiu.lu@intel.com>
Thu, 21 Jul 2011 22:36:11 +0000 (22:36 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Thu, 21 Jul 2011 22:36:11 +0000 (15:36 -0700)
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

gcc/ChangeLog
gcc/config/i386/i386.c

index cf529042bf2beb7b81aa0a8ebe3d6b36d716e77d..3daa0727f163afe182fa9f89cfd90b4a776e9415 100644 (file)
@@ -1,3 +1,8 @@
+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
index 957b51d6fc8a8d1ee844a7d77a30ed95fd449afc..f1803c39a3c78c7fde797698a7a3f8f955b6ab0d 100644 (file)
@@ -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;