Commit 718fe406 by Kazu Hirata Committed by Jeff Law

* cse.c: Fix formatting.

From-SVN: r35676
parent ddc356e8
2000-08-13 Kazu Hirata <kazu@hxi.com> 2000-08-13 Kazu Hirata <kazu@hxi.com>
* function.c: Fix formatting.
* cse.c: Fix formatting. * cse.c: Fix formatting.
2000-08-13 Geoff Keating <geoffk@cygnus.com> 2000-08-13 Geoff Keating <geoffk@cygnus.com>
......
...@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to ...@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
/* This file handles the generation of rtl code from tree structure /* This file handles the generation of rtl code from tree structure
at the level of the function as a whole. at the level of the function as a whole.
It creates the rtl expressions for parameters and auto variables It creates the rtl expressions for parameters and auto variables
...@@ -108,7 +107,7 @@ Boston, MA 02111-1307, USA. */ ...@@ -108,7 +107,7 @@ Boston, MA 02111-1307, USA. */
/* Nonzero if function being compiled doesn't contain any calls /* Nonzero if function being compiled doesn't contain any calls
(ignoring the prologue and epilogue). This is set prior to (ignoring the prologue and epilogue). This is set prior to
local register allocation and is valid for the remaining local register allocation and is valid for the remaining
compiler passes. */ compiler passes. */
int current_function_is_leaf; int current_function_is_leaf;
/* Nonzero if function being compiled doesn't contain any instructions /* Nonzero if function being compiled doesn't contain any instructions
...@@ -118,7 +117,7 @@ int current_function_nothrow; ...@@ -118,7 +117,7 @@ int current_function_nothrow;
/* Nonzero if function being compiled doesn't modify the stack pointer /* Nonzero if function being compiled doesn't modify the stack pointer
(ignoring the prologue and epilogue). This is only valid after (ignoring the prologue and epilogue). This is only valid after
life_analysis has run. */ life_analysis has run. */
int current_function_sp_is_unchanging; int current_function_sp_is_unchanging;
/* Nonzero if the function being compiled is a leaf function which only /* Nonzero if the function being compiled is a leaf function which only
...@@ -190,7 +189,7 @@ struct temp_slot ...@@ -190,7 +189,7 @@ struct temp_slot
/* The rtx used to represent the address if not the address of the /* The rtx used to represent the address if not the address of the
slot above. May be an EXPR_LIST if multiple addresses exist. */ slot above. May be an EXPR_LIST if multiple addresses exist. */
rtx address; rtx address;
/* The alignment (in bits) of the slot. */ /* The alignment (in bits) of the slot. */
int align; int align;
/* The size, in units, of the slot. */ /* The size, in units, of the slot. */
HOST_WIDE_INT size; HOST_WIDE_INT size;
...@@ -234,7 +233,7 @@ struct fixup_replacement ...@@ -234,7 +233,7 @@ struct fixup_replacement
rtx new; rtx new;
struct fixup_replacement *next; struct fixup_replacement *next;
}; };
struct insns_for_mem_entry { struct insns_for_mem_entry {
/* The KEY in HE will be a MEM. */ /* The KEY in HE will be a MEM. */
struct hash_entry he; struct hash_entry he;
...@@ -256,7 +255,7 @@ static void put_reg_into_stack PARAMS ((struct function *, rtx, tree, ...@@ -256,7 +255,7 @@ static void put_reg_into_stack PARAMS ((struct function *, rtx, tree,
static void schedule_fixup_var_refs PARAMS ((struct function *, rtx, tree, static void schedule_fixup_var_refs PARAMS ((struct function *, rtx, tree,
enum machine_mode, enum machine_mode,
struct hash_table *)); struct hash_table *));
static void fixup_var_refs PARAMS ((rtx, enum machine_mode, int, static void fixup_var_refs PARAMS ((rtx, enum machine_mode, int,
struct hash_table *)); struct hash_table *));
static struct fixup_replacement static struct fixup_replacement
*find_fixup_replacement PARAMS ((struct fixup_replacement **, rtx)); *find_fixup_replacement PARAMS ((struct fixup_replacement **, rtx));
...@@ -293,7 +292,7 @@ static int contains PARAMS ((rtx, varray_type)); ...@@ -293,7 +292,7 @@ static int contains PARAMS ((rtx, varray_type));
static void emit_return_into_block PARAMS ((basic_block, rtx)); static void emit_return_into_block PARAMS ((basic_block, rtx));
#endif #endif
static void put_addressof_into_stack PARAMS ((rtx, struct hash_table *)); static void put_addressof_into_stack PARAMS ((rtx, struct hash_table *));
static boolean purge_addressof_1 PARAMS ((rtx *, rtx, int, int, static boolean purge_addressof_1 PARAMS ((rtx *, rtx, int, int,
struct hash_table *)); struct hash_table *));
static int is_addressof PARAMS ((rtx *, void *)); static int is_addressof PARAMS ((rtx *, void *));
static struct hash_entry *insns_for_mem_newfunc PARAMS ((struct hash_entry *, static struct hash_entry *insns_for_mem_newfunc PARAMS ((struct hash_entry *,
...@@ -492,7 +491,6 @@ free_after_compilation (f) ...@@ -492,7 +491,6 @@ free_after_compilation (f)
f->inl_last_parm_insn = NULL; f->inl_last_parm_insn = NULL;
f->epilogue_delay_list = NULL; f->epilogue_delay_list = NULL;
} }
/* Allocate fixed slots in the stack frame of the current function. */ /* Allocate fixed slots in the stack frame of the current function. */
...@@ -523,7 +521,7 @@ get_frame_size () ...@@ -523,7 +521,7 @@ get_frame_size ()
/* Allocate a stack slot of SIZE bytes and return a MEM rtx for it /* Allocate a stack slot of SIZE bytes and return a MEM rtx for it
with machine mode MODE. with machine mode MODE.
ALIGN controls the amount of alignment for the address of the slot: ALIGN controls the amount of alignment for the address of the slot:
0 means according to MODE, 0 means according to MODE,
-1 means use BIGGEST_ALIGNMENT and round size to multiple of that, -1 means use BIGGEST_ALIGNMENT and round size to multiple of that,
...@@ -557,7 +555,7 @@ assign_stack_local_1 (mode, size, align, function) ...@@ -557,7 +555,7 @@ assign_stack_local_1 (mode, size, align, function)
if (mode == BLKmode) if (mode == BLKmode)
alignment = BIGGEST_ALIGNMENT; alignment = BIGGEST_ALIGNMENT;
else else
alignment = GET_MODE_ALIGNMENT (mode); alignment = GET_MODE_ALIGNMENT (mode);
/* Allow the target to (possibly) increase the alignment of this /* Allow the target to (possibly) increase the alignment of this
stack slot. */ stack slot. */
...@@ -652,7 +650,7 @@ assign_stack_local (mode, size, align) ...@@ -652,7 +650,7 @@ assign_stack_local (mode, size, align)
with this flag. KEEP is 2 if we allocate a longer term temporary, with this flag. KEEP is 2 if we allocate a longer term temporary,
whose lifetime is controlled by CLEANUP_POINT_EXPRs. KEEP is 3 whose lifetime is controlled by CLEANUP_POINT_EXPRs. KEEP is 3
if we are to allocate something at an inner level to be treated as if we are to allocate something at an inner level to be treated as
a variable in the block (e.g., a SAVE_EXPR). a variable in the block (e.g., a SAVE_EXPR).
TYPE is the type that will be used for the stack slot. */ TYPE is the type that will be used for the stack slot. */
...@@ -677,7 +675,7 @@ assign_stack_temp_for_type (mode, size, keep, type) ...@@ -677,7 +675,7 @@ assign_stack_temp_for_type (mode, size, keep, type)
alias set for the memory. */ alias set for the memory. */
if (type) if (type)
alias_set = get_alias_set (type); alias_set = get_alias_set (type);
else else
alias_set = 0; alias_set = 0;
if (mode == BLKmode) if (mode == BLKmode)
...@@ -748,7 +746,7 @@ assign_stack_temp_for_type (mode, size, keep, type) ...@@ -748,7 +746,7 @@ assign_stack_temp_for_type (mode, size, keep, type)
p = best_p; p = best_p;
} }
/* If we still didn't find one, make a new temporary. */ /* If we still didn't find one, make a new temporary. */
if (p == 0) if (p == 0)
{ {
...@@ -913,7 +911,7 @@ combine_temp_slots () ...@@ -913,7 +911,7 @@ combine_temp_slots ()
if (flag_strict_aliasing) if (flag_strict_aliasing)
return; return;
/* If there are a lot of temp slots, don't do anything unless /* If there are a lot of temp slots, don't do anything unless
high levels of optimizaton. */ high levels of optimizaton. */
if (! flag_expensive_optimizations) if (! flag_expensive_optimizations)
for (p = temp_slots, num_slots = 0; p; p = p->next, num_slots++) for (p = temp_slots, num_slots = 0; p; p = p->next, num_slots++)
...@@ -1008,7 +1006,7 @@ find_temp_slot_from_address (x) ...@@ -1008,7 +1006,7 @@ find_temp_slot_from_address (x)
return 0; return 0;
} }
/* Indicate that NEW is an alternate way of referring to the temp slot /* Indicate that NEW is an alternate way of referring to the temp slot
that previously was known by OLD. */ that previously was known by OLD. */
...@@ -1054,7 +1052,7 @@ update_temp_slot_address (old, new) ...@@ -1054,7 +1052,7 @@ update_temp_slot_address (old, new)
return; return;
} }
/* Otherwise add an alias for the temp's address. */ /* Otherwise add an alias for the temp's address. */
else if (p->address == 0) else if (p->address == 0)
p->address = new; p->address = new;
else else
...@@ -1449,7 +1447,7 @@ put_var_into_stack (decl) ...@@ -1449,7 +1447,7 @@ put_var_into_stack (decl)
} }
else else
return; return;
if (current_function_check_memory_usage) if (current_function_check_memory_usage)
emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
XEXP (reg, 0), Pmode, XEXP (reg, 0), Pmode,
...@@ -1556,7 +1554,7 @@ fixup_var_refs (var, promoted_mode, unsignedp, ht) ...@@ -1556,7 +1554,7 @@ fixup_var_refs (var, promoted_mode, unsignedp, ht)
rtx insn; rtx insn;
/* Must scan all insns for stack-refs that exceed the limit. */ /* Must scan all insns for stack-refs that exceed the limit. */
fixup_var_refs_insns (var, promoted_mode, unsignedp, first_insn, fixup_var_refs_insns (var, promoted_mode, unsignedp, first_insn,
stack == 0, ht); stack == 0, ht);
/* If there's a hash table, it must record all uses of VAR. */ /* If there's a hash table, it must record all uses of VAR. */
if (ht) if (ht)
...@@ -1581,16 +1579,14 @@ fixup_var_refs (var, promoted_mode, unsignedp, ht) ...@@ -1581,16 +1579,14 @@ fixup_var_refs (var, promoted_mode, unsignedp, ht)
if (seq != const0_rtx && seq != 0) if (seq != const0_rtx && seq != 0)
{ {
push_to_sequence (seq); push_to_sequence (seq);
fixup_var_refs_insns (var, promoted_mode, unsignedp, seq, 0, fixup_var_refs_insns (var, promoted_mode, unsignedp, seq, 0, 0);
0);
end_sequence (); end_sequence ();
} }
} }
/* Scan the catch clauses for exception handling too. */ /* Scan the catch clauses for exception handling too. */
push_to_full_sequence (catch_clauses, catch_clauses_last); push_to_full_sequence (catch_clauses, catch_clauses_last);
fixup_var_refs_insns (var, promoted_mode, unsignedp, catch_clauses, fixup_var_refs_insns (var, promoted_mode, unsignedp, catch_clauses, 0, 0);
0, 0);
end_full_sequence (&catch_clauses, &catch_clauses_last); end_full_sequence (&catch_clauses, &catch_clauses_last);
/* Scan sequences saved in CALL_PLACEHOLDERS too. */ /* Scan sequences saved in CALL_PLACEHOLDERS too. */
...@@ -1666,7 +1662,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht) ...@@ -1666,7 +1662,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht)
to walk the entire instruction chain. */ to walk the entire instruction chain. */
if (ht) if (ht)
{ {
insn_list = ((struct insns_for_mem_entry *) insn_list = ((struct insns_for_mem_entry *)
hash_lookup (ht, var, /*create=*/0, /*copy=*/0))->insns; hash_lookup (ht, var, /*create=*/0, /*copy=*/0))->insns;
insn = insn_list ? XEXP (insn_list, 0) : NULL_RTX; insn = insn_list ? XEXP (insn_list, 0) : NULL_RTX;
insn_list = XEXP (insn_list, 1); insn_list = XEXP (insn_list, 1);
...@@ -1687,7 +1683,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht) ...@@ -1687,7 +1683,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht)
If it has a REG_LIBCALL note, delete the REG_LIBCALL If it has a REG_LIBCALL note, delete the REG_LIBCALL
and REG_RETVAL notes too. */ and REG_RETVAL notes too. */
if (GET_CODE (PATTERN (insn)) == CLOBBER if (GET_CODE (PATTERN (insn)) == CLOBBER
&& (XEXP (PATTERN (insn), 0) == var && (XEXP (PATTERN (insn), 0) == var
|| (GET_CODE (XEXP (PATTERN (insn), 0)) == CONCAT || (GET_CODE (XEXP (PATTERN (insn), 0)) == CONCAT
&& (XEXP (XEXP (PATTERN (insn), 0), 0) == var && (XEXP (XEXP (PATTERN (insn), 0), 0) == var
...@@ -1765,7 +1761,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht) ...@@ -1765,7 +1761,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht)
PATTERN (insn) = replace_rtx (PATTERN (insn), PATTERN (insn) = replace_rtx (PATTERN (insn),
call_dest, temp); call_dest, temp);
} }
if (GET_CODE (insn) == CALL_INSN if (GET_CODE (insn) == CALL_INSN
&& GET_CODE (PATTERN (insn)) == SET) && GET_CODE (PATTERN (insn)) == SET)
call_dest = SET_DEST (PATTERN (insn)); call_dest = SET_DEST (PATTERN (insn));
...@@ -1784,7 +1780,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht) ...@@ -1784,7 +1780,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht)
a list of struct fixup_replacements. If fixup_var_refs_1 a list of struct fixup_replacements. If fixup_var_refs_1
needs to allocate pseudos or replacement MEMs (for SUBREGs), needs to allocate pseudos or replacement MEMs (for SUBREGs),
it will record them in this list. it will record them in this list.
If it allocated a pseudo for any replacement, we copy into If it allocated a pseudo for any replacement, we copy into
it here. */ it here. */
...@@ -1846,7 +1842,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht) ...@@ -1846,7 +1842,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht)
if (GET_CODE (note) != INSN_LIST) if (GET_CODE (note) != INSN_LIST)
XEXP (note, 0) XEXP (note, 0)
= walk_fixup_memory_subreg (XEXP (note, 0), insn, 1); = walk_fixup_memory_subreg (XEXP (note, 0), insn, 1);
note = XEXP (note, 1); note = XEXP (note, 1);
} }
} }
...@@ -1863,7 +1859,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht) ...@@ -1863,7 +1859,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel, ht)
} }
/* VAR is a MEM that used to be a pseudo register with mode PROMOTED_MODE. /* VAR is a MEM that used to be a pseudo register with mode PROMOTED_MODE.
See if the rtx expression at *LOC in INSN needs to be changed. See if the rtx expression at *LOC in INSN needs to be changed.
REPLACEMENTS is a pointer to a list head that starts out zero, but may REPLACEMENTS is a pointer to a list head that starts out zero, but may
contain a list of original rtx's and replacements. If we find that we need contain a list of original rtx's and replacements. If we find that we need
...@@ -1941,7 +1937,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -1941,7 +1937,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
case MEM: case MEM:
if (var == x) if (var == x)
{ {
/* If we already have a replacement, use it. Otherwise, /* If we already have a replacement, use it. Otherwise,
try to fix up this address in case it is invalid. */ try to fix up this address in case it is invalid. */
replacement = find_fixup_replacement (replacements, var); replacement = find_fixup_replacement (replacements, var);
...@@ -1955,7 +1951,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -1955,7 +1951,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
/* Unless we are forcing memory to register or we changed the mode, /* Unless we are forcing memory to register or we changed the mode,
we can leave things the way they are if the insn is valid. */ we can leave things the way they are if the insn is valid. */
INSN_CODE (insn) = -1; INSN_CODE (insn) = -1;
if (! flag_force_mem && GET_MODE (x) == promoted_mode if (! flag_force_mem && GET_MODE (x) == promoted_mode
&& recog_memoized (insn) >= 0) && recog_memoized (insn) >= 0)
...@@ -2093,7 +2089,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -2093,7 +2089,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
return; return;
} }
break; break;
case SUBREG: case SUBREG:
if (SUBREG_REG (x) == var) if (SUBREG_REG (x) == var)
{ {
...@@ -2110,7 +2106,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -2110,7 +2106,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
} }
/* If this SUBREG makes VAR wider, it has become a paradoxical /* If this SUBREG makes VAR wider, it has become a paradoxical
SUBREG with VAR in memory, but these aren't allowed at this SUBREG with VAR in memory, but these aren't allowed at this
stage of the compilation. So load VAR into a pseudo and take stage of the compilation. So load VAR into a pseudo and take
a SUBREG of that pseudo. */ a SUBREG of that pseudo. */
if (GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (var))) if (GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (var)))
...@@ -2132,7 +2128,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -2132,7 +2128,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
*loc = replacement->new; *loc = replacement->new;
return; return;
} }
replacement->new = *loc = fixup_memory_subreg (x, insn, 0); replacement->new = *loc = fixup_memory_subreg (x, insn, 0);
INSN_CODE (insn) = -1; INSN_CODE (insn) = -1;
...@@ -2182,7 +2178,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -2182,7 +2178,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
insn); insn);
break; break;
} }
{ {
rtx dest = SET_DEST (x); rtx dest = SET_DEST (x);
rtx src = SET_SRC (x); rtx src = SET_SRC (x);
...@@ -2201,7 +2197,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -2201,7 +2197,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
/* If VAR does not appear at the top level of the SET /* If VAR does not appear at the top level of the SET
just scan the lower levels of the tree. */ just scan the lower levels of the tree. */
if (src != var && dest != var) if (src != var && dest != var)
break; break;
/* We will need to rerecognize this insn. */ /* We will need to rerecognize this insn. */
...@@ -2265,10 +2261,10 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -2265,10 +2261,10 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
INSN_CODE (insn) = -1; INSN_CODE (insn) = -1;
XEXP (outerdest, 0) = newmem; XEXP (outerdest, 0) = newmem;
XEXP (outerdest, 2) = GEN_INT (pos); XEXP (outerdest, 2) = GEN_INT (pos);
if (recog_memoized (insn) >= 0) if (recog_memoized (insn) >= 0)
return; return;
/* Otherwise, restore old position. XEXP (x, 0) will be /* Otherwise, restore old position. XEXP (x, 0) will be
restored later. */ restored later. */
XEXP (outerdest, 2) = old_pos; XEXP (outerdest, 2) = old_pos;
...@@ -2333,7 +2329,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ...@@ -2333,7 +2329,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
copy SET_SRC (x) to SET_DEST (x) in some way. So copy SET_SRC (x) to SET_DEST (x) in some way. So
we generate the move and see whether it requires more we generate the move and see whether it requires more
than one insn. If it does, we emit those insns and than one insn. If it does, we emit those insns and
delete INSN. Otherwise, we an just replace the pattern delete INSN. Otherwise, we an just replace the pattern
of INSN; we have already verified above that INSN has of INSN; we have already verified above that INSN has
no other function that to do X. */ no other function that to do X. */
...@@ -2485,7 +2481,7 @@ fixup_memory_subreg (x, insn, uncritical) ...@@ -2485,7 +2481,7 @@ fixup_memory_subreg (x, insn, uncritical)
If X itself is a (SUBREG (MEM ...) ...), return the replacement expression. If X itself is a (SUBREG (MEM ...) ...), return the replacement expression.
Otherwise return X, with its contents possibly altered. Otherwise return X, with its contents possibly altered.
If any insns must be emitted to compute NEWADDR, put them before INSN. If any insns must be emitted to compute NEWADDR, put them before INSN.
UNCRITICAL is as in fixup_memory_subreg. */ UNCRITICAL is as in fixup_memory_subreg. */
...@@ -2777,7 +2773,7 @@ static int cfa_offset; ...@@ -2777,7 +2773,7 @@ static int cfa_offset;
/* The bottom of the stack points to the actual arguments. If /* The bottom of the stack points to the actual arguments. If
REG_PARM_STACK_SPACE is defined, this includes the space for the register REG_PARM_STACK_SPACE is defined, this includes the space for the register
parameters. However, if OUTGOING_REG_PARM_STACK space is not defined, parameters. However, if OUTGOING_REG_PARM_STACK space is not defined,
stack space for register parameters is not pushed by the caller, but stack space for register parameters is not pushed by the caller, but
rather part of the fixed stack areas and hence not included in rather part of the fixed stack areas and hence not included in
`current_function_outgoing_args_size'. Nevertheless, we must allow `current_function_outgoing_args_size'. Nevertheless, we must allow
for it when allocating stack dynamic objects. */ for it when allocating stack dynamic objects. */
...@@ -2801,7 +2797,6 @@ static int cfa_offset; ...@@ -2801,7 +2797,6 @@ static int cfa_offset;
#define ARG_POINTER_CFA_OFFSET(FNDECL) FIRST_PARM_OFFSET (FNDECL) #define ARG_POINTER_CFA_OFFSET(FNDECL) FIRST_PARM_OFFSET (FNDECL)
#endif #endif
/* Build up a (MEM (ADDRESSOF (REG))) rtx for a register REG that just had /* Build up a (MEM (ADDRESSOF (REG))) rtx for a register REG that just had
its address taken. DECL is the decl for the object stored in the its address taken. DECL is the decl for the object stored in the
register, for later use if we do need to force REG into the stack. register, for later use if we do need to force REG into the stack.
...@@ -2899,7 +2894,7 @@ static rtx purge_bitfield_addressof_replacements; ...@@ -2899,7 +2894,7 @@ static rtx purge_bitfield_addressof_replacements;
corresponding (ADDRESSOF (REG ...)) and value is a substitution for corresponding (ADDRESSOF (REG ...)) and value is a substitution for
the all pattern. List PURGE_BITFIELD_ADDRESSOF_REPLACEMENTS is not the all pattern. List PURGE_BITFIELD_ADDRESSOF_REPLACEMENTS is not
enough in complex cases, e.g. when some field values can be enough in complex cases, e.g. when some field values can be
extracted by usage MEM with narrower mode. */ extracted by usage MEM with narrower mode. */
static rtx purge_addressof_replacements; static rtx purge_addressof_replacements;
/* Helper function for purge_addressof. See if the rtx expression at *LOC /* Helper function for purge_addressof. See if the rtx expression at *LOC
...@@ -2949,7 +2944,7 @@ purge_addressof_1 (loc, insn, force, store, ht) ...@@ -2949,7 +2944,7 @@ purge_addressof_1 (loc, insn, force, store, ht)
if (validate_change (insn, loc, sub, 0) if (validate_change (insn, loc, sub, 0)
|| validate_replace_rtx (x, sub, insn)) || validate_replace_rtx (x, sub, insn))
return true; return true;
start_sequence (); start_sequence ();
sub = force_operand (sub, NULL_RTX); sub = force_operand (sub, NULL_RTX);
if (! validate_change (insn, loc, sub, 0) if (! validate_change (insn, loc, sub, 0)
...@@ -2996,7 +2991,7 @@ purge_addressof_1 (loc, insn, force, store, ht) ...@@ -2996,7 +2991,7 @@ purge_addressof_1 (loc, insn, force, store, ht)
return true; return true;
} }
/* See comment for purge_addressof_replacements. */ /* See comment for purge_addressof_replacements. */
for (tem = purge_addressof_replacements; for (tem = purge_addressof_replacements;
tem != NULL_RTX; tem != NULL_RTX;
tem = XEXP (XEXP (tem, 1), 1)) tem = XEXP (XEXP (tem, 1), 1))
...@@ -3012,17 +3007,17 @@ purge_addressof_1 (loc, insn, force, store, ht) ...@@ -3012,17 +3007,17 @@ purge_addressof_1 (loc, insn, force, store, ht)
/* It can happen that the note may speak of things /* It can happen that the note may speak of things
in a wider (or just different) mode than the in a wider (or just different) mode than the
code did. This is especially true of code did. This is especially true of
REG_RETVAL. */ REG_RETVAL. */
if (GET_CODE (z) == SUBREG && SUBREG_WORD (z) == 0) if (GET_CODE (z) == SUBREG && SUBREG_WORD (z) == 0)
z = SUBREG_REG (z); z = SUBREG_REG (z);
if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
&& (GET_MODE_SIZE (GET_MODE (x)) && (GET_MODE_SIZE (GET_MODE (x))
> GET_MODE_SIZE (GET_MODE (z)))) > GET_MODE_SIZE (GET_MODE (z))))
{ {
/* This can occur as a result in invalid /* This can occur as a result in invalid
pointer casts, e.g. float f; ... pointer casts, e.g. float f; ...
*(long long int *)&f. *(long long int *)&f.
??? We could emit a warning here, but ??? We could emit a warning here, but
without a line number that wouldn't be without a line number that wouldn't be
...@@ -3075,9 +3070,9 @@ purge_addressof_1 (loc, insn, force, store, ht) ...@@ -3075,9 +3070,9 @@ purge_addressof_1 (loc, insn, force, store, ht)
seq = gen_sequence (); seq = gen_sequence ();
end_sequence (); end_sequence ();
emit_insn_before (seq, insn); emit_insn_before (seq, insn);
compute_insns_for_mem (p ? NEXT_INSN (p) : get_insns (), compute_insns_for_mem (p ? NEXT_INSN (p) : get_insns (),
insn, ht); insn, ht);
start_sequence (); start_sequence ();
store_bit_field (sub, size_x, 0, GET_MODE (x), store_bit_field (sub, size_x, 0, GET_MODE (x),
val, GET_MODE_SIZE (GET_MODE (sub)), val, GET_MODE_SIZE (GET_MODE (sub)),
...@@ -3091,7 +3086,7 @@ purge_addressof_1 (loc, insn, force, store, ht) ...@@ -3091,7 +3086,7 @@ purge_addressof_1 (loc, insn, force, store, ht)
end_sequence (); end_sequence ();
p = emit_insn_after (seq, insn); p = emit_insn_after (seq, insn);
if (NEXT_INSN (insn)) if (NEXT_INSN (insn))
compute_insns_for_mem (NEXT_INSN (insn), compute_insns_for_mem (NEXT_INSN (insn),
p ? NEXT_INSN (p) : NULL_RTX, p ? NEXT_INSN (p) : NULL_RTX,
ht); ht);
} }
...@@ -3173,7 +3168,7 @@ purge_addressof_1 (loc, insn, force, store, ht) ...@@ -3173,7 +3168,7 @@ purge_addressof_1 (loc, insn, force, store, ht)
return result; return result;
} }
/* Scan all subexpressions. */ /* Scan all subexpressions. */
fmt = GET_RTX_FORMAT (code); fmt = GET_RTX_FORMAT (code);
for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++) for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
{ {
...@@ -3249,7 +3244,7 @@ insns_for_mem_walk (r, data) ...@@ -3249,7 +3244,7 @@ insns_for_mem_walk (r, data)
rtx *r; rtx *r;
void *data; void *data;
{ {
struct insns_for_mem_walk_info *ifmwi struct insns_for_mem_walk_info *ifmwi
= (struct insns_for_mem_walk_info *) data; = (struct insns_for_mem_walk_info *) data;
if (ifmwi->pass == 0 && *r && GET_CODE (*r) == ADDRESSOF if (ifmwi->pass == 0 && *r && GET_CODE (*r) == ADDRESSOF
...@@ -3258,7 +3253,7 @@ insns_for_mem_walk (r, data) ...@@ -3258,7 +3253,7 @@ insns_for_mem_walk (r, data)
else if (ifmwi->pass == 1 && *r && GET_CODE (*r) == REG) else if (ifmwi->pass == 1 && *r && GET_CODE (*r) == REG)
{ {
/* Lookup this MEM in the hashtable, creating it if necessary. */ /* Lookup this MEM in the hashtable, creating it if necessary. */
struct insns_for_mem_entry *ifme struct insns_for_mem_entry *ifme
= (struct insns_for_mem_entry *) hash_lookup (ifmwi->ht, = (struct insns_for_mem_entry *) hash_lookup (ifmwi->ht,
*r, *r,
/*create=*/0, /*create=*/0,
...@@ -3273,7 +3268,7 @@ insns_for_mem_walk (r, data) ...@@ -3273,7 +3268,7 @@ insns_for_mem_walk (r, data)
the hash table since this memory will not be used once the hash table since this memory will not be used once
the hash table is deallocated. */ the hash table is deallocated. */
push_obstacks (&ifmwi->ht->memory, &ifmwi->ht->memory); push_obstacks (&ifmwi->ht->memory, &ifmwi->ht->memory);
ifme->insns = gen_rtx_EXPR_LIST (VOIDmode, ifmwi->insn, ifme->insns = gen_rtx_EXPR_LIST (VOIDmode, ifmwi->insn,
ifme->insns); ifme->insns);
pop_obstacks (); pop_obstacks ();
} }
...@@ -3308,10 +3303,10 @@ compute_insns_for_mem (insns, last_insn, ht) ...@@ -3308,10 +3303,10 @@ compute_insns_for_mem (insns, last_insn, ht)
Returns true iff the rtl is an ADDRESSOF. */ Returns true iff the rtl is an ADDRESSOF. */
static int static int
is_addressof (rtl, data) is_addressof (rtl, data)
rtx * rtl; rtx *rtl;
void * data ATTRIBUTE_UNUSED; void *data ATTRIBUTE_UNUSED;
{ {
return GET_CODE (* rtl) == ADDRESSOF; return GET_CODE (*rtl) == ADDRESSOF;
} }
/* Eliminate all occurrences of ADDRESSOF from INSNS. Elide any remaining /* Eliminate all occurrences of ADDRESSOF from INSNS. Elide any remaining
...@@ -3324,7 +3319,7 @@ purge_addressof (insns) ...@@ -3324,7 +3319,7 @@ purge_addressof (insns)
{ {
rtx insn; rtx insn;
struct hash_table ht; struct hash_table ht;
/* When we actually purge ADDRESSOFs, we turn REGs into MEMs. That /* When we actually purge ADDRESSOFs, we turn REGs into MEMs. That
requires a fixup pass over the instruction stream to correct requires a fixup pass over the instruction stream to correct
INSNs that depended on the REG being a REG, and not a MEM. But, INSNs that depended on the REG being a REG, and not a MEM. But,
...@@ -3332,7 +3327,7 @@ purge_addressof (insns) ...@@ -3332,7 +3327,7 @@ purge_addressof (insns)
mentioned in very many instructions. So, we speed up the process mentioned in very many instructions. So, we speed up the process
by pre-calculating which REGs occur in which INSNs; that allows by pre-calculating which REGs occur in which INSNs; that allows
us to perform the fixup passes much more quickly. */ us to perform the fixup passes much more quickly. */
hash_table_init (&ht, hash_table_init (&ht,
insns_for_mem_newfunc, insns_for_mem_newfunc,
insns_for_mem_hash, insns_for_mem_hash,
insns_for_mem_comp); insns_for_mem_comp);
...@@ -3347,7 +3342,7 @@ purge_addressof (insns) ...@@ -3347,7 +3342,7 @@ purge_addressof (insns)
/* If we could not replace the ADDRESSOFs in the insn, /* If we could not replace the ADDRESSOFs in the insn,
something is wrong. */ something is wrong. */
abort (); abort ();
if (! purge_addressof_1 (&REG_NOTES (insn), NULL_RTX, 0, 0, &ht)) if (! purge_addressof_1 (&REG_NOTES (insn), NULL_RTX, 0, 0, &ht))
{ {
/* If we could not replace the ADDRESSOFs in the insn's notes, /* If we could not replace the ADDRESSOFs in the insn's notes,
...@@ -3362,7 +3357,7 @@ purge_addressof (insns) ...@@ -3362,7 +3357,7 @@ purge_addressof (insns)
safe to delete the notes here, and instead we abort. */ safe to delete the notes here, and instead we abort. */
if (REG_NOTE_KIND (note) == REG_RETVAL) if (REG_NOTE_KIND (note) == REG_RETVAL)
abort (); abort ();
if (for_each_rtx (& note, is_addressof, NULL)) if (for_each_rtx (&note, is_addressof, NULL))
remove_note (insn, note); remove_note (insn, note);
} }
} }
...@@ -3465,7 +3460,7 @@ instantiate_decls (fndecl, valid_only) ...@@ -3465,7 +3460,7 @@ instantiate_decls (fndecl, valid_only)
{ {
HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl)); HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl));
instantiate_decl (DECL_RTL (decl), size, valid_only); instantiate_decl (DECL_RTL (decl), size, valid_only);
/* If the parameter was promoted, then the incoming RTL mode may be /* If the parameter was promoted, then the incoming RTL mode may be
larger than the declared type size. We must use the larger of larger than the declared type size. We must use the larger of
...@@ -3581,7 +3576,7 @@ instantiate_decl (x, size, valid_only) ...@@ -3581,7 +3576,7 @@ instantiate_decl (x, size, valid_only)
is not valid. is not valid.
Return 1 if we either had nothing to do or if we were able to do the Return 1 if we either had nothing to do or if we were able to do the
needed replacement. Return 0 otherwise; we only return zero if needed replacement. Return 0 otherwise; we only return zero if
EXTRA_INSNS is zero. EXTRA_INSNS is zero.
We first try some simple transformations to avoid the creation of extra We first try some simple transformations to avoid the creation of extra
...@@ -3633,15 +3628,15 @@ instantiate_virtual_regs_1 (loc, object, extra_insns) ...@@ -3633,15 +3628,15 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
appropriate offset. This is used, for example, in the handling appropriate offset. This is used, for example, in the handling
of non-local gotos. */ of non-local gotos. */
if (SET_DEST (x) == virtual_incoming_args_rtx) if (SET_DEST (x) == virtual_incoming_args_rtx)
new = arg_pointer_rtx, offset = - in_arg_offset; new = arg_pointer_rtx, offset = -in_arg_offset;
else if (SET_DEST (x) == virtual_stack_vars_rtx) else if (SET_DEST (x) == virtual_stack_vars_rtx)
new = frame_pointer_rtx, offset = - var_offset; new = frame_pointer_rtx, offset = -var_offset;
else if (SET_DEST (x) == virtual_stack_dynamic_rtx) else if (SET_DEST (x) == virtual_stack_dynamic_rtx)
new = stack_pointer_rtx, offset = - dynamic_offset; new = stack_pointer_rtx, offset = -dynamic_offset;
else if (SET_DEST (x) == virtual_outgoing_args_rtx) else if (SET_DEST (x) == virtual_outgoing_args_rtx)
new = stack_pointer_rtx, offset = - out_arg_offset; new = stack_pointer_rtx, offset = -out_arg_offset;
else if (SET_DEST (x) == virtual_cfa_rtx) else if (SET_DEST (x) == virtual_cfa_rtx)
new = arg_pointer_rtx, offset = - cfa_offset; new = arg_pointer_rtx, offset = -cfa_offset;
if (new) if (new)
{ {
...@@ -3697,7 +3692,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns) ...@@ -3697,7 +3692,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
else if (inner == virtual_outgoing_args_rtx) else if (inner == virtual_outgoing_args_rtx)
new = stack_pointer_rtx, offset = out_arg_offset; new = stack_pointer_rtx, offset = out_arg_offset;
else if (inner == virtual_cfa_rtx) else if (inner == virtual_cfa_rtx)
new = arg_pointer_rtx, offset = cfa_offset; new = arg_pointer_rtx, offset = cfa_offset;
else else
{ {
loc = &XEXP (x, 0); loc = &XEXP (x, 0);
...@@ -3717,8 +3712,8 @@ instantiate_virtual_regs_1 (loc, object, extra_insns) ...@@ -3717,8 +3712,8 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
new = stack_pointer_rtx, offset = dynamic_offset; new = stack_pointer_rtx, offset = dynamic_offset;
else if (XEXP (x, 0) == virtual_outgoing_args_rtx) else if (XEXP (x, 0) == virtual_outgoing_args_rtx)
new = stack_pointer_rtx, offset = out_arg_offset; new = stack_pointer_rtx, offset = out_arg_offset;
else if (XEXP (x, 0) == virtual_cfa_rtx) else if (XEXP (x, 0) == virtual_cfa_rtx)
new = arg_pointer_rtx, offset = cfa_offset; new = arg_pointer_rtx, offset = cfa_offset;
else else
{ {
/* We know the second operand is a constant. Unless the /* We know the second operand is a constant. Unless the
...@@ -3811,12 +3806,12 @@ instantiate_virtual_regs_1 (loc, object, extra_insns) ...@@ -3811,12 +3806,12 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
/* Most cases of MEM that convert to valid addresses have already been /* Most cases of MEM that convert to valid addresses have already been
handled by our scan of decls. The only special handling we handled by our scan of decls. The only special handling we
need here is to make a copy of the rtx to ensure it isn't being need here is to make a copy of the rtx to ensure it isn't being
shared if we have to change it to a pseudo. shared if we have to change it to a pseudo.
If the rtx is a simple reference to an address via a virtual register, If the rtx is a simple reference to an address via a virtual register,
it can potentially be shared. In such cases, first try to make it it can potentially be shared. In such cases, first try to make it
a valid address, which can also be shared. Otherwise, copy it and a valid address, which can also be shared. Otherwise, copy it and
proceed normally. proceed normally.
First check for common cases that need no processing. These are First check for common cases that need no processing. These are
usually due to instantiation already being done on a previous instance usually due to instantiation already being done on a previous instance
...@@ -3902,7 +3897,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns) ...@@ -3902,7 +3897,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
case CLOBBER: case CLOBBER:
/* If the operand is a MEM, see if the change is a valid MEM. If not, /* If the operand is a MEM, see if the change is a valid MEM. If not,
go ahead and make the invalid one, but do it to a copy. For a REG, go ahead and make the invalid one, but do it to a copy. For a REG,
just make the recursive call, since there's no chance of a problem. */ just make the recursive call, since there's no chance of a problem. */
if ((GET_CODE (XEXP (x, 0)) == MEM if ((GET_CODE (XEXP (x, 0)) == MEM
&& instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), XEXP (x, 0), && instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), XEXP (x, 0),
...@@ -3927,7 +3922,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns) ...@@ -3927,7 +3922,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
else if (x == virtual_outgoing_args_rtx) else if (x == virtual_outgoing_args_rtx)
new = stack_pointer_rtx, offset = out_arg_offset; new = stack_pointer_rtx, offset = out_arg_offset;
else if (x == virtual_cfa_rtx) else if (x == virtual_cfa_rtx)
new = arg_pointer_rtx, offset = cfa_offset; new = arg_pointer_rtx, offset = cfa_offset;
if (new) if (new)
{ {
...@@ -3964,7 +3959,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns) ...@@ -3964,7 +3959,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
return 1; return 1;
} }
break; break;
default: default:
break; break;
} }
...@@ -4136,7 +4131,7 @@ assign_parms (fndecl) ...@@ -4136,7 +4131,7 @@ assign_parms (fndecl)
tree fnargs = DECL_ARGUMENTS (fndecl); tree fnargs = DECL_ARGUMENTS (fndecl);
/* This is used for the arg pointer when referring to stack args. */ /* This is used for the arg pointer when referring to stack args. */
rtx internal_arg_pointer; rtx internal_arg_pointer;
/* This is a dummy PARM_DECL that we used for the function result if /* This is a dummy PARM_DECL that we used for the function result if
the function returns a structure. */ the function returns a structure. */
tree function_result_decl = 0; tree function_result_decl = 0;
#ifdef SETUP_INCOMING_VARARGS #ifdef SETUP_INCOMING_VARARGS
...@@ -4197,7 +4192,7 @@ assign_parms (fndecl) ...@@ -4197,7 +4192,7 @@ assign_parms (fndecl)
TREE_CHAIN (function_result_decl) = fnargs; TREE_CHAIN (function_result_decl) = fnargs;
fnargs = function_result_decl; fnargs = function_result_decl;
} }
max_parm_reg = LAST_VIRTUAL_REGISTER + 1; max_parm_reg = LAST_VIRTUAL_REGISTER + 1;
parm_reg_stack_loc = (rtx *) xcalloc (max_parm_reg, sizeof (rtx)); parm_reg_stack_loc = (rtx *) xcalloc (max_parm_reg, sizeof (rtx));
...@@ -4357,7 +4352,7 @@ assign_parms (fndecl) ...@@ -4357,7 +4352,7 @@ assign_parms (fndecl)
#endif #endif
#endif #endif
fndecl, &stack_args_size, &stack_offset, &arg_size, fndecl, &stack_args_size, &stack_offset, &arg_size,
&alignment_pad); &alignment_pad);
{ {
rtx offset_rtx = ARGS_SIZE_RTX (stack_offset); rtx offset_rtx = ARGS_SIZE_RTX (stack_offset);
...@@ -4405,7 +4400,7 @@ assign_parms (fndecl) ...@@ -4405,7 +4400,7 @@ assign_parms (fndecl)
emit_group_store (validize_mem (stack_parm), entry_parm, emit_group_store (validize_mem (stack_parm), entry_parm,
int_size_in_bytes (TREE_TYPE (parm)), int_size_in_bytes (TREE_TYPE (parm)),
TYPE_ALIGN (TREE_TYPE (parm))); TYPE_ALIGN (TREE_TYPE (parm)));
else else
move_block_from_reg (REGNO (entry_parm), move_block_from_reg (REGNO (entry_parm),
validize_mem (stack_parm), nregs, validize_mem (stack_parm), nregs,
...@@ -4579,7 +4574,7 @@ assign_parms (fndecl) ...@@ -4579,7 +4574,7 @@ assign_parms (fndecl)
{ {
int save_tree_used; int save_tree_used;
/* ENTRY_PARM has been converted to PROMOTED_MODE, its /* ENTRY_PARM has been converted to PROMOTED_MODE, its
mode, by the caller. We now have to convert it to mode, by the caller. We now have to convert it to
NOMINAL_MODE, if different. However, PARMREG may be in NOMINAL_MODE, if different. However, PARMREG may be in
a different mode than NOMINAL_MODE if it is being stored a different mode than NOMINAL_MODE if it is being stored
promoted. promoted.
...@@ -4692,7 +4687,7 @@ assign_parms (fndecl) ...@@ -4692,7 +4687,7 @@ assign_parms (fndecl)
#endif /* FUNCTION_ARG_CALLEE_COPIES */ #endif /* FUNCTION_ARG_CALLEE_COPIES */
/* In any case, record the parm's desired stack location /* In any case, record the parm's desired stack location
in case we later discover it must live in the stack. in case we later discover it must live in the stack.
If it is a COMPLEX value, store the stack location for both If it is a COMPLEX value, store the stack location for both
halves. */ halves. */
...@@ -4781,7 +4776,7 @@ assign_parms (fndecl) ...@@ -4781,7 +4776,7 @@ assign_parms (fndecl)
} }
else if ((set = single_set (linsn)) != 0 else if ((set = single_set (linsn)) != 0
&& SET_DEST (set) == parmreg) && SET_DEST (set) == parmreg)
REG_NOTES (linsn) REG_NOTES (linsn)
= gen_rtx_EXPR_LIST (REG_EQUIV, = gen_rtx_EXPR_LIST (REG_EQUIV,
stack_parm, REG_NOTES (linsn)); stack_parm, REG_NOTES (linsn));
} }
...@@ -4845,7 +4840,7 @@ assign_parms (fndecl) ...@@ -4845,7 +4840,7 @@ assign_parms (fndecl)
push_to_sequence (conversion_insns); push_to_sequence (conversion_insns);
emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
XEXP (stack_parm, 0), Pmode, XEXP (stack_parm, 0), Pmode,
GEN_INT (GET_MODE_SIZE (GET_MODE GEN_INT (GET_MODE_SIZE (GET_MODE
(entry_parm))), (entry_parm))),
TYPE_MODE (sizetype), TYPE_MODE (sizetype),
GEN_INT (MEMORY_USE_RW), GEN_INT (MEMORY_USE_RW),
...@@ -4856,7 +4851,7 @@ assign_parms (fndecl) ...@@ -4856,7 +4851,7 @@ assign_parms (fndecl)
} }
DECL_RTL (parm) = stack_parm; DECL_RTL (parm) = stack_parm;
} }
/* If this "parameter" was the place where we are receiving the /* If this "parameter" was the place where we are receiving the
function's incoming structure pointer, set up the result. */ function's incoming structure pointer, set up the result. */
if (parm == function_result_decl) if (parm == function_result_decl)
...@@ -4894,13 +4889,13 @@ assign_parms (fndecl) ...@@ -4894,13 +4889,13 @@ assign_parms (fndecl)
current_function_args_size current_function_args_size
= ((current_function_args_size + STACK_BYTES - 1) = ((current_function_args_size + STACK_BYTES - 1)
/ STACK_BYTES) * STACK_BYTES; / STACK_BYTES) * STACK_BYTES;
#endif #endif
#ifdef ARGS_GROW_DOWNWARD #ifdef ARGS_GROW_DOWNWARD
current_function_arg_offset_rtx current_function_arg_offset_rtx
= (stack_args_size.var == 0 ? GEN_INT (-stack_args_size.constant) = (stack_args_size.var == 0 ? GEN_INT (-stack_args_size.constant)
: expand_expr (size_diffop (stack_args_size.var, : expand_expr (size_diffop (stack_args_size.var,
size_int (-stack_args_size.constant)), size_int (-stack_args_size.constant)),
NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_BAD)); NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_BAD));
#else #else
current_function_arg_offset_rtx = ARGS_SIZE_RTX (stack_args_size); current_function_arg_offset_rtx = ARGS_SIZE_RTX (stack_args_size);
...@@ -4990,7 +4985,7 @@ promoted_input_arg (regno, pmode, punsignedp) ...@@ -4990,7 +4985,7 @@ promoted_input_arg (regno, pmode, punsignedp)
initial offset is not affected by this rounding, while the size always initial offset is not affected by this rounding, while the size always
is and the starting offset may be. */ is and the starting offset may be. */
/* offset_ptr will be negative for ARGS_GROW_DOWNWARD case; /* offset_ptr will be negative for ARGS_GROW_DOWNWARD case;
initial_offset_ptr is positive because locate_and_pad_parm's initial_offset_ptr is positive because locate_and_pad_parm's
callers pass in the total size of args so far as callers pass in the total size of args so far as
initial_offset_ptr. arg_size_ptr is always positive.*/ initial_offset_ptr. arg_size_ptr is always positive.*/
...@@ -4998,7 +4993,7 @@ promoted_input_arg (regno, pmode, punsignedp) ...@@ -4998,7 +4993,7 @@ promoted_input_arg (regno, pmode, punsignedp)
void void
locate_and_pad_parm (passed_mode, type, in_regs, fndecl, locate_and_pad_parm (passed_mode, type, in_regs, fndecl,
initial_offset_ptr, offset_ptr, arg_size_ptr, initial_offset_ptr, offset_ptr, arg_size_ptr,
alignment_pad) alignment_pad)
enum machine_mode passed_mode; enum machine_mode passed_mode;
tree type; tree type;
int in_regs ATTRIBUTE_UNUSED; int in_regs ATTRIBUTE_UNUSED;
...@@ -5053,7 +5048,7 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl, ...@@ -5053,7 +5048,7 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl,
} }
else else
{ {
offset_ptr->constant = - initial_offset_ptr->constant; offset_ptr->constant = -initial_offset_ptr->constant;
offset_ptr->var = 0; offset_ptr->var = 0;
} }
if (where_pad != none if (where_pad != none
...@@ -5071,8 +5066,8 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl, ...@@ -5071,8 +5066,8 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl,
offset_ptr->var); offset_ptr->var);
else else
arg_size_ptr->constant = (- initial_offset_ptr->constant arg_size_ptr->constant = (-initial_offset_ptr->constant
- offset_ptr->constant); - offset_ptr->constant);
#else /* !ARGS_GROW_DOWNWARD */ #else /* !ARGS_GROW_DOWNWARD */
pad_to_arg_alignment (initial_offset_ptr, boundary, alignment_pad); pad_to_arg_alignment (initial_offset_ptr, boundary, alignment_pad);
...@@ -5113,7 +5108,7 @@ pad_to_arg_alignment (offset_ptr, boundary, alignment_pad) ...@@ -5113,7 +5108,7 @@ pad_to_arg_alignment (offset_ptr, boundary, alignment_pad)
HOST_WIDE_INT save_constant = 0; HOST_WIDE_INT save_constant = 0;
int boundary_in_bytes = boundary / BITS_PER_UNIT; int boundary_in_bytes = boundary / BITS_PER_UNIT;
if (boundary > PARM_BOUNDARY && boundary > STACK_BOUNDARY) if (boundary > PARM_BOUNDARY && boundary > STACK_BOUNDARY)
{ {
save_var = offset_ptr->var; save_var = offset_ptr->var;
...@@ -5127,9 +5122,9 @@ pad_to_arg_alignment (offset_ptr, boundary, alignment_pad) ...@@ -5127,9 +5122,9 @@ pad_to_arg_alignment (offset_ptr, boundary, alignment_pad)
{ {
if (offset_ptr->var) if (offset_ptr->var)
{ {
offset_ptr->var = offset_ptr->var =
#ifdef ARGS_GROW_DOWNWARD #ifdef ARGS_GROW_DOWNWARD
round_down round_down
#else #else
round_up round_up
#endif #endif
...@@ -5141,16 +5136,16 @@ pad_to_arg_alignment (offset_ptr, boundary, alignment_pad) ...@@ -5141,16 +5136,16 @@ pad_to_arg_alignment (offset_ptr, boundary, alignment_pad)
save_var); save_var);
} }
else else
{ {
offset_ptr->constant = offset_ptr->constant =
#ifdef ARGS_GROW_DOWNWARD #ifdef ARGS_GROW_DOWNWARD
FLOOR_ROUND (offset_ptr->constant, boundary_in_bytes); FLOOR_ROUND (offset_ptr->constant, boundary_in_bytes);
#else #else
CEIL_ROUND (offset_ptr->constant, boundary_in_bytes); CEIL_ROUND (offset_ptr->constant, boundary_in_bytes);
#endif #endif
if (boundary > PARM_BOUNDARY && boundary > STACK_BOUNDARY) if (boundary > PARM_BOUNDARY && boundary > STACK_BOUNDARY)
alignment_pad->constant = offset_ptr->constant - save_constant; alignment_pad->constant = offset_ptr->constant - save_constant;
} }
} }
} }
...@@ -5240,7 +5235,8 @@ setjmp_args_warning () ...@@ -5240,7 +5235,8 @@ setjmp_args_warning ()
if (DECL_RTL (decl) != 0 if (DECL_RTL (decl) != 0
&& GET_CODE (DECL_RTL (decl)) == REG && GET_CODE (DECL_RTL (decl)) == REG
&& regno_clobbered_at_setjmp (REGNO (DECL_RTL (decl)))) && regno_clobbered_at_setjmp (REGNO (DECL_RTL (decl))))
warning_with_decl (decl, "argument `%s' might be clobbered by `longjmp' or `vfork'"); warning_with_decl (decl,
"argument `%s' might be clobbered by `longjmp' or `vfork'");
} }
/* If this function call setjmp, put all vars into the stack /* If this function call setjmp, put all vars into the stack
...@@ -5520,7 +5516,7 @@ round_trampoline_addr (tramp) ...@@ -5520,7 +5516,7 @@ round_trampoline_addr (tramp)
GEN_INT (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT - 1), GEN_INT (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT - 1),
temp, 0, OPTAB_LIB_WIDEN); temp, 0, OPTAB_LIB_WIDEN);
tramp = expand_binop (Pmode, and_optab, temp, tramp = expand_binop (Pmode, and_optab, temp,
GEN_INT (- TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT), GEN_INT (-TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT),
temp, 0, OPTAB_LIB_WIDEN); temp, 0, OPTAB_LIB_WIDEN);
#endif #endif
return tramp; return tramp;
...@@ -5549,9 +5545,9 @@ identify_blocks () ...@@ -5549,9 +5545,9 @@ identify_blocks ()
block_vector = get_block_vector (block, &n_blocks); block_vector = get_block_vector (block, &n_blocks);
block_stack = (tree *) xmalloc (n_blocks * sizeof (tree)); block_stack = (tree *) xmalloc (n_blocks * sizeof (tree));
last_block_vector = identify_blocks_1 (get_insns (), last_block_vector = identify_blocks_1 (get_insns (),
block_vector + 1, block_vector + 1,
block_vector + n_blocks, block_vector + n_blocks,
block_stack); block_stack);
/* If we didn't use all of the subblocks, we've misplaced block notes. */ /* If we didn't use all of the subblocks, we've misplaced block notes. */
...@@ -5605,14 +5601,14 @@ identify_blocks_1 (insns, block_vector, end_block_vector, orig_block_stack) ...@@ -5605,14 +5601,14 @@ identify_blocks_1 (insns, block_vector, end_block_vector, orig_block_stack)
NOTE_BLOCK (insn) = *--block_stack; NOTE_BLOCK (insn) = *--block_stack;
} }
} }
else if (GET_CODE (insn) == CALL_INSN else if (GET_CODE (insn) == CALL_INSN
&& GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER) && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
{ {
rtx cp = PATTERN (insn); rtx cp = PATTERN (insn);
block_vector = identify_blocks_1 (XEXP (cp, 0), block_vector, block_vector = identify_blocks_1 (XEXP (cp, 0), block_vector,
end_block_vector, block_stack); end_block_vector, block_stack);
if (XEXP (cp, 1)) if (XEXP (cp, 1))
block_vector = identify_blocks_1 (XEXP (cp, 1), block_vector, block_vector = identify_blocks_1 (XEXP (cp, 1), block_vector,
end_block_vector, block_stack); end_block_vector, block_stack);
...@@ -5631,7 +5627,7 @@ identify_blocks_1 (insns, block_vector, end_block_vector, orig_block_stack) ...@@ -5631,7 +5627,7 @@ identify_blocks_1 (insns, block_vector, end_block_vector, orig_block_stack)
} }
/* Identify BLOCKs referenced by more than one /* Identify BLOCKs referenced by more than one
NOTE_INSN_BLOCK_{BEG,END}, and create duplicate blocks. */ NOTE_INSN_BLOCK_{BEG,END}, and create duplicate blocks. */
void void
reorder_blocks () reorder_blocks ()
...@@ -5650,8 +5646,7 @@ reorder_blocks () ...@@ -5650,8 +5646,7 @@ reorder_blocks ()
reorder_blocks_1 (get_insns (), block, &block_stack); reorder_blocks_1 (get_insns (), block, &block_stack);
BLOCK_SUBBLOCKS (block) BLOCK_SUBBLOCKS (block) = blocks_nreverse (BLOCK_SUBBLOCKS (block));
= blocks_nreverse (BLOCK_SUBBLOCKS (block));
VARRAY_FREE (block_stack); VARRAY_FREE (block_stack);
} }
...@@ -5682,7 +5677,7 @@ reorder_blocks_1 (insns, current_block, p_block_stack) ...@@ -5682,7 +5677,7 @@ reorder_blocks_1 (insns, current_block, p_block_stack)
} }
BLOCK_SUBBLOCKS (block) = 0; BLOCK_SUBBLOCKS (block) = 0;
TREE_ASM_WRITTEN (block) = 1; TREE_ASM_WRITTEN (block) = 1;
BLOCK_SUPERCONTEXT (block) = current_block; BLOCK_SUPERCONTEXT (block) = current_block;
BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (current_block); BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (current_block);
BLOCK_SUBBLOCKS (current_block) = block; BLOCK_SUBBLOCKS (current_block) = block;
current_block = block; current_block = block;
...@@ -5748,7 +5743,7 @@ all_blocks (block, vector) ...@@ -5748,7 +5743,7 @@ all_blocks (block, vector)
vector[n_blocks] = block; vector[n_blocks] = block;
++n_blocks; ++n_blocks;
/* Record the subblocks, and their subblocks... */ /* Record the subblocks, and their subblocks... */
n_blocks += all_blocks (BLOCK_SUBBLOCKS (block), n_blocks += all_blocks (BLOCK_SUBBLOCKS (block),
vector ? vector + n_blocks : 0); vector ? vector + n_blocks : 0);
...@@ -5762,7 +5757,7 @@ all_blocks (block, vector) ...@@ -5762,7 +5757,7 @@ all_blocks (block, vector)
number of elements in the vector is stored in N_BLOCKS_P. The number of elements in the vector is stored in N_BLOCKS_P. The
vector is dynamically allocated; it is the caller's responsibility vector is dynamically allocated; it is the caller's responsibility
to call `free' on the pointer returned. */ to call `free' on the pointer returned. */
static tree * static tree *
get_block_vector (block, n_blocks_p) get_block_vector (block, n_blocks_p)
tree block; tree block;
...@@ -5808,7 +5803,6 @@ number_blocks (fn) ...@@ -5808,7 +5803,6 @@ number_blocks (fn)
return; return;
} }
/* Allocate a function structure and reset its contents to the defaults. */ /* Allocate a function structure and reset its contents to the defaults. */
static void static void
...@@ -5851,7 +5845,7 @@ prepare_function_start () ...@@ -5851,7 +5845,7 @@ prepare_function_start ()
/* Initialize the queue of pending postincrement and postdecrements, /* Initialize the queue of pending postincrement and postdecrements,
and some other info in expr.c. */ and some other info in expr.c. */
init_expr (); init_expr ();
/* We haven't done register allocation yet. */ /* We haven't done register allocation yet. */
reg_renumber = 0; reg_renumber = 0;
...@@ -5860,7 +5854,7 @@ prepare_function_start () ...@@ -5860,7 +5854,7 @@ prepare_function_start ()
/* Clear out data used for inlining. */ /* Clear out data used for inlining. */
cfun->inlinable = 0; cfun->inlinable = 0;
cfun->original_decl_initial = 0; cfun->original_decl_initial = 0;
cfun->original_arg_vector = 0; cfun->original_arg_vector = 0;
#ifdef STACK_BOUNDARY #ifdef STACK_BOUNDARY
cfun->stack_alignment_needed = STACK_BOUNDARY; cfun->stack_alignment_needed = STACK_BOUNDARY;
...@@ -5962,7 +5956,7 @@ init_function_start (subr, filename, line) ...@@ -5962,7 +5956,7 @@ init_function_start (subr, filename, line)
/* Remember this function for later. */ /* Remember this function for later. */
cfun->next_global = all_functions; cfun->next_global = all_functions;
all_functions = cfun; all_functions = cfun;
current_function_name = (*decl_printable_name) (subr, 2); current_function_name = (*decl_printable_name) (subr, 2);
cfun->decl = subr; cfun->decl = subr;
...@@ -5977,7 +5971,7 @@ init_function_start (subr, filename, line) ...@@ -5977,7 +5971,7 @@ init_function_start (subr, filename, line)
/* Prevent ever trying to delete the first instruction of a function. /* Prevent ever trying to delete the first instruction of a function.
Also tell final how to output a linenum before the function prologue. Also tell final how to output a linenum before the function prologue.
Note linenums could be missing, e.g. when compiling a Java .class file. */ Note linenums could be missing, e.g. when compiling a Java .class file. */
if (line > 0) if (line > 0)
emit_line_note (filename, line); emit_line_note (filename, line);
...@@ -6085,7 +6079,7 @@ expand_function_start (subr, parms_have_cleanups) ...@@ -6085,7 +6079,7 @@ expand_function_start (subr, parms_have_cleanups)
conflicts with regs used for parameters. */ conflicts with regs used for parameters. */
if (! SMALL_REGISTER_CLASSES if (! SMALL_REGISTER_CLASSES
|| GET_CODE (static_chain_incoming_rtx) == REG) || GET_CODE (static_chain_incoming_rtx) == REG)
emit_move_insn (last_ptr, static_chain_incoming_rtx); emit_move_insn (last_ptr, static_chain_incoming_rtx);
} }
/* If the parameters of this function need cleaning up, get a label /* If the parameters of this function need cleaning up, get a label
...@@ -6237,7 +6231,7 @@ expand_function_start (subr, parms_have_cleanups) ...@@ -6237,7 +6231,7 @@ expand_function_start (subr, parms_have_cleanups)
/* Chain thru stack frames, assuming pointer to next lexical frame /* Chain thru stack frames, assuming pointer to next lexical frame
is found at the place we always store it. */ is found at the place we always store it. */
#ifdef FRAME_GROWS_DOWNWARD #ifdef FRAME_GROWS_DOWNWARD
last_ptr = plus_constant (last_ptr, - GET_MODE_SIZE (Pmode)); last_ptr = plus_constant (last_ptr, -GET_MODE_SIZE (Pmode));
#endif #endif
last_ptr = gen_rtx_MEM (Pmode, memory_address (Pmode, last_ptr)); last_ptr = gen_rtx_MEM (Pmode, memory_address (Pmode, last_ptr));
MEM_ALIAS_SET (last_ptr) = get_frame_alias_set (); MEM_ALIAS_SET (last_ptr) = get_frame_alias_set ();
...@@ -6317,7 +6311,7 @@ diddle_return_value (doit, arg) ...@@ -6317,7 +6311,7 @@ diddle_return_value (doit, arg)
return; return;
pcc = (current_function_returns_struct pcc = (current_function_returns_struct
|| current_function_returns_pcc_struct); || current_function_returns_pcc_struct);
if ((GET_CODE (outgoing) == REG if ((GET_CODE (outgoing) == REG
&& REGNO (outgoing) >= FIRST_PSEUDO_REGISTER) && REGNO (outgoing) >= FIRST_PSEUDO_REGISTER)
...@@ -6388,7 +6382,7 @@ use_return_register () ...@@ -6388,7 +6382,7 @@ use_return_register ()
} }
/* Generate RTL for the end of the current function. /* Generate RTL for the end of the current function.
FILENAME and LINE are the current position in the source file. FILENAME and LINE are the current position in the source file.
It is up to language-specific callers to do cleanups for parameters-- It is up to language-specific callers to do cleanups for parameters--
or else, supply 1 for END_BINDINGS and we will call expand_end_bindings. */ or else, supply 1 for END_BINDINGS and we will call expand_end_bindings. */
...@@ -6498,7 +6492,7 @@ expand_function_end (filename, line, end_bindings) ...@@ -6498,7 +6492,7 @@ expand_function_end (filename, line, end_bindings)
/* Warn about unused parms if extra warnings were specified. */ /* Warn about unused parms if extra warnings were specified. */
/* Either ``-W -Wunused'' or ``-Wunused-parameter'' enables this /* Either ``-W -Wunused'' or ``-Wunused-parameter'' enables this
warning. WARN_UNUSED_PARAMETER is negative when set by warning. WARN_UNUSED_PARAMETER is negative when set by
-Wunused. */ -Wunused. */
if (warn_unused_parameter > 0 if (warn_unused_parameter > 0
|| (warn_unused_parameter < 0 && extra_warnings)) || (warn_unused_parameter < 0 && extra_warnings))
{ {
...@@ -6658,7 +6652,8 @@ expand_function_end (filename, line, end_bindings) ...@@ -6658,7 +6652,8 @@ expand_function_end (filename, line, end_bindings)
if (current_function_returns_struct if (current_function_returns_struct
|| current_function_returns_pcc_struct) || current_function_returns_pcc_struct)
{ {
rtx value_address = XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0); rtx value_address =
XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
tree type = TREE_TYPE (DECL_RESULT (current_function_decl)); tree type = TREE_TYPE (DECL_RESULT (current_function_decl));
#ifdef FUNCTION_OUTGOING_VALUE #ifdef FUNCTION_OUTGOING_VALUE
rtx outgoing rtx outgoing
...@@ -6683,7 +6678,7 @@ expand_function_end (filename, line, end_bindings) ...@@ -6683,7 +6678,7 @@ expand_function_end (filename, line, end_bindings)
instead of using the general framework. */ instead of using the general framework. */
use_return_register (); use_return_register ();
/* If this is an implementation of __throw, do what's necessary to /* If this is an implementation of __throw, do what's necessary to
communicate between __builtin_eh_return and the epilogue. */ communicate between __builtin_eh_return and the epilogue. */
expand_eh_return (); expand_eh_return ();
...@@ -6778,7 +6773,7 @@ prologue_epilogue_contains (insn) ...@@ -6778,7 +6773,7 @@ prologue_epilogue_contains (insn)
int int
sibcall_epilogue_contains (insn) sibcall_epilogue_contains (insn)
rtx insn; rtx insn;
{ {
if (sibcall_epilogue) if (sibcall_epilogue)
return contains (insn, sibcall_epilogue); return contains (insn, sibcall_epilogue);
...@@ -6796,7 +6791,7 @@ emit_return_into_block (bb, line_note) ...@@ -6796,7 +6791,7 @@ emit_return_into_block (bb, line_note)
{ {
rtx p, end; rtx p, end;
p = NEXT_INSN (bb->end); p = NEXT_INSN (bb->end);
end = emit_jump_insn_after (gen_return (), bb->end); end = emit_jump_insn_after (gen_return (), bb->end);
if (line_note) if (line_note)
emit_line_note_after (NOTE_SOURCE_FILE (line_note), emit_line_note_after (NOTE_SOURCE_FILE (line_note),
...@@ -6835,7 +6830,7 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6835,7 +6830,7 @@ thread_prologue_and_epilogue_insns (f)
if (HAVE_prologue) if (HAVE_prologue)
{ {
start_sequence (); start_sequence ();
seq = gen_prologue(); seq = gen_prologue ();
emit_insn (seq); emit_insn (seq);
/* Retain a map of the prologue insns. */ /* Retain a map of the prologue insns. */
...@@ -6865,7 +6860,7 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6865,7 +6860,7 @@ thread_prologue_and_epilogue_insns (f)
/* If the exit block has no non-fake predecessors, we don't need /* If the exit block has no non-fake predecessors, we don't need
an epilogue. */ an epilogue. */
for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next) for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
if ((e->flags & EDGE_FAKE) == 0) if ((e->flags & EDGE_FAKE) == 0)
break; break;
if (e == NULL) if (e == NULL)
...@@ -6876,15 +6871,15 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6876,15 +6871,15 @@ thread_prologue_and_epilogue_insns (f)
{ {
/* If we're allowed to generate a simple return instruction, /* If we're allowed to generate a simple return instruction,
then by definition we don't need a full epilogue. Examine then by definition we don't need a full epilogue. Examine
the block that falls through to EXIT. If it does not the block that falls through to EXIT. If it does not
contain any code, examine its predecessors and try to contain any code, examine its predecessors and try to
emit (conditional) return instructions. */ emit (conditional) return instructions. */
basic_block last; basic_block last;
edge e_next; edge e_next;
rtx label; rtx label;
for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next) for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
if (e->flags & EDGE_FALLTHRU) if (e->flags & EDGE_FALLTHRU)
break; break;
if (e == NULL) if (e == NULL)
...@@ -6902,7 +6897,7 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6902,7 +6897,7 @@ thread_prologue_and_epilogue_insns (f)
if (last->head == label && GET_CODE (label) == CODE_LABEL) if (last->head == label && GET_CODE (label) == CODE_LABEL)
{ {
rtx epilogue_line_note = NULL_RTX; rtx epilogue_line_note = NULL_RTX;
/* Locate the line number associated with the closing brace, /* Locate the line number associated with the closing brace,
if we can find one. */ if we can find one. */
...@@ -6915,7 +6910,7 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6915,7 +6910,7 @@ thread_prologue_and_epilogue_insns (f)
break; break;
} }
for (e = last->pred; e ; e = e_next) for (e = last->pred; e; e = e_next)
{ {
basic_block bb = e->src; basic_block bb = e->src;
rtx jump; rtx jump;
...@@ -6953,12 +6948,12 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6953,12 +6948,12 @@ thread_prologue_and_epilogue_insns (f)
continue; continue;
if (JUMP_LABEL (jump)) if (JUMP_LABEL (jump))
LABEL_NUSES (JUMP_LABEL (jump))--; LABEL_NUSES (JUMP_LABEL (jump))--;
/* If this block has only one successor, it both jumps /* If this block has only one successor, it both jumps
and falls through to the fallthru block, so we can't and falls through to the fallthru block, so we can't
delete the edge. */ delete the edge. */
if (bb->succ->succ_next == NULL) if (bb->succ->succ_next == NULL)
continue; continue;
} }
else else
continue; continue;
...@@ -6973,7 +6968,7 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6973,7 +6968,7 @@ thread_prologue_and_epilogue_insns (f)
emit_barrier_after (last->end); emit_barrier_after (last->end);
emit_return_into_block (last, epilogue_line_note); emit_return_into_block (last, epilogue_line_note);
epilogue_end = last->end; epilogue_end = last->end;
goto epilogue_done; goto epilogue_done;
} }
} }
#endif #endif
...@@ -6985,7 +6980,7 @@ thread_prologue_and_epilogue_insns (f) ...@@ -6985,7 +6980,7 @@ thread_prologue_and_epilogue_insns (f)
There really shouldn't be a mixture -- either all should have There really shouldn't be a mixture -- either all should have
been converted or none, however... */ been converted or none, however... */
for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next) for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
if (e->flags & EDGE_FALLTHRU) if (e->flags & EDGE_FALLTHRU)
break; break;
if (e == NULL) if (e == NULL)
...@@ -7003,7 +6998,7 @@ thread_prologue_and_epilogue_insns (f) ...@@ -7003,7 +6998,7 @@ thread_prologue_and_epilogue_insns (f)
record_insns (seq, &epilogue); record_insns (seq, &epilogue);
seq = gen_sequence (); seq = gen_sequence ();
end_sequence(); end_sequence ();
insert_insn_on_edge (seq, e); insert_insn_on_edge (seq, e);
inserted = 1; inserted = 1;
...@@ -7016,7 +7011,7 @@ epilogue_done: ...@@ -7016,7 +7011,7 @@ epilogue_done:
#ifdef HAVE_sibcall_epilogue #ifdef HAVE_sibcall_epilogue
/* Emit sibling epilogues before any sibling call sites. */ /* Emit sibling epilogues before any sibling call sites. */
for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next) for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
{ {
basic_block bb = e->src; basic_block bb = e->src;
rtx insn = bb->end; rtx insn = bb->end;
...@@ -7057,7 +7052,7 @@ epilogue_done: ...@@ -7057,7 +7052,7 @@ epilogue_done:
note before the end of the first basic block, if there isn't note before the end of the first basic block, if there isn't
one already there. */ one already there. */
for (insn = prologue_end; insn ; insn = prev) for (insn = prologue_end; insn; insn = prev)
{ {
prev = PREV_INSN (insn); prev = PREV_INSN (insn);
if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0) if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
...@@ -7103,7 +7098,7 @@ epilogue_done: ...@@ -7103,7 +7098,7 @@ epilogue_done:
/* Similarly, move any line notes that appear after the epilogue. /* Similarly, move any line notes that appear after the epilogue.
There is no need, however, to be quite so anal about the existance There is no need, however, to be quite so anal about the existance
of such a note. */ of such a note. */
for (insn = epilogue_end; insn ; insn = next) for (insn = epilogue_end; insn; insn = next)
{ {
next = NEXT_INSN (insn); next = NEXT_INSN (insn);
if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0) if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
...@@ -7152,7 +7147,7 @@ reposition_prologue_and_epilogue_notes (f) ...@@ -7152,7 +7147,7 @@ reposition_prologue_and_epilogue_notes (f)
next = NEXT_INSN (note); next = NEXT_INSN (note);
/* Whether or not we can depend on BLOCK_HEAD, /* Whether or not we can depend on BLOCK_HEAD,
attempt to keep it up-to-date. */ attempt to keep it up-to-date. */
if (BLOCK_HEAD (0) == note) if (BLOCK_HEAD (0) == note)
BLOCK_HEAD (0) = next; BLOCK_HEAD (0) = next;
...@@ -7189,7 +7184,7 @@ reposition_prologue_and_epilogue_notes (f) ...@@ -7189,7 +7184,7 @@ reposition_prologue_and_epilogue_notes (f)
break; break;
} }
/* Whether or not we can depend on BLOCK_HEAD, /* Whether or not we can depend on BLOCK_HEAD,
attempt to keep it up-to-date. */ attempt to keep it up-to-date. */
if (n_basic_blocks if (n_basic_blocks
&& BLOCK_HEAD (n_basic_blocks-1) == insn) && BLOCK_HEAD (n_basic_blocks-1) == insn)
...@@ -7207,7 +7202,7 @@ reposition_prologue_and_epilogue_notes (f) ...@@ -7207,7 +7202,7 @@ reposition_prologue_and_epilogue_notes (f)
static void static void
mark_temp_slot (t) mark_temp_slot (t)
struct temp_slot *t; struct temp_slot *t;
{ {
while (t) while (t)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment