OSDN Git Service

PR target/18447
authorkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 16 Nov 2004 12:16:52 +0000 (12:16 +0000)
committerkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 16 Nov 2004 12:16:52 +0000 (12:16 +0000)
* config/sh/sh.c (prepare_move_operands): Emit blockage insns
before and after the insns for getting GOT address in non-PIC
TLS_MODEL_INITIAL_EXEC tls sequence when the first scheduling
is enabled.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@90732 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/sh/sh.c

index e966816..521c31b 100644 (file)
@@ -1,3 +1,11 @@
+2004-11-16  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       PR target/18447
+       * config/sh/sh.c (prepare_move_operands): Emit blockage insns
+       before and after the insns for getting GOT address in non-PIC
+       TLS_MODEL_INITIAL_EXEC tls sequence when the first scheduling
+       is enabled.
+
 2004-11-16  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * gcc/cse.c (struct change_cc_mode_args): New structure.
 2004-11-16  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * gcc/cse.c (struct change_cc_mode_args): New structure.
index 699f316..c4c1e16 100644 (file)
@@ -1042,9 +1042,16 @@ prepare_move_operands (rtx operands[], enum machine_mode mode)
            case TLS_MODEL_INITIAL_EXEC:
              if (! flag_pic)
                {
            case TLS_MODEL_INITIAL_EXEC:
              if (! flag_pic)
                {
+                 /* Don't schedule insns for getting GOT address when
+                    the first scheduling is enabled, to avoid spill
+                    failures for R0.  */
+                 if (flag_schedule_insns)
+                   emit_insn (gen_blockage ());
                  emit_insn (gen_GOTaddr2picreg ());
                  emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode,
                                                                 PIC_REG)));
                  emit_insn (gen_GOTaddr2picreg ());
                  emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode,
                                                                 PIC_REG)));
+                 if (flag_schedule_insns)
+                   emit_insn (gen_blockage ());
                }
              tga_op1 = no_new_pseudos ? op0 : gen_reg_rtx (Pmode);
              tmp = gen_sym2GOTTPOFF (op1);
                }
              tga_op1 = no_new_pseudos ? op0 : gen_reg_rtx (Pmode);
              tmp = gen_sym2GOTTPOFF (op1);