integrate.c (expand_inline_function): Don't put a virtual register into the reg map.

* integrate.c (expand_inline_function): Don't put a virtual
	register into the reg map.

	* function.c (fixup_var_refs_1): If force_operand didn't put
	the address into the target, move it there.

From-SVN: r38694
This commit is contained in:
J"orn Rennecke 2001-01-04 23:28:00 +00:00 committed by Joern Rennecke
parent e9049f5741
commit e2a5f96bbf
3 changed files with 21 additions and 2 deletions

View File

@ -1,3 +1,11 @@
Thu Jan 4 21:09:47 2001 J"orn Rennecke <amylaar@redhat.com>
* integrate.c (expand_inline_function): Don't put a virtual
register into the reg map.
* function.c (fixup_var_refs_1): If force_operand didn't put
the address into the target, move it there.
2001-01-04 Mark Mitchell <mark@codesourcery.com>
Special-case tree_decl/tree_list allocations.

View File

@ -1916,7 +1916,9 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
/* That failed. Fall back on force_operand and hope. */
start_sequence ();
force_operand (sub, y);
sub = force_operand (sub, y);
if (sub != y)
emit_insn (gen_move_insn (y, sub));
seq = gen_sequence ();
end_sequence ();
}

View File

@ -1,6 +1,6 @@
/* Procedure integration for GNU CC.
Copyright (C) 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000 Free Software Foundation, Inc.
1999, 2000, 2001 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@ -989,6 +989,15 @@ expand_inline_function (fndecl, parms, target, ignore, type,
{
temp = force_operand (structure_value_addr, NULL_RTX);
temp = force_reg (Pmode, temp);
/* A virtual register might be invalid in an insn, because
it can cause trouble in reload. Since we don't have access
to the expanders at map translation time, make sure we have
a proper register now.
If a virtual register is actually valid, cse or combine
can put it into the mapped insns. */
if (REGNO (temp) >= FIRST_VIRTUAL_REGISTER
&& REGNO (temp) <= LAST_VIRTUAL_REGISTER)
temp = copy_to_mode_reg (Pmode, temp);
map->reg_map[REGNO (XEXP (loc, 0))] = temp;
if (CONSTANT_P (structure_value_addr)