Jonathan Larmour [Tue, 12 Oct 1999 16:47:08 +0000 (16:47 +0000)]
eabi-ctors.c (__do_global_ctors): Run through __CTOR_LIST__ in opposite order...
* config/rs6000/eabi-ctors.c (__do_global_ctors): Run through
__CTOR_LIST__ in opposite order, which is the correct order for sorted
constructors.
(__do_global_dtors): similarly for __DTOR_LIST__.
Geoff Keating [Mon, 11 Oct 1999 03:35:14 +0000 (03:35 +0000)]
mips.c (mips_build_va_list): Correct TREE_CHAIN setting when hard-float.
* config/mips/mips.c (mips_build_va_list): Correct
TREE_CHAIN setting when hard-float.
(mips_va_start): Use corrected setting.
(mips_va_arg): Likewise. Also pass a tree to build of
POSTINCREMENT_EXPR rather than a naked 'int'.
Kaveh R. Ghazi [Sun, 10 Oct 1999 13:02:41 +0000 (13:02 +0000)]
ansidecl.h (HAVE_GCC_VERSION): New macro.
include:
* ansidecl.h (HAVE_GCC_VERSION): New macro. Use instead of
explicitly testing __GNUC__ and __GNUC_MINOR__.
(ATTRIBUTE_PRINTF): Use `__format__', not `format'.
gcc:
* cppinit.c: Use HAVE_GCC_VERSION instead of explicitly testing
__GNUC__ and __GNUC_MINOR__.
* gansidecl.h: Likewise.
* rtl.c: Likewise.
* rtl.h: Likewise.
* toplev.h: Likewise.
* tree.c: Likewise.
* tree.h: Likewise.
* varray.c: Likewise.
* varray.h: Likewise.
cp:
* cp-tree.h: Use HAVE_GCC_VERSION instead of explicitly testing
__GNUC__ and __GNUC_MINOR__.
f:
* proj.h: Use HAVE_GCC_VERSION instead of explicitly testing
__GNUC__ and __GNUC_MINOR__. Don't define BUILT_WITH_270.
Define macro UNUSED in terms of ATTRIBUTE_UNUSED.
Jeffrey A Law [Sun, 10 Oct 1999 05:30:28 +0000 (05:30 +0000)]
gcse.c (gcse_main): Avoid global optimizations if we have a large number of basic blocks and the...
* gcse.c (gcse_main): Avoid global optimizations if we have a
large number of basic blocks and the ratio of edges to blocks
is high.
(delete_null_pointer_checks): Likewise.
Mark Mitchell [Sat, 9 Oct 1999 21:06:03 +0000 (21:06 +0000)]
cp-tree.h (make_rtl_for_local_static): New function.
* cp-tree.h (make_rtl_for_local_static): New function.
* decl.c (make_rtl_for_nonlocal_decl): Move code to create RTL for
local statics ...
(make_rtl_for_local_static): Here.
* semantics.c (expand_stmt): Use make_rtl_for_local_static.
* Makefile.in (flow.o): Depend on TREE_H.
* basic-block.h (REG_SET_EQUAL_P): New.
(XOR_REG_SET): New.
(n_edges): Declare.
(free_regset_vector): Remove declaration.
(flow_delete_insn_chain): Declare.
(enum update_life_extent): New.
(update_life_info, count_or_remove_death_notes): Declare.
* combine.c (distribute_notes) [REG_DEAD]: Stop search at bb->head.
Verify register live at bb->global_live_at_start before adding USE.
* flow.c (HAVE_epilogue, HAVE_prologue): Provide default.
(CLEAN_ALLOCA): New.
(n_edges): New.
(PROP_*): New flags.
(find_basic_blocks_1): Use alloc_EXPR_LIST.
(clear_edges): Zero n_edges.
(make_edge): Increment n_edges.
(split_edge): Don't allocate bb->local_set. Increment n_edges.
(flow_delete_insn_chain): Export.
(delete_block): Decrement n_edges.
(merge_blocks_nomove): Likewise.
(life_analysis): Give life_analysis_1 PROP flags.
(verify_wide_reg_1, verify_wide_reg): New.
(verify_local_live_at_start): New.
(update_life_info): Rewrite to call into propogate_block.
(mark_reg): New.
(mark_regs_live_at_end): After reload, if epilogue as rtl,
always mark stack pointer. Conditionally mark PIC register.
After reload, mark call-saved registers, return regsiters.
(life_analysis_1): Accept PROP flags not remove_dead_code.
Call mark_regs_live_at_end before zeroing regs_ever_live.
Use calculate_global_regs_live. Copy global_live_at_end before
calling final propagate_block. Zero reg_next_use on exit.
(calculate_global_regs_live): New.
(allocate_bb_life_data): Don't allocate bb->local_set.
(init_regset_vector, free_regset_vector): Remove.
(propagate_block): Accept FLAGS not FINAL or REMOVE_DEAD_CODE.
Test flags before every operation. Warn if prologue/epilogue insn
would have been deleted.
(mark_set_regs, mark_set_1): Accept and use FLAGS.
Use alloc_EXPR_LIST.
(mark_used_regs): Accept and use FLAGS, not FINAL.
Remove special handling for RETURN.
(try_pre_increment): Use alloc_EXPR_LIST.
(dump_flow_info): Dump n_edges.
(unlink_insn_chain, split_hard_reg_notes): Remove.
(maybe_add_dead_note, maybe_add_dead_note_use): Remove.
(find_insn_with_note, new_insn_dead_notes): Remove.
(update_n_sets, sets_reg_or_subreg_1, sets_reg_or_subreg): Remove.
(maybe_remove_dead_notes, prepend_reg_notes): Remove.
(replace_insns): Remove.
(count_or_remove_death_notes): New.
(verify_flow_info): Abort on error after all checks.
(remove_edge): Decrement n_edges.
(remove_fake_edges): Tweek format.
* haifa-sched.c (schedule_insns): Use split_all_insns.
* output.h (update_life_info): Remove declaration.
* recog.c (split_all_insns): From the corpse of split_block_insns,
do the whole function block by block. Use update_life_info.
(recog_last_allowed_insn): New.
(recog_next_insn): Mind it.
(peephole2_optimize): Set it. Walk backwards through blocks.
Use update_life_info.
* rtl.h (update_flow_info, replace_insns): Remove declarations.
(split_all_insns): Declare.
* toplev.c (rest_of_compilation): Thread prologue before flow2.
Use split_all_insns.
Anthony Green [Thu, 7 Oct 1999 13:26:01 +0000 (13:26 +0000)]
During class file generation...
During class file generation, generate_classfile occasionally writes
out a bunch of data and then skips backwards to fill in blanks. When
configured with --enable-checking, this patching up will often trip
the checking code. This change introduces UNSAFE_PUTx macros which
never use CHECK_PUT. These should only be used in cases we know
CHECK_PUT will fail.
Brendan Kehoe [Wed, 6 Oct 1999 17:48:17 +0000 (17:48 +0000)]
decl.c (grokdeclarator): Only warn about non-zero arrays if !in_system_header (linux socketbits.h can...
* decl.c (grokdeclarator): Only warn about non-zero arrays if
!in_system_header (linux socketbits.h can give this for
__cmsg_data, which is using a GNU extension).
* loop.c (strength_reduce): Initialize variable
`unrolled_insn_copies'.
(cmp_combine_givs_stats, cmp_recombine_givs_stats): Add static
prototypes. Change these functions to take const PTR parameters
to avoid prototype conflict when used as the comparson argument
for qsort.
(check_dbra_loop): Initialize variable `comparison_val'.
* reload.c (debug_reload_to_stream, debug_reload): Add prototypes.
(get_secondary_mem): Mark parameter `x' with ATTRIBUTE_UNUSED.
(find_valid_class): Initialize variable `best_class'.
(find_reloads): Call memcpy, not bcopy.
flow.c (make_edge): Accept an optional 2D bitmap in which to cache edge existence.
* flow.c (make_edge): Accept an optional 2D bitmap in which
to cache edge existence. Update all callers.
(make_label_edge, make_eh_edge): Pass through the edge cache.
(make_edges): Provide the cache.
Mark Mitchell [Tue, 5 Oct 1999 16:19:04 +0000 (16:19 +0000)]
method.c (synthesize_method): Call setup_vtbl_ptr for destructors.
* method.c (synthesize_method): Call setup_vtbl_ptr for destructors.
* decl.c (start_function): Set current_in_charge_parm for
constructors, too, where appropriate.
* search.c (fixup_all_virtual_upcast_offsets): New function.
(expand_indirect_vtbls_init): Use it.