Hello!

Patched gcc creates exactly the same RTL, so the comment does not
apply anymore. Not to mention that gen_movsi should not operate on
DImode values ...

2016-05-11  Uros Bizjak  <ubiz...@gmail.com>

    * config/i386/i386.c (legitimize_pic_address): Use
    copy_to_suggested_reg instead of gen_movsi.

Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Committed to mainline SVN.

Uros.
Index: i386.c
===================================================================
--- i386.c      (revision 236134)
+++ i386.c      (working copy)
@@ -15474,8 +15474,6 @@ legitimize_pic_address (rtx orig, rtx reg)
        {
          new_rtx = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), UNSPEC_PCREL);
          new_rtx = gen_rtx_CONST (Pmode, new_rtx);
-
-         new_rtx = copy_to_suggested_reg (new_rtx, reg, Pmode);
        }
       else if (TARGET_64BIT && ix86_cmodel != CM_LARGE_PIC)
        {
@@ -15484,14 +15482,6 @@ legitimize_pic_address (rtx orig, rtx reg)
          new_rtx = gen_rtx_CONST (Pmode, new_rtx);
          new_rtx = gen_const_mem (Pmode, new_rtx);
          set_mem_alias_set (new_rtx, ix86_GOT_alias_set ());
-
-         if (reg == 0)
-           reg = gen_reg_rtx (Pmode);
-         /* Use directly gen_movsi, otherwise the address is loaded
-            into register for CSE.  We don't want to CSE this addresses,
-            instead we CSE addresses from the GOT table, so skip this.  */
-         emit_insn (gen_movsi (reg, new_rtx));
-         new_rtx = reg;
        }
       else
        {
@@ -15504,9 +15494,9 @@ legitimize_pic_address (rtx orig, rtx reg)
          new_rtx = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new_rtx);
          new_rtx = gen_const_mem (Pmode, new_rtx);
          set_mem_alias_set (new_rtx, ix86_GOT_alias_set ());
+       }
 
-         new_rtx = copy_to_suggested_reg (new_rtx, reg, Pmode);
-       }
+      new_rtx = copy_to_suggested_reg (new_rtx, reg, Pmode);
     }
   else
     {

Reply via email to