OSDN Git Service

gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 Nov 2010 10:29:15 +0000 (10:29 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 Nov 2010 10:29:15 +0000 (10:29 +0000)
* config/mips/mips.c (machine_function): Remove
initialized_mips16_gp_pseudo_p.
(mips16_gp_pseudo_reg): Use cfun->machine->mips16_gp_pseudo_rtx to
detect whether a pseudo has already been created.  Unconditionally
create a new one if not.
(mips_pic_base_register): Only call mips16_gp_pseudo_reg when
expanding to rtl.  Create a new pseudo otherwise, if allowed.

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

gcc/ChangeLog
gcc/config/mips/mips.c

index 44e051f..d1aef39 100644 (file)
@@ -1,3 +1,13 @@
+2010-11-14  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * config/mips/mips.c (machine_function): Remove
+       initialized_mips16_gp_pseudo_p.
+       (mips16_gp_pseudo_reg): Use cfun->machine->mips16_gp_pseudo_rtx to
+       detect whether a pseudo has already been created.  Unconditionally
+       create a new one if not.
+       (mips_pic_base_register): Only call mips16_gp_pseudo_reg when
+       expanding to rtl.  Create a new pseudo otherwise, if allowed.
+
 2010-11-13  Richard Earnshaw  <rearnsha@arm.com>
 
        PR target/43440
index 242cc27..6e7d500 100644 (file)
@@ -374,10 +374,6 @@ struct GTY(())  machine_function {
      split_insns pass; see mips_must_initialize_gp_p () for details.  */
   bool must_restore_gp_when_clobbered_p;
 
-  /* True if we have emitted an instruction to initialize
-     mips16_gp_pseudo_rtx.  */
-  bool initialized_mips16_gp_pseudo_p;
-
   /* True if this is an interrupt handler.  */
   bool interrupt_handler_p;
 
@@ -2654,16 +2650,11 @@ static rtx
 mips16_gp_pseudo_reg (void)
 {
   if (cfun->machine->mips16_gp_pseudo_rtx == NULL_RTX)
-    cfun->machine->mips16_gp_pseudo_rtx = gen_reg_rtx (Pmode);
-
-  /* Don't emit an instruction to initialize the pseudo register if
-     we are being called from the tree optimizers' cost-calculation
-     routines.  */
-  if (!cfun->machine->initialized_mips16_gp_pseudo_p
-      && (current_ir_type () != IR_GIMPLE || currently_expanding_to_rtl))
     {
       rtx insn, scan;
 
+      cfun->machine->mips16_gp_pseudo_rtx = gen_reg_rtx (Pmode);
+
       push_topmost_sequence ();
 
       scan = get_insns ();
@@ -2674,8 +2665,6 @@ mips16_gp_pseudo_reg (void)
       emit_insn_after (insn, scan);
 
       pop_topmost_sequence ();
-
-      cfun->machine->initialized_mips16_gp_pseudo_p = true;
     }
 
   return cfun->machine->mips16_gp_pseudo_rtx;
@@ -2690,9 +2679,12 @@ mips_pic_base_register (rtx temp)
   if (!TARGET_MIPS16)
     return pic_offset_table_rtx;
 
-  if (can_create_pseudo_p ())
+  if (currently_expanding_to_rtl)
     return mips16_gp_pseudo_reg ();
 
+  if (can_create_pseudo_p ())
+    temp = gen_reg_rtx (Pmode);
+
   if (TARGET_USE_GOT)
     /* The first post-reload split exposes all references to $gp
        (both uses and definitions).  All references must remain