mips.c (machine_function): Remove initialized_mips16_gp_pseudo_p.

gcc/
	* 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.

From-SVN: r166729
This commit is contained in:
Richard Sandiford 2010-11-14 10:29:15 +00:00 committed by Richard Sandiford
parent f085240976
commit 8a7a250d32
2 changed files with 16 additions and 14 deletions

View 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

View 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