Richard Kenner [Sat, 25 Sep 1993 12:20:33 +0000 (08:20 -0400)]
(BYTE_LOADS_EXTEND, LOAD_EXTEND): Deleted.
(subst, force_to_mode, nonzero_bits, num_sign_bit_copies): Use new
macros LOAD_EXTEND_OP and WORD_REGISTER_OPERATION instead of
BYTE_LOADS_*_EXTEND and LOAD_EXTEND.
stmt.c: (expand_goto): Set hard_frame_pointer_rtx when restoring the frame.
* stmt.c: (expand_goto): Set hard_frame_pointer_rtx when restoring
the frame. Use it when restoring other registers.
(expand_end_bindings): ARG_POINTER_REGNUM will be eliminated into
HARD_FRAME_POINTER_REGNUM, not FRAME_POINTER_REGNUM; adjust code accordingly.
sched.c: (memrefs_conflict_p): We can work out whether references via...
* sched.c: (memrefs_conflict_p): We can work out whether references
via hard_frame_pointer_rtx are likely to conflict.
(attach_deaths, case REG): Don't add death notes for
HARD_FRAME_POINTER_REGNUM.
rtlanal.c: (rtx_unstable_p): HARD_FRAME_POINTER_REGNUM is not an unstable register.
* rtlanal.c: (rtx_unstable_p): HARD_FRAME_POINTER_REGNUM is not
an unstable register.
(rtx_varies_p, case REG): hard_frame_pointer_rtx is invariant.
(rtx_addr_can_trap_p, case REG): hard_frame_pointer_rtx won't trap.
reorg.c: (mark_referenced_resource): if frame_pointer_needed...
* reorg.c: (mark_referenced_resource): if frame_pointer_needed,
HARD_FRAME_POINTER_REGNUM is also a referenced resource.
(mark_target_live_regs): value in HARD_FRAME_POINTER_REGNUM is not
call-clobbered.
(dbr_schedule): HARD_FRAME_POINTER_REGNUM should be valid at the
end of a function.
reload1.c: (init_reload): use HARD_FRAME_POINTER_REGNUM instead of FRAME_POINTER_REGNUM.
* reload1.c: (init_reload): use HARD_FRAME_POINTER_REGNUM instead of
FRAME_POINTER_REGNUM.
(reload): Only prohibit elimination of HARD_FRAME_POINTER_REGNUM, not
FRAME_POINTER_REGNUM if frame_pointer_needed. Never prohibit
elimination of FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM.
Mark HARD_FRAME_POINTER_REGNUM as live at the start of a block if
it is still needed after elimination.
(eliminate_regs): For non-local goto's, don't delete stores into the
hard frame pointer.
(eliminate_regs_in_insn): adjust comment.
(mark_not_eliminable): if frame_pointer_rtx and hard_frame_pointer_rtx
are not the same, then frame_pointer_rtx is eliminable;
hard_frame_pointer_rtx never is if it is set..
(order_regs_for_reload): HARD_FRAME_POINTER_REGNUM is a bad spill reg.
(choose_reload_regs): HARD_FRAME_POINTER_REGNUM is a bad choice.
reload.c: (immune_p): Constants never overlap hard frame pointer references.
* reload.c: (immune_p): Constants never overlap hard frame pointer references.
(find_reloads_address): Compute invalid references to the hard
frame pointer in a register; also (reg + const)
and (reg + reg + const).
flow.c: (life_analysis): Mark HARD_FRAME_POINTER_REGNUM as live at the end of the function.
* flow.c: (life_analysis): Mark HARD_FRAME_POINTER_REGNUM as live at
the end of the function.
(insn_dead_p): Don't delete insns that set the hard frame pointer.
(mark_set_1): Don't add death information about
HARD_FRAME_POINTER_REGNUM.
(mark_used_regs, case REG): Don't put HARD_FRAME_POINTER_REGNUM in
regs_ever_live. Don't mark it as needed either.
* function.c: (instantiate_virtual_regs_1, case MEM): references to
MEM via the hard frame pointer shouldn't be copied.
emit-rtl.c: (hard_frame_pointer_rtx): New variable.
* emit-rtl.c: (hard_frame_pointer_rtx): New variable.
(gen_rtx): return hard_frame_pointer_rtx if generating rtl
for HARD_FRAME_POINTER_REGNUM.
(enit_emit_once): Generate initial rtl for hard_frame_pointer_rtx.
cse.c: (FIXED_REGNO_P): HARD_FRAME_POINTER_REGNUM is fixed.
* cse.c: (FIXED_REGNO_P): HARD_FRAME_POINTER_REGNUM is fixed.
(CHEAP_REG): HARD_FRAME_POINTER_REGNUM is cheap.
(FIXED_BASE_PLUS): Allow hard frame pointer as base.
(NONZERO_BASE_PLUS_P): Likewise.
(cannon_hash, case REG): Add HARD_FRAME_POINTER_REGNUM to list of
special registers for SMALL_REGISTER_CLASSES.
(find_best_addr): Addresses containing HARD_FRAME_POINTER_REGNUM
cannot be replaced.
(cse_main): value in HARD_FRAME_POINTER_REGNUM is preserved across calls.
combine.c: (combinable_i3_pat): Don't add REG_DEAD notes for HARD_FRAME_POINTER_REGNUM.
* combine.c: (combinable_i3_pat): Don't add REG_DEAD notes for
HARD_FRAME_POINTER_REGNUM.
(subst, case SUBREG): Don't change register number or mode if it
is HARD_FRAME_POINTER_REGNUM.
Richard Stallman [Fri, 24 Sep 1993 19:07:10 +0000 (19:07 +0000)]
(eliminate_regs): Specially handle the case where INSN is a note (an EXPR_LIST or INSN_LIST).
(eliminate_regs): Specially handle the case where INSN
is a note (an EXPR_LIST or INSN_LIST).
(eliminate_regs_in_insn): Pass the notes as INSN,
when calling eliminate_insn to process the notes.
Richard Stallman [Thu, 23 Sep 1993 06:11:30 +0000 (06:11 +0000)]
(init_reg_last_arrays): New function.
(combine_instructions): Use it.
(force_to_mode): Narrow mask to fit mode (except VOIDmode).
(record_value_for_reg): When zeroing reg_last_set_value, also
zero reg_last_set_{mode,nonzero_bits,sign_bit_copies}.
(record_dead_and_set_regs): Likewise.
Mike Stump [Wed, 22 Sep 1993 18:43:15 +0000 (18:43 +0000)]
cp-class.c (finish_struct): Move special C++ only code that handles anonymous unions inside structures here.
* cp-class.c (finish_struct): Move special C++ only code that
handles anonymous unions inside structures here.
* stor-layout.c (layout_record): From here.
(objc_write_type, objc_write_types): Take take char** args for writing strings in stead of char* to match NeXT.
(objc_write_type, objc_write_types): Take
take char** args for writing strings in stead of char* to
match NeXT. Also correct some typos in error messages.