Thu Mar 25 14:04:54 EST 1999 Andrew MacLeod <amacleod@cygnus.com>
* rtl.texi (RTX_FRAME_RELATED_P): Add documentation.
* rtl.h (struct rtx_def): Update comment for frame_related field.
(set_unique_reg_note): Declare prototype.
* dwarf2out.c (dwarf2out_frame_debug_expr): Split out from
'dwarf2out_frame_debug' to handle only expressions, and process
component parts of a PARALLEL expression.
(dwarf2out_frame_debug): Process insns only, and call
new function 'dwarf2out_frame_debug_expr' for patterns.
* emit-rtl.c (set_unique_reg_note): New function to add a reg note,
but if there is an existingone, deletes it first.
* expmed.c (expand_mult, expand_divmod): Use set_unique_reg_note.
* optabs.c (add_equal_note, expand_binop): Use set_unique_reg_note.
(emit_no_conflict_block, emit_libcall_block): Use set_unique_reg_note.
(expand_fix): Use set_unique_reg_note.
From-SVN: r25976
* rtl.def (POST_MODIFY, PRE_MODIFY): New generalized operators for
addressing modes with side effects. These are currently
placeholders for the C4x target.
From-SVN: r23228
* reload.h (compute_use_by_pseudos): Declare.
* reload1.c (spilled_pseudos, insns_need_reload): New variables.
(something_needs_reloads): Delete variable.
(finish_spills): New function.
(compute_use_by_pseudos): New function.
(delete_caller_save_insns): Lose argument FIRST. All callers changed.
Use the reload_insn_chain instead of walking the rtl directly.
(reload): Allocate and free spilled_pseudos.
Ensure that all calls of spill_hard_reg are followed by a call to
finish_spills.
Use the insns_need_reload list instead of something_needs_reloads
to find out if reload_as_needed must be called.
Clear unused_insn_chains at the end.
(calculate_needs_all_insns): Lose FIRST parameter. All callers
changed.
Delete code to keep track of current basic block.
Walk reload_insn_chain instead of the rtl structure. Build the
insns_need_reload chain.
Remember which insns need reloading/elimination by setting the
appropriate fields in struct insn_chain, not by putting modes on the
insn.
(calculate_needs): Lose THIS_BLOCK arg. Accept arg CHAIN instead of
arg INSN. All callers changed.
Delete declaration of struct needs.
Don't set something_needs_reloads.
Record insn needs in the CHAIN argument.
(spill_hard_reg): Record the affected pseudos in spilled_pseudos.
(reload_as_needed): Lose FIRST arg. All callers changed.
Walk the reload_insn_chain instead of the rtx structure.
Delete code to keep track of current basic block.
Rename one of the NEXT variables to OLD_NEXT.
(allocate_reload_reg): Accept arg CHAIN instead of arg INSN. All
callers changed.
(choose_reload_regs): Likewise.
(emit_reload_insns): Replace INSN and BB args with arg CHAIN. All
callers changed.
* caller-save.c (MOVE_MAX_WORDS): New macro. Use it throughout
instead of (MOVE_MAX / UNITS_PER_WORD) computation.
(hard_regs_live, hard_regs_need_restore): Delete variables.
(n_regs_saved): Now static.
(referenced_regs, this_insn_sets): New variables.
(setup_save_areas): Restructure the code a bit.
(restore_referenced_regs): Delete function.
(mark_referenced_regs): New function, similar to the old
restore_referenced_regs, but mark registers in referenced_regs.
(clear_reg_live): Delete function.
(mark_set_regs): Renamed from set_reg_live. All callers changed.
Only mark registers in this_insn_sets.
(save_call_clobbered_regs): Rework this function to walk the
reload_insn_chain instead of using the list of instructions directly.
Delete code to keep track of register lives, compute live regs on the
fly from information in the chain.
Instead of calling restore_referenced_regs, use mark_referenced_regs,
then walk the set it computes and call insert_restore as appropriate.
(insert_restore): Lose INSN and BLOCK args. Add CHAIN arg. All
callers changed.
Restructure the code a bit. Test hard_regs_saved instead of
hard_regs_need_restore.
(insert_save): Lose INSN and BLOCK args. Add CHAIN and TO_SAVE
args. All callers changed.
Restructure the code a bit. Use TO_SAVE to determine which regs to
save instead of more complicated test.
(insert_one_arg): Lose INSN and BLOCK args. Add CHAIN arg. All
callers changed.
Create a new insn_chain structure for the new insn and place it
into the chain.
* rtl.texi: Update documentation to reflect that reload no longer
puts modes on the insns.
From-SVN: r23074
* rtl.h (enum reg_note): Add REG_FRAME_RELATED_EXPR.
* rtl.c (reg_note_name): Likewise.
* rtl.texi (REG_NOTES): Likewise.
* dwarf2out.c (dwarf2out_frame_debug): Use it. Recognize a store
without an offset.
From-SVN: r22273
* invoke.texi (-fstrict-aliasing): Document.
* rtl.texi (MEM_ALIAS_SET): Document.
* flags.h (flag_strict_aliasing): Declare.
* toplev.c (flag_strict_aliasing): Define.
(f_options): Add -strict-aliasing.
(main): Set flag_strict_aliasing if -O2 or higher.
* tree.h (tree_type): Add alias_set field.
(TYPE_ALIAS_SET): New macro.
(TYPE_ALIAS_SET_KNOWN_P): Likewise.
(get_alias_set): Declare.
* tree.c (lang_get_alias_set): Define.
(make_node): Initialize TYPE_ALIAS_SET.
(get_alias_set): New function.
* print-tree.c (print_node): Dump the alias set for a type.
* c-tree.h (c_get_alias_set): Declare.
* c-common.c (c_get_alias_set): New function.
* c-decl.c (init_decl_processing): Set lang_get_alias_set.
* expr.c (protect_from_queue): Propogage alias sets.
(expand_assignment): Calculate alias set for new MEMs.
(expand_expr): Likewise.
* function.c (put_var_into_stack): Likewise.
(put_reg_into_stack): Likewise.
(gen_mem_addressof): Likewise.
(assign_parms): Likewise.
* stmt.c (expand_decl): Likewise.
* varasm.c (make_decl_rtl): Eliminate redundant clearing of
DECL_RTL. Calculate alias set for new MEMs.
* rtl.def (REG): Add dummy operand.
(MEM): Add extra operand to store the MEM_ALIAS_SET.
* rtl.h (MEM_ALIAS_SET): New macro.
(gen_rtx_MEM): Declare.
* emit-rtl.c (gen_rtx_MEM): New function.
* gengenrtl.c (sepcial_rtx): Make MEMs special.
* alias.c (CHECK_ALIAS_SETS_FOR_CONSISTENCY): New macro.
(DIFFERENT_ALIAS_SETS_P): Likewise.
(canon_rtx): Propogate the alias set to the new MEM.
(true_dependence): Check the alias sets.
(anti_dependence): Likewise.
(output_dependence): Likewise.
* explow.c (stabilize): Progoate alias sets.
* integrate.c (copy_rtx_and_substitute): Likewise.
* final.c (alter_subreg): Make sure not to leave MEM_IN_STRUCT_P
in an unpredictable state. Propogate alias sets.
* reload1.c (reload): Clear MEM_ALIAS_SET for new MEMs about which
we have no alias information.
From-SVN: r20719
* reload.c (find_reloads): Emit USEs to mark where a pseudo
is reloaced with the MEM of its stack slot.
* reload1.c (cannot_omit_stores): Delete.
(reload): Don't initialize it.
Don't apply avoid_return_reg logic to USEs.
When done, remove USEs that have a REG_EQUAL note on them.
(emit_reload_insns): Handle case where we have inherited a MEM.
(delete_output_reload): Don't use cannot_omit_stores.
From-SVN: r19508