mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-21 12:19:35 +08:00
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:
parent
e9049f5741
commit
e2a5f96bbf
@ -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.
|
||||
|
@ -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 ();
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user