Commit Graph

676 Commits

Author SHA1 Message Date
Eric Christopher
4a913dd6b7 flow.c (propagate_one_insn): Add error message and print out insn for debugging.
2002-01-15  Eric Christopher  <echristo@redhat.com>

	* flow.c (propagate_one_insn): Add error message and print out
	insn for debugging.

From-SVN: r48878
2002-01-15 20:50:22 +00:00
Kazu Hirata
23d1aac4b5 except.c: Fix comment formatting.
* except.c: Fix comment formatting.
	* flags.h: Likewise.
	* flow.c: Likewise.
	* predict.c: Likewise.
	* simplify-rtx.c: Likewise.
	* system.h: Likewise.
	* vmsdbg.h: Likewise.
	* vmsdbgout.c: Likewise.

From-SVN: r48349
2001-12-28 18:17:54 +00:00
Aldy Hernandez
e817125dbb output.h (regno_uninitialized): Make argument unsigned.
2001-12-11  Aldy Hernandez  <aldyh@redhat.com>

        * output.h (regno_uninitialized): Make argument unsigned.

        * flow.c (regno_uninitialized): Make regno unsigned.

From-SVN: r47910
2001-12-12 01:53:44 +00:00
Aldy Hernandez
448cad060a flow.c (find_regno_partial): Indent properly.
2001-12-11  Aldy Hernandez  <aldyh@redhat.com>

        * flow.c (find_regno_partial): Indent properly.  Add a default to
        switch.

From-SVN: r47892
2001-12-11 20:17:55 +00:00
Joseph Myers
d6a7951f20 ChangeLog.2, [...]: Fix spelling errors.
* ChangeLog.2, ChangeLog.3, ChangeLog.5, ChangeLog, alias.c,
	cfgbuild.c, expmed.c, expr.c, final.c, flow.c, fold-const.c,
	function.c, config/alpha/alpha.md, config/alpha/vms-ld.c,
	config/arm/arm.c, config/arm/arm.h, config/c4x/libgcc.S,
	config/i370/i370.c, config/i386/i386.c,
	config/i386/i386-interix.h, config/i386/i386.md,
	config/i386/i386.h, config/i386/netbsd-elf.h, config/ia64/ia64.c,
	config/m32r/m32r-protos.h, config/mcore/mcore.h,
	config/rs6000/rs6000.h, config/sparc/linux64.h,
	config/sparc/sparc.c, config/v850/v850-protos.h,
	config/cris/cris.h, config/s390/s390.md, config/elfos.h: Fix
	spelling errors.

From-SVN: r47815
2001-12-09 20:13:19 +00:00
Andrew MacLeod
69da3e3a72 flow.c (find_regno_partial): Return register, not the expression the register is in.
2001-12-06  Andrew MacLeod <amacleod@redhat.com>

	* flow.c (find_regno_partial): Return register, not the expression
	the register is in.

From-SVN: r47720
2001-12-06 14:39:11 +00:00
Andrew MacLeod
0626ef8add rtl.h (initialize_uninitialized_subregs): New prototype.
2001-12-04  Andrew MacLeod  <amacleod@redhat.com>

	* rtl.h (initialize_uninitialized_subregs): New prototype.
	* toplev.c (rest_of_compilation): Call initialize_uninitialized_subregs
	when optimization is on.
	* flow.c (find_regno_partial): Find subregs within an expression.
	(initialize_uninitialized_subregs): Initialize live on entry registers
	which are used in subreg expressions.

From-SVN: r47644
2001-12-05 01:39:41 +00:00
Jakub Jelinek
b318748ff4 flow.c (ior_reg_cond): Return NULL if ! add and rtx wasn't optimized.
* flow.c (ior_reg_cond): Return NULL if ! add and rtx wasn't optimized.
	Return correct value if one of the subexpressions was optimized to
	0 resp. 1.  Optimize (x | A) | x and (x & A) | x.
	(and_reg_cond): Similarly.

	* gcc.c-torture/compile/20011130-2.c: New test.

From-SVN: r47602
2001-12-04 10:33:17 +01:00
Kaveh R. Ghazi
ec8e621da9 aix.h (REG_SIZE): Don't #undef.
* ia64/aix.h (REG_SIZE): Don't #undef.
	* sparc.h (REG_SIZE): Delete.
	* flow.c (mark_used_regs): Don't use REG_SIZE.
	* regs.h (REG_SIZE): Delete.

From-SVN: r47378
2001-11-27 15:32:18 +00:00
Joseph Myers
eaec9b3d7e ChangeLog.2, [...]: Fix spelling errors.
* ChangeLog.2, ChangeLog.3, ChangeLog.4, ChangeLog.5, ChangeLog,
	cfg.c, cfganal.c, cfgcleanup.c, cfglayout.c, cfgloop.c, cfgrtl.c,
	collect2.c, combine.c, config.in, configure, configure.in,
	conflict.c, dwarf2out.c, dwarfout.c, except.c, final.c, flow.c,
	genattrtab.c, ggc-page.c, jump.c, lcm.c, predict.c, reg-stack.c,
	reload1.c, rtlanal.c, sched-rgn.c, toplev.c, unwind-dw2-fde.h: Fix
	spelling errors.

From-SVN: r46928
2001-11-11 11:25:28 +00:00
Geoffrey Keating
ff6051b76e flow.c (insn_dead_p): Allow for AUTO_INC notes all the time.
* flow.c (insn_dead_p): Allow for AUTO_INC notes all the time.

In testsuite/:

	* gcc.c-torture/execute/20011109-2.c: New test.

From-SVN: r46901
2001-11-09 23:06:04 +00:00
Jan Hubicka
473fb060f3 basic-block.h (purge_all_dead_edges): Add update_life_p argument.
* basic-block.h (purge_all_dead_edges): Add update_life_p argument.
	* cfgcleanup.c (merge_blocks): Update the life flag after merging;
	fix warning.
	* cfgrtl.c (purge_all_dead_edges): Allow updating of liveness.
	(life_analysis): call purge_all_dead_edges after deleting noops.
	(delete_noop_move): Do not purge CFG.
	* toplev.c (rest_of_compilation): Update purge_all_dead_edges call.

From-SVN: r46605
2001-10-29 11:45:45 +00:00
Joseph Myers
ff7cc30768 ChangeLog.0, [...]: Fix spelling errors.
* ChangeLog.0, ChangeLog.1, ChangeLog.2, ChangeLog.3, ChangeLog.4,
	ChangeLog.5, ChangeLog, FSFChangeLog.10, FSFChangeLog.11,
	c-common.c, c-common.h, c-parse.in, c-typeck.c, cfg.c, config.gcc,
	configure, configure.in, except.c, except.h, flow.c, function.c,
	gcc.c, gcse.c, genrecog.c, libgcc2.c, loop.c, loop.h, params.def,
	predict.def, predict.h, reg-stack.c, regmove.c, sched-deps.c,
	sched-int.h, sibcall.c, ssa.c, stringpool.c, toplev.c, tree.c,
	unroll.c: Fix spelling errors.

From-SVN: r46595
2001-10-28 20:09:17 +00:00
Andreas Jaeger
16e99e29fc flow.c (clear_log_links): Remove unused variable.
* flow.c (clear_log_links): Remove unused variable.
	* cfgcleanup.c (cleanup_cfg): Likewise.

From-SVN: r46537
2001-10-26 11:20:01 +02:00
Richard Henderson
e9cf0934ea flow.c (clear_log_links): Use free_INSN_LIST_list, not free_EXPR_LIST_list for LOG_LINKS.
* flow.c (clear_log_links): Use free_INSN_LIST_list, not
        free_EXPR_LIST_list for LOG_LINKS.

From-SVN: r46401
2001-10-22 00:09:53 -07:00
Jan Hubicka
b932f770f7 basic-block.h (find_sub_basic_blocks): Use sbitmap parameter.
* basic-block.h (find_sub_basic_blocks): Use sbitmap parameter.
	* cfgbuild.c (find_bb_boundaries, compute_outgoing_frequencies):
	Break out from ...
	(find_sub_basic_blocks): ... here;
	(find_many_sub_basic_blocks): New.
	* recog.c (split_all_insns): Update find_sub_basic_blocks call.

	* i386.h (ASM_PREFERRED_EH_DATA_FORMAT): Define sdata4.

	* i386.c (ix86_va_arg): Kill indirect_p handling; fix aliasing issues.:

	* i386.c (split_di, split_ti): Revamp to use simplify_subreg.

	* timevar.def (TV_LIFE, TV_LIFE_UPDATE, TV_MODE_SWITCH): new.
	* flow.c (update_life_info): Measure time.
	* c-decl.c: Include timevar.h
	(c_expand_body): Measure time.
	* toplev.c (rest_of_compilation): Measure time of mode switching
	separately.
	* Makefile.in (c-decl.o, cfgcleanup.o): Add dependancy.

	* toplev.c (flag_asynchronous_unwind_tables): New global variable.
	(lang_independent_options): Add asynchronous-unwind-tables
	(toplev_main): flag_asynchronous_unwind_tables implies
	flag_unwind_tables.
	* flags.h (flag_asynchronous_unwind_tables): Declare.
	* dwarf2out.c (dwarf2out_stack_adjust): Take into account
	flag_asynchronous_unwind_tables.
	(output_call_frame_info): Likewise.
	* invoke.texi (-fasynchronous-unwind-tables): Document.
	* i386.c (optimization_options): Enable
	flag_asynchronous_unwind_tables.

	* i386.c (ix86_expand_setcc):  Always expect target to be QImode.
	* i386.md (s* expanders): Destination is QImode.

	* toplev.c (rest_of_compilation): Do not call clear_log_links.
	* rtl.h (clear_log_links): Kill.
	* flow.c (clear_log_links): Make static; accept blocks parameter;
	do no clear life info.
	(update_life_info): Call clear_log_links.

	* cfganal.c (forwarder_block_p): Avoid active_insn_p calls.

From-SVN: r46374
2001-10-20 10:04:00 +00:00
John Wehle
eb9d8e4d0b rtlanal.c (noop_move_p): Insns with a REG_RETVAL note should not be considered as a no-op.
* rtlanal.c (noop_move_p): Insns with a REG_RETVAL note
	should not be considered as a no-op.
	* flow.c (delete_noop_moves): Handle REG_LIBCALL notes.

From-SVN: r46174
2001-10-11 03:51:24 +00:00
Stan Shebs
b36948478c alias.c: Remove uses of "register" specifier in declarations of arguments and local...
2001-10-10  Stan Shebs  <shebs@apple.com>

        * alias.c: Remove uses of "register" specifier in declarations
        of arguments and local variables.
        * c-common.c: Ditto.
        * c-convert.c: Ditto.
        * c-decl.c: Ditto.
        * c-format.c: Ditto.
        * c-semantics.c: Ditto.
        * c-typeck.c: Ditto.
        * caller-save.c: Ditto.
        * calls.c: Ditto.
        * cfg.c: Ditto.
        * cfgbuild.c: Ditto.
        * cfgrtl.c: Ditto.
        * collect2.c: Ditto.
        * combine.c: Ditto.
        * convert.c: Ditto.
        * cppexp.c: Ditto.
        * cppfiles.c: Ditto.
        * cse.c: Ditto.
        * dbxout.c: Ditto.
        * defaults.h: Ditto.
        * df.c: Ditto.
        * dwarf2out.c: Ditto.
        * dwarfout.c: Ditto.
        * emit-rtl.c: Ditto.
        * explow.c: Ditto.
        * expmed.c: Ditto.
        * expr.c: Ditto.
        * final.c: Ditto.
        * fix-header.c: Ditto.
        * floatlib.c: Ditto.
        * flow.c: Ditto.
        * fold-const.c: Ditto.
        * function.c: Ditto.
        * gcc.c: Ditto.
        * gcse.c: Ditto.
        * gen-protos.c: Ditto.
        * genattrtab.c: Ditto.
        * gencheck.c: Ditto.
        * genconfig.c: Ditto.
        * genemit.c: Ditto.
        * genextract.c: Ditto.
        * genflags.c: Ditto.
        * gengenrtl.c: Ditto.
        * genoutput.c: Ditto.
        * genpeep.c: Ditto.
        * genrecog.c: Ditto.
        * gensupport.c: Ditto.
        * global.c: Ditto.
        * gmon.c: Ditto.
        * graph.c: Ditto.
        * haifa-sched.c: Ditto.
        * hard-reg-set.h: Ditto.
        * hash.c: Ditto.
        * integrate.c: Ditto.
        * jump.c: Ditto.
        * lists.c: Ditto.
        * local-alloc.c: Ditto.
        * loop.c: Ditto.
        * mips-tdump.c: Ditto.
        * mips-tfile.c: Ditto.
        * optabs.c: Ditto.
        * prefix.c: Ditto.
        * print-rtl.c: Ditto.
        * read-rtl.c: Ditto.
        * real.c: Ditto.
        * recog.c: Ditto.
        * reg-stack.c: Ditto.
        * regclass.c: Ditto.
        * regmove.c: Ditto.
        * reload.c: Ditto.
        * reload1.c: Ditto.
        * reorg.c: Ditto.
        * resource.c: Ditto.
        * rtl.c: Ditto.
        * rtlanal.c: Ditto.
        * scan.c: Ditto.
        * sched-deps.c: Ditto.
        * sched-rgn.c: Ditto.
        * sdbout.c: Ditto.
        * simplify-rtx.c: Ditto.
        * stmt.c: Ditto.
        * stor-layout.c: Ditto.
        * toplev.c: Ditto.
        * tradcif.y: Ditto.
        * tradcpp.c: Ditto.
        * tree.c: Ditto.
        * unroll.c: Ditto.
        * varasm.c: Ditto.
        * xcoffout.c: Ditto.

From-SVN: r46173
2001-10-11 03:16:15 +00:00
Kaveh R. Ghazi
8b60264b0d builtins.c (expand_builtin_setjmp_receiver): Const-ify.
* builtins.c (expand_builtin_setjmp_receiver): Const-ify.
	* c-common.c (fname_var_t, c_tree_code_type, c_tree_code_length):
	Likewise.
	* c-dump.c (dump_option_value_info): Likewise.
	* c-format.c (format_length_info, format_char_info,
	format_flag_spec, format_flag_pair, format_kind_info): Likewise.
	* collect2.c (names): Likewise.
	* cppdefault.h (default_include): Likewise.
	* cppexp.c (suffix, vsuf_1, vsuf_2, vsuf_3): Likewise.
	* flow.c (life_analysis): Likewise.
	* gcc.c (dir_separator_str, modify_target, option_map,
	target_option_translations, spec_list_1, extra_specs_1,
	init_spec): Likewise.
	* gcov.c (gcov_version_string): Likewise.
	* genattr.c (write_units): Likewise.
	* genattrtab.c (make_length_attrs, write_function_unit_info): Likewise.
	* gengenrtl.c (rtx_definition, defs): Likewise.
	* genrecog.c (pred_table): Likewise.
	* global.c (global_alloc): Likewise.
	* lcm.c (optimize_mode_switching): Likewise.
	* local-alloc.c (find_free_reg): Likewise.
	* params.h (param_info): Likewise.
	* predict.c (predictor_info): Likewise.
	* protoize.c (unexpansion_struct): Likewise.
	* real.c (bmask): Likewise.
	* recog.h (insn_operand_data, insn_data): Likewise.
	* regclass.c (initial_fixed_regs, initial_call_used_regs): Likewise.
	* stmt.c (expand_nl_goto_receiver): Likewise.
	* toplev.c (da, debug_args, lang_opt, documented_lang_options,
	target_switches, target_options): Likewise.
	* tradcif.y (token, tokentab2, yylex): Likewise.
	* tree.h (attribute_spec): Likewise.

	* alpha.c (override_options, alpha_lookup_xfloating_lib_func):
	Likewise.
	* arc.c (arc_output_function_epilogue): Likewise.
	* arm.c (processors, all_cores, all_architectures,
	arm_override_options, isr_attribute_arg, isr_attribute_args,
	arm_isr_value): Likewise.
	* avr.c (mcu_type_s, reg_class_tab, order_regs_for_local_alloc):
	Likewise.
	* c4x.c (c4x_int_reglist): Likewise.
	* d30v.c (override_options): Likewise.
	* h8300.c (shift_insn): Likewise.
	* i386.c (size_cost, i386_cost, i486_cost, pentium_cost,
	pentiumpro_cost, k6_cost, athlon_cost, pentium4_cost, ix86_cost,
	ix86_expand_sse_comi, ix86_expand_sse_compare, override_options,
	builtin_description, bdesc_comi, bdesc_2arg, bdesc_1arg,
	ix86_init_mmx_sse_builtins, ix86_expand_builtin): Likewise.
	* i386.h (processor_costs, ix86_cost): Likewise.
	* m68hc11.c (m68hc11_cost, m6811_cost, m6812_cost): Likewise.
	* m68hc11.h (processor_costs, m68hc11_cost): Likewise.
	* m68k.c (codes_68881, codes_FPA): Likewise.
	* m88k.c (mode_from_align, max_from_align, all_from_align,
	best_from_align, m_options): Likewise.
	* m88k.h (ORDER_REGS_FOR_LOCAL_ALLOC): Likewise.
	* mcore.c (mode_from_align): Likewise.
	* mips/elf64.h (UNIQUE_SECTION): Likewise.
	* mips/iris6gld.h (UNIQUE_SECTION): Likewise.
	* mips.c (mips_sw_reg_names, mips_regno_to_class): Likewise.
	* mips.h (mips_regno_to_class): Likewise.
	* ns32k.c (scales): Likewise.
	* pa.c (import_string, magic_milli): Likewise.
	* rs6000.c (alt_reg_names, rs6000_override_options): Likewise.
	* sparc.c (leaf_reg_remap, sparc_override_options,
	reg_leaf_alloc_order, reg_nonleaf_alloc_order, reg_alloc_orders):
	Likewise.
	* sparc.h (sparc_cpu_select, leaf_reg_remap): Likewise.

cp:
	* class.c (build_vtable_entry_ref): Const-ify.
	* decl.c (predefined_identifier,
	initialize_predefined_identifiers): Likewise.
	* init.c (build_new_1): Likewise.
	* lex.c (cplus_tree_code_type, cplus_tree_code_length, resword):
	Likewise.

f:
	* bad.c (_ffebad_message_, ffebad_messages_): Const-ify.
	* bld.c (ffebld_arity_op_): Likewise.
	* bld.h (ffebld_arity_op_): Likewise.
	* com.c (ffecom_init_0): Likewise.
	* intdoc.c (_ffeintrin_name_, _ffeintrin_gen_, _ffeintrin_spec_,
	_ffeintrin_imp_, names, gens, imps, specs, cc_pair,
	cc_descriptions, cc_summaries): Likewise.
	* intrin.c (_ffeintrin_name_, _ffeintrin_gen_, _ffeintrin_spec_,
	_ffeintrin_imp_, ffeintrin_names_, ffeintrin_gens_,
	ffeintrin_imps_, ffeintrin_specs_): Likewise.

java:
	* jcf-io.c (format_uint): Const-ify.
	* lang.c (java_tree_code_type, java_tree_code_length): Likewise.
	* lex.c (java_get_line_col): Likewise.
	* parse.y (build_incdec): Likewise.

From-SVN: r46062
2001-10-07 16:51:11 +00:00
David Billinghurst
607a6500ea flow.c (propagate_block_delete_libcall): Remove unused first arg
* flow.c (propagate_block_delete_libcall): Remove unused first arg
	(propagate_one_insn):  Update for above change

From-SVN: r45933
2001-10-01 23:35:03 +00:00
Ulrich Weigand
967bd82377 flow.c (delete_dead_jumptables): Delete jumptable if the only reference is from the literal pool.
* flow.c (delete_dead_jumptables): Delete jumptable if the only
reference is from the literal pool.

From-SVN: r45783
2001-09-24 20:13:00 +00:00
Jan Hubicka
53c170316f basic-block.h (flow_delete_insn, [...]): Kill.
* basic-block.h (flow_delete_insn, flow_delete_insn_chain): Kill.
	* cfg.c (delete_insn): Rename from ....; use remove_insn; do not
	remove some labels.
	(flow_delete_insn): This one.
	(delete_insn_chain): Rename from ...; do not care labels.
	(flow_delete_insn_chain): ... this one.
	(flow_delete_block): Remove the insns one BB has been expunged.
	(merge_blocks_nomove): Likewise.
	(try_redirect_by_replacing_jump): Use delete_insn[_chain]; do not care
	updating BB boundaries.
	(tidy_fallthru_edge): Likewise.
	(commit_one_edge_insertion): Likewise.
	* cfgbuild.c (find_basic_block): Likewise.
	(find_basic_blocks_1): Likewise.
	* cfgcleanup.c (merge_blocks_move_predecessor_nojumps): Likewise.
	(try_crossjump_to_edge): Likewise.
	(try_optimize_cfg): Likewise.
	* cse.c (delete_trivially_dead_insns): Likewise.
	* df.c (df_insn_delete): Likewise.
	* doloop.c (doloop_modify): Use delete_related_insns.
	* emit-rtl.c (try_split): Likewise.
	(remove_insn): Update BB boundaries.
	* expect.c (connect_post_landing_pads): Use delete_related_insns.
	* flow.c (delete_dead_jumptables): Use delete_insn[_chain]; do not care
	updating BB boundaries.
	(propagate_block_delete_insn): Likewise.
	(propagate_block_delete_libcall): Likewise.
	* function.c (delete_handlers): Use delete_related_insns.
	(thread_prologue_and_epilogue_insns): Likewise.
	* gcse.c (delete_null_pointer_checks): Use delete_related_insns.
	* genpeep.c (gen_peephole): Use delete_related_insns.
	* ifcvt.c (noce_process_if_block): Use delete_insn; do not care updating
	BB boundaries.
	(find_cond_trap): Likewise.
	* integrate.c (save_for_inline): Use delete_related_insns.
	(copy_insn_list): Likewise.
	* jump.c (pruge_linie_number_notes): Likewise.
	(duplicate_loop_exit_test): Likewise.
	(delete_computation): Likewise.
	(delete_related_insn): Rename from ...; use delete_insn
	(delete_insn): ... this one.
	(redirect_jump): Use delete_related_insns.
	* loop.c (scan_loop): Likewise.
	(move_movables): Likewise.
	(find_and_verify_loops): Likewise.
	(check_dbra_loop): Likewise.
	* recog.c (peephole2_optimize): Likewise.
	* reg-stack.c (delete_insn_for_stacker): Remove.
	(move_for_stack_reg): Use delete_insn.
	* regmove.c (combine_stack_adjustments_for_block): Likewise.
	* reload1.c (delete_address_reloads): Use delete_related_insns.
	(fixup_abnormal_edges): Use delete_insn.
	* recog.c (emit_delay_sequence): Use delete_related_insns.
	(delete_from-delay_slot): Likewise.
	(delete_scheduled_jump): likewise.
	(optimize_skip): Likewise.
	(try_merge_delay_insns): Likewise.
	(full_simple_delay_slots): Likewise.
	(fill_slots_from_thread): Likewise.
	(relax_delay_slots): Likewise.
	(make_return_insns): Likewise.
	(dbr_schedule): Likewise.
	* rtl.h (delete_insn): Rename to delete_related_insns.
	(delete_insn, delete_insn_chain): New prototypes.
	* ssa-ccp (sse_fast_dce):  Remove deleting of DEF, as it is done
	by df_insn_delete already.
	* ssa-dce.c (delete_insn_bb): Use delete_insn.
	* ssa.c (convert_from_ssa): Use delete_related_insns.
	* unroll.c (unroll_loop): Likewise.
	(calculate_giv_inc): Likewise.
	(copy_loop_body): Likewise.

	* i386-protos.h (ix86_libcall_value, ix86_function_value,
	ix86_function_arg_regno_p, ix86_function_arg_boundary,
	ix86_return_in_memory, ix86_function_value): Declare.
	* i386.c (x86_64_int_parameter_registers, x86_64_int_return_registers):
	new static valurables.
	(x86_64_reg_class): New enum
	(x86_64_reg_class_name): New array.
	(classify_argument, examine_argument, construct_container,
	 merge_classes): New static functions.
	(optimization_options): Enable flag_omit_frame_pointer and disable
	flag_pcc_struct_return on 64bit.
	(ix86_libcall_value, ix86_function_value,
	ix86_function_arg_regno_p, ix86_function_arg_boundary,
	ix86_return_in_memory, ix86_function_value): New global functions.
	(init_cumulative_args): Refuse regparm on x86_64, set maybe_vaarg.
	(function_arg_advance): Handle x86_64 passing conventions.
	(function_arg): Likewise.
	* i386.h (FUNCTION_ARG_BOUNDARY): New macro.
	(RETURN_IN_MEMORY): Move offline.
	(FUNCTION_VALUE, LIBCALL_VALUE): Likewise.
	(FUNCTION_VALUE_REGNO_P): New macro.
	(FUNCTION_ARG_REGNO_P): Move offline.
	(struct ix86_args): Add maybe_vaarg.
	* next.h (FUNCTION_VALUE_REGNO_P): Delete.
	* unix.h (FUNCTION_VALUE_REGNO_P): Delete.

From-SVN: r45726
2001-09-21 12:55:18 +00:00
Jan Hubicka
3c030e88e7 basic-block.h (free_bb_for_insn): Declare.
* basic-block.h (free_bb_for_insn): Declare.
	* bb-reorder.c (label_for_bb): Use block_label.
	(emit_jump_to_block_after): Remove.
	(insert_intra_1): Do not update block_for_insn.
	(insert_inter_bb_scope_notes): Likewise; update bb->end
	* cfg.c (free_bb_for_insn): New.
	(try_rediret_by_replacing_jump): Avoid set_block_for_new_insns call.
	(force_nonfallthru_and_redirect): Likewise; do not update BB boundaries.
	(commit_one_edge_insertion): Likewise.
	(commit_one_edge_insertion): Do not update BB boundary.
	(commit_edge_insertions): Do not call compute_bb_for_insn.
	* cfgbuild.c (find_basic_blocks): Do not free basic_block_for_insn.
	* cfgcleanup.c (merge_blocks_move_predecessor): Use reorder_insns_nobb.
	(merge_blocks_move_successor_nojumps): Likewise.
	(try_crossjump_to_edge): Do not update block_for_insn.
	* combine.c (combine_instructions): Remove compute_bb_for_insn call.
	* df.c (df_pattern_emit_later): Do not update BB boundary.
	(df_jump_pattern_emit_after): Likewise.
	(df_insn_move_before): Use emit_insn_before.
	* emit-rtl.c (try_split): Emit after trial to get bb boundary updated
	 properly.
	(add_insn_after, add_insn_before, emit_insns_after): Update BB
	boundaries and basic_block_for_insn.
	(reorder_insns_nobb): Rename from reorder_insns.
	(reorder_insns): New.
	(emit_block_insn_before, emit_block_insn_after): Kill.
	* flow.c (check_function_return_warnings): Do not call
	compute_bb_for_insn; Do not free basic_block_for_insn.
	(attempt_auto_inc): Do not update basic_block_for_insn.
	* function.c (emit_return_into_block): Likewise;
	do not update BB boundaries.
	* gcse.c (handle_avail_expr): Do not update basic_block_for_insn.
	(insert_insn_end_bb): Use emit_insn_before; Likewise.
	(pre_insert_copy_insn): Likewise.
	(update_ld_motion_notes): Likewise.
	(insert_insn_start_bb): Likewise.
	(replace_store_insn): Likewise.
	* ifcvt.c (noce_process_if_block): Likewise.
	(if_convert): Do not call compute_bb_for_insn.
	* lcm.c (optimize_mode_switching): Do not update BB boundaries.
	Use emit_insn_before and emit_insn_after.
	* recog.c (split_all_insns): Do not update BB boundaries;
	Do not call compute_bb_for_insn.
	(peephole2_optimize): Do not update BB boundaries.
	* reg-stack.c (emit_pop_insn): Use emit_insn_after and
	emit_insn_before.
	(emit_swap_insn): Likewise.
	(convert_regs_1): Likewise.
	* reload1.c (reload): Call compute_bb_for_insn.
	* rtl.h (reorder_insns_nobb): Declare.
	* ssa.c (rename_equivalent_regs): Use emit_insn_before.
	* toplev.c (rest_of_compilation): Call free_bb_for_insn
	at places CFG is invalidated; do not call compute_bb_for_insn.

	* cfg.c (expunge_block): Invalidate BB structure.

	* (merge_blocks_nomove): Update properly BLOCK_FOR_INSN
	array.

	* cfg.c (verify_flow_info): Verify the basic_block_for_insn array.

From-SVN: r45647
2001-09-16 20:21:30 +00:00
Jan Hubicka
402209ff48 Makefile.in (cfg.o, [...]): New.
* Makefile.in (cfg.o, cfganal.o, cfgloop.o, cfgbuild.o, cfgcleanup.o):
	New.
	* basic-block.h (flow_obstack, label_value_list,
	tail_recursion_label_list): Declare
	(tidy_fallthru_edges): Declare.
	(expunge_block, last_loop_beg_note): Delete.
	(can_fallthru, flow_nodes_print, flow_edge_list_print): Declare.
	* cfg.c: New file
	(basic_block_for_insn, label_value_list): Move from flow.c; make global.
	(n_basic_blocks, n_edges, basic_block_info, entry_exit_blocks,
	init_flow, clear_edges, can_delete_note_p, can_delete_label_p,
	flow_delete_insn, flow_delete_insn_chain, create_basic_block,
	expunge_block, flow_delete_block, compute_bb_for_insn,
	update_bb_for_insn, set_block_for_insn, set_block_for_new_insns,
	make_edge, remove_edge, redirect_edge_succ, redirect_edge_succ_nodup,
	redirect_edge_pred, split_block, marge_blocks_nomove, block_label,
	try_redirect_by_replacing_jump, last_loop_beg_note,
	redirect_edge_and_branch, redirect_edge_and_branch_force,
	tidy_fallthru_edge, tidy_fallthru_edges, back_edge_of_syntactic_loop_p,
	split_edge, insert_insn_on_edge, commit_one_edge_insertion,
	commit_edge_insertions, dump_flow_info, debug_flow_info,
	dump_edge_info, dump_bb, debug_bb, debug_bb_n, print_rtl_with_bb,
	verify_flow_info, purge_dead_edges, purge_all_dead_edges):
	Move here from flow.c
	* cfganal.c: New file.
	(forwarder_block_p, can_fallthru, mark_critical_edges,
	 mark_dfs_back_edges, need_fake_edge_p, flow_call_edges_add,
	 find_unreachable_blocks, create_edge_list, free_edge_list,
	 print_edge_list, verify_edge_list, find_edge_index, flow_nodes_print,
	 flow_edge_list_print, remove_fake_successors, remove_fake_edges,
	 add_noreturn_fake_exit_edges, connect_infinite_loops_to_exit,
	 flow_reverse_top_sort_order_compute, flow_depth_first_order_compute,
	 flow_dfs_compute_reverse_init, flow_dfs-compute_reverse_add_bb,
	 flow_dfs-compute_reverse_execute, flow_dfs_compute_reverse_finish);
	Move here from flow.c
	* cfgbuild.c: New file
	(count_basic_blocks, find_label_refs, make_label_edge, make_eh_edge,
	 make_edges, find_basic_blocks_1, find_basic_blocks,
	 find_sub_basic_blocks): Move here from flow.c
	* cfgcleanup.c: New file.
	(try_simplify_condjump, try_forward_edges, tail_recursion_label_p,
	 merge_blocks_move_predecessor_nojumps,
	 merge_blocks_move_successor_nojumps, merge_blocks,
	 flow_find_cross_jump, outgoing_edges_match, try_crossjump_to_edge,
	 try_crossjump_bb, try_optimize_cfg): Move here from flow.c
	(delete_unreachable_blocks, cleanup_cfg): Likewise; return true
	if succeeded.
	* cfgloop.c: New file
	(flow_loops_cfg_dump, flow_loop_nested_p, flow_loop_dump,
	 flow_loops_dump, flow_loops_free, flow_loop_entry_edges_find,
	 flow_loop_exit_edges_find, flow_loop_nodes_find,
	 flow_loop_pre_header_scan, flow_loop_pre_header_find,
	 flow_loop_tree_node_add, flow_loops_tree_build,
	 flow_loop_level_compute, flow_loops_level_compute, flow_loop_scan,
	 flow_loops_find, flow_loops_update, flow_loop_outside_edge_p):
	Move here from flow.c
	* flow.c: Remove everything moved elsewhere
	* output.h (cleanup_cfg): Return bool.

	* bb-reorder.c (reorder_block_def): Remove 'index'.
	(insert_intra_1): Add argument BB, set block for new note.
	(make_reorder_chain): Do not depdent on BB indexes.
	(make_reorder_chain_1): Do not use BB indexes.
	(label_for_bb): Likewise; set BB for new insn.
	(emit_jump_to_block_after): Likewise.
	(fixup_reoder_chain): Sanity check that all basic blocks
	are chained; verify newly created insn chain; remove
	undocnitional jump simplifying; Do not use BB indexes;
	properly initialize count and frequency information;
	dump reordered sequence.
	(insert_intra_bb_scope_notes): update call of insert_intra_1.
	(insert_inter_bb_scope_notes): Set block for new insn.
	(reorder_basic_blocks): Dump flow info before reoredering.

From-SVN: r45504
2001-09-10 12:23:08 +00:00
Jim Wilson
43fe47ca78 re PR rtl-optimization/3783 (gcc3.0/ia64 ICE on linux kernel file fs/ufs/super.c)
Fix for PR 3783.
	* alias.c (clear_reg_alias_info): New.
	* flow.c (attempt_auto_inc): Call clear_reg_alias_info.
	* rtl.h (clear_reg_alias_info): Declare.

From-SVN: r45482
2001-09-07 16:25:01 -07:00
Daniel Berlin
d59c534651 df.h (struct df): Add rts_order variable.
2001-08-28  Daniel Berlin  <dan@cgsoftware.com>

	* df.h (struct df): Add rts_order variable.

	* df.c (df_visit_next_rts): New function.
	(df_visit_next): Renamed to df_visit_next_rc
	(df_analyse_1): Allocate/compute/free rts_order as well.
	(df_rd_global_compute): Use df_visit_next_rc instead of
	df_visit_next.
	(df_ru_global_compute): Use df_visit_next_rts instead of
	df_visit_next.

	* flow.c (flow_reverse_top_sort_order_compute): New function.

	* basic-block.h: Add prototype.

From-SVN: r45246
2001-08-28 23:43:23 +00:00
Richard Henderson
c23bb84bd3 flow.c (redirect_edge_succ_nodup): Return new edge.
* flow.c (redirect_edge_succ_nodup): Return new edge.
        (try_simplify_condjump): Use new edge.
        * basic-block.h (redirect_edge_succ_nodup): Update prototype.

From-SVN: r45222
2001-08-27 18:32:10 -07:00
Roman Zippel
bce7bfe835 * flow.c (verify_flow_info): Use checksums to verify edges.
From-SVN: r45212
2001-08-27 14:29:15 -07:00
Diego Novillo
95005c210a flow.c (flow_loop_dump): Do not display insn UIDs if this is not an RTL basic block.
* flow.c (flow_loop_dump): Do not display insn UIDs if this is not
	an RTL basic block.

From-SVN: r45201
2001-08-27 14:11:27 -04:00
Jan Hubicka
ab75d1f125 function.c (thread_prologue_and_epilogue_insns): Avoid fallthru flag on edge to exit.
* function.c (thread_prologue_and_epilogue_insns): Avoid
	fallthru flag on edge to exit.

	* i386.md (trunc?fsi splitter): Conditionionize for non-sse.

	* flow.c (delete_noop_moves, propagate_block_delete_insn): Purge
	dead edges.

From-SVN: r45135
2001-08-23 15:33:13 +00:00
Jason Merrill
2270623af3 jump.c (squeeze_notes): Take parms by reference.
* jump.c (squeeze_notes): Take parms by reference.  Handle END being
        a squeezable note.
        * rtl.h: Adjust.
        * ifcvt.c (dead_or_predicable): Adjust.
        * loop.c (find_and_verify_loops): Adjust.
        * stmt.c (expand_end_case): Adjust.
        * flow.c (merge_blocks_move_successor_nojumps): Adjust.  Modify the
        head and end insn pointers in the basic block, not just local copies.
        (merge_blocks_move_predecessor_nojumps): Likewise.

From-SVN: r45107
2001-08-22 10:51:32 -04:00
Lars Brinkhoff
1322177dbd Makefile.in, [...]: replace "GNU CC" with "GCC".
* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
	bitmap.h, builtin-types.def, builtins.c, builtins.def,
	c-aux-info.c, c-common.c, c-common.def, c-common.h,
	c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c,
	c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in,
	c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c,
	caller-save.c, calls.c, collect2.c, collect2.h, combine.c,
	conditions.h, config.gcc, configure.frag, configure.in,
	conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c,
	cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h,
	dependence.c, df.c, df.h, diagnostic.c, diagnostic.h,
	doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c,
	dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c,
	emit-rtl.c, errors.c, errors.h, except.c, except.h,
	exgettext, explow.c, expmed.c, expr.c, expr.h, final.c,
	fixproto, flags.h, flow.c, fold-const.c, fp-test.c,
	function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp,
	gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c,
	gencheck.c, gencodes.c, genconfig.c, genemit.c,
	genextract.c, genflags.c, gengenrtl.c, genmultilib,
	genopinit.c, genoutput.c, genpeep.c, genrecog.c,
	gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c,
	ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c,
	graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h,
	gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h,
	gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h,
	hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h,
	integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c,
	libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h,
	machmode.def, machmode.h, main.c, mbchar.c, mbchar.h,
	mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk,
	mkmap-symver.awk, optabs.c, output.h, params.c, params.def,
	params.h, predict.c, predict.def, predict.h, prefix.c,
	prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c,
	read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c,
	regclass.c, regmove.c, regrename.c, regs.h, reload.c,
	reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c,
	rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h,
	sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c,
	sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c,
	ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c,
	stringpool.c, system.h, timevar.c, timevar.def, timevar.h,
	tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h,
	tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h,
	unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h,
	unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c,
	xcoffout.h: replace "GNU CC" with "GCC".

From-SVN: r45105
2001-08-22 14:35:51 +00:00
Richard Henderson
687eccc06e flow.c (flow_find_cross_jump): Don't consider unconditional return insns for commoning.
* flow.c (flow_find_cross_jump): Don't consider unconditional
        return insns for commoning.

From-SVN: r45101
2001-08-22 01:13:00 -07:00
Andreas Jaeger
bb1a503c19 profile.c (compute_branch_probabilities): Remove extra new-line in error message.
* profile.c (compute_branch_probabilities): Remove extra new-line
	in error message.
	* flow.c (verify_flow_info): Likewise.

From-SVN: r45069
2001-08-21 07:06:55 +02:00
Diego Novillo
006844a392 basic-block.h (basic_block): Add new field 'flags'.
* basic-block.h (basic_block): Add new field 'flags'.
	(BB_REACHABLE): Define.
	(expunge_block): Declare.
	* flow.c (ENTRY_BLOCK_PTR): Initialize field 'flags'.
	(EXIT_BLOCK_PTR): Ditto.
	(expunge_block): Remove static declaration.
	(cleanup_cfg): Clear bb->aux on every basic block.
	(find_unreachable_blocks): Set BB_REACHABLE bit in bb->flags when
	computing reachability.
	(delete_unreachable_blocks): Delete block b if b->flags has
	BB_REACHABLE unset.

From-SVN: r45068
2001-08-20 23:22:26 -04:00
Richard Henderson
6ca3c22fd1 flow.c (mark_regs_live_at_end): Use regs_invalidated_by_call.
* flow.c (mark_regs_live_at_end): Use regs_invalidated_by_call.
        * regclass.c (init_reg_sets_1): Fix typo.
        * config/ia64/ia64.c (ar_pfs_reg_operand): New.
        (ia64_expand_call): Pass ar.pfs to sibcall expanders.
        (ia64_compute_frame_size): Make ar.unat live when in use.
        (ia64_epilogue_uses): Reformat; do not check current_function_is_leaf
        for ar.pfs; remove ar.unat handling.
        * config/ia64/ia64.h (CALL_REALLY_USED_REGISTERS): ar.unat is
        call-saved.
        (PREDICATE_CODES): Add ar_pfs_reg_operand.
        * config/ia64/ia64-protos.h: Update decls.
        * config/ia64/ia64.md (sibcall_nopic): Use ar.pfs.
        (sibcall_pic): Likewise.

From-SVN: r45021
2001-08-18 20:04:19 -07:00
John Wehle
44ce006366 rtl.h (only_sets_cc0_p): New prototype.
* rtl.h (only_sets_cc0_p): New prototype.
	* jump.c (sets_cc0_p): Handle INSN.
	(only_sets_cc0_p): New function.
	* flow.c (merge_blocks_nomove): Use only_sets_cc0_p.
	(tidy_fallthru_edge): Likewise.
	* integrate.c (copy_insn_list): Likewise.
	* unroll.c (unroll_loop): Likewise.
	(copy_loop_body): Likewise.

From-SVN: r44927
2001-08-15 19:25:43 +00:00
Jeffrey A Law
abb788ba5b flow.c (commit_one_edge_insertion): Don't separate a LOOP_BEG note from its associated jump.
* flow.c (commit_one_edge_insertion): Don't separate a LOOP_BEG
	note from its associated jump.

From-SVN: r44910
2001-08-14 17:30:16 -06:00
Zack Weinberg
19652adf82 calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY if not already defined.
* calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY
	if not already defined.  Remove all #ifdefs on STACK_BOUNDARY;
	this macro is now required.

	* cselib.c (cselib_process_insn), flow.c (propagate_block),
	loop.c (find_and_verify_loops), reload.c (reload): Check
	for rtx code of CALL_INSN, not CALL, when deciding if we
	need to check for REG_SETJMP note.

	* gcse.c (compute_hash_table, compute_store_table): Update
	the #ifdef NON_SAVING_SETJMP code to the new REG_SETJMP
	logic.

	* config/avr/avr.c: Fix typo.
	* config/convex/convex.c (expand_movstr): Use adjust_address.
	* config/dsp16xx/dsp16xx.c: Define dsp16xx_compare_gen
	variable.
	* config/dsp16xx/dsp16xx.md: Correct calls to replace_equiv_address.
	* config/elxsi/elxsi.c: Include tree.h, expr.h, regs.h, and flags.h.
	Fix typo.
	* config/elxsi/elxsi.h: Don't define Rmode (typo for Pmode?)
	Do define STACK_BOUNDARY.
	* config/i370/i370.c: Include expr.h.
	* config/i860/sysv3.h, config/i860/sysv4.h, config/m32r/m32r.h,
	config/pa/som.h, config/v850/v850.h: Take in_ctors and
	in_dtors out of EXTRA_SECTIONS; take CTORS_SECTION_FUNCTION
	and DTORS_SECTION_FUNCTION out of EXTRA_SECTION_FUNCTIONS.
	* config/m88k/m88k.c: Include c-tree.h after expr.h.
	* config/pdp11/pdp11.c: Include expr.h and toplev.h.
	* config/romp/romp.c: Include expr.h after tree.h.
	Include toplev.h.
	(output_fpop): Use xmalloc, not oballoc.
	* config/we32k/we32k.c: Include expr.h.

From-SVN: r44768
2001-08-10 16:19:22 +00:00
Kazu Hirata
30f7a3786c dbxout.c: Fix comment formatting.
* dbxout.c: Fix comment formatting.
	* dependence.c: Likewise.
	* df.c: Likewise.
	* diagnostic.c: Likewise.
	* dominance.c: Likewise.
	* doprint.c: Likewise.
	* dwarf2out.c: Likewise.
	* dwarfout.c: Likewise.
	* emit-rtl.c: Likewise.
	* except.c: Likewise.
	* explow.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.

From-SVN: r44729
2001-08-08 22:06:48 +00:00
Jan van Male
b9f2270425 emit-rtl.c (adjust_address, [...]): Cast offset to unsigned HOST_WIDE_INT to avoid warning.
2001-08-08  Jan van Male <jan.vanmale@fenk.wau.nl>

        * emit-rtl.c (adjust_address, adjust_address_nv): Cast offset to
        unsigned HOST_WIDE_INT to avoid warning.
        * final.c (final): Cast INSN_UID to unsigned to avoid warning.
        * flow.c (set_block_for_new_insns): Likewise.

From-SVN: r44724
2001-08-08 22:32:31 +02:00
Jan Hubicka
9d98f8f9c4 calls.c (ECF_ALWAYS_RETURN): New constant.
* calls.c (ECF_ALWAYS_RETURN): New constant.
	(emit_call_1): Add REG_ALWAYS_RETURN note if needed.
	(expand_call): Use LCF_ALWAYS_RETURN for __bb_fork_func.
	(emit_library_call_value_1): Handle LCT_ALWAYS_RETRUN.
	* flow.c (need_fake_edge_p): Handle REG_ALWAYS_RETURN.
	* rtl.c (reg_note_name): New name.
	* rtl.h (enum reg_note): Add REG_ALWAYS_RETURN.

From-SVN: r44722
2001-08-08 19:07:47 +00:00
Graham Stott
5b57e28b23 flow.c (back_edge_of_syntactic_loop_p): Add whitespace.
* flow.c (back_edge_of_syntactic_loop_p): Add whitespace.
	(libcall_dead_p): Likewise.

	(mark_used_regs): Constify fmt.
	(find_use_as_address): Likewise.

From-SVN: r44707
2001-08-08 07:45:10 +00:00
Jan Hubicka
570a98eb7c calls.c (expand_call): Do not emit INSN_SETJMP note.
* calls.c (expand_call): Do not emit INSN_SETJMP note.
	(emit_library_call_value_1): Likewise.
	(emit_call_1): Emit REG_SETJMP note.
	* cse.c (cse_end_of_basic_block): Use REG_SETJMP instead
	of INSN_SETJMP
	* cselib.c (cselib_process_insn): Likewise.
	* flow.c (propagate_block): Likewise.
	* loop.c (find_and_verify_loops): Likewise.
	* reload.c (find_equiv_regs): Likewise.
	* reload1.c (reload): Likewise.
	* resource.c (mark_referenced_resources,
	mark_set_resources): Likewise.
	* sched-deps (sched_analyze_insn, sched_analyze): Likewise.
	* final.c (final_scan_insn): Remove NOTE_INSN_SETJMP.
	* haifa-sched.c (unlink_other_notes): Likewise.
	(reemit_notes): Likewise.
	* sched-ebb.c (sched_ebb): Likewise.
	* sched-rgc.c (sched_region): Likewise.
	* rtl.c (note_insn_name): Likewise.
	(reg_note_name): Add REG_SETJMP
	* rtl.h (reg_note): Add REG_SETJMP.
	(insn_note): Remove NOTE_INSN_SETJMP.

	* profile.c (branch_prob): Add fake edges for setjmp.

From-SVN: r44700
2001-08-07 20:24:08 +00:00
Jan Hubicka
24a2858412 alias.c (nonlocal_mentioned_p): Rename CONST_CALL_P to CONST_OR_PURE_CALL_P
* alias.c (nonlocal_mentioned_p):
	Rename CONST_CALL_P to CONST_OR_PURE_CALL_P
	* calls.c (emit_call_1): Likewise.
	* cse.c (cse_insn, invalidate_skipped_block): Likewise.
	* cselib.c (cselib_process_insn): Likewise.
	* df.c (df_insns_modify): Likewise.
	* flow.c (need_fake_edge_p): Likewise.
	(propagate_one_insn): Likewise.
	* haifa-sched.c (reemit_notes): Likewise.
	* integrate.c (copy_insn_list): Likewise.
	* jump.c (delete_prior_computation): Likewise.
	* local-alloc.c (validate_equiv_mem): Likewise.
	* loop.c (scan_loop): Likewise.
	* predict.c (estimate_probability): Likewise.
	* reload.c (reload): Likewise.
	* sched-deps (sched_analyze): Likewise.
	* rtl.h (CONST_CALL_P): rename to CONST_OR_PURE_CALL_P.
	* gcse.c (compute_hash_table): Likewise.
	(mark_call): Likewise.
	(store_killed_in_insn): Likewise.

From-SVN: r44688
2001-08-07 12:59:58 +00:00
Jan Hubicka
39f95a2c8e Makefile.in (reload1.o): Add dedendancy on except.h
* Makefile.in (reload1.o): Add dedendancy on except.h
        * basic-block.h (purge_all_dead_edges, purge_dead_edges): Update
        prototypes.
        * flow.c (purge_dead_edges, purge_all_dead_edges): Return bool
        indicating wehther edges has been cleaned up.
        * reload1.c: Inlucde except.h
        (fixup_abnormal_edges): Accept deleted insns.
        * toplev.c (rest_of_compilation): Purge dead edges unconditionally
        after combine.

From-SVN: r44654
2001-08-05 23:39:21 -07:00
Jan Hubicka
f133022600 * loop.c (try_copy_prop); Kill invalidated REG_EQUAL notes.
* reload1.c (fixup_abnormal_edges): New static function.
	(reload): Use it.

	* flow.c (need_fake_edge_p): New function.
	(flow_call_edges_add): Fix handling of noreturn and sibbling calls;
	avoid call insn to be very last insn in the insn stream.

	* profile.c (branch_prob): Call flow_call_edges_add instead of
	doing that by hand; cleanup cfg to re-merge basic blocks once
	we are done.

From-SVN: r44635
2001-08-04 12:08:43 +00:00
John Wehle
4d494dfe26 * flow.c (merge_blocks): Return 1 if an extra jump is inserted.
From-SVN: r44498
2001-07-31 03:24:06 +00:00
Jan Hubicka
0ecf09f9cc i386.c (ix86_output_main_function_alignment_hack): New function.
* i386.c (ix86_output_main_function_alignment_hack): New function.
	(TARGET_ASM_FUNCTION_PROLOGUE): Default to it.

	* flow.c (mark_dfs_back_edges): Move from loop_p ; mark back
	edges by EDGE_DFS_BACK flag.
	(dump_edge_info): Add dfs_back flag.
	* basic-block.h (EDGE_DFS_BACK): New constant.
	(mark_dfs_back_edges): Declare.
	* alias.c (loop_p): Remove.
	(mark_constant_function): Use mark_dfs_back_edges.

	* reg-stack.c (block_info_def): Add predecesors counter and stack_out.
	(reg_to_stack): Call mark_dfs_back_edges; count the predecesors.
	(compensate_edge): Break out from ...
	(convert_regs_1): ... here; do smart choosing of stack_out to copy.
	(convert_regs_2): Set block_done once block is really done;
	Do updating of the predecesors counts.

	* toplev.c (rest_of_compilation): Recompute block_for_insn
	before post-reload cfg_cleanup.
	* function.c (thread_prologue_epilogue_insns):
	Call set_block_for_new_insns when emitting prologue directly.

From-SVN: r44486
2001-07-30 20:30:23 +00:00
Jan Hubicka
a08b260482 flow.c (mark_set_1): Use REG_FREQ_FROM_BB.
* flow.c (mark_set_1): Use REG_FREQ_FROM_BB.
	(attempt_auto_inc): LIkewise.
	(mark_used_reg): Likewise.
	(try_pre_increment_1): Likewise.
	* regclass.c (regclass): Likewise.
	* global.c (allocno_compare): Update comment; change scaling factor.
	* local-alloc.c (QTY_CMP_PRI): Likewise.
	* regs.h (REG_FREQ_FROM_BB): New.
	(REG_FREQ_MAX): Likewise.

From-SVN: r44483
2001-07-30 20:03:37 +00:00
Jan Hubicka
0068fd9637 basic-block.h (CLEANUP_PRE_LOOP): New.
* basic-block.h (CLEANUP_PRE_LOOP): New.
	* except.c (finish_eh_generation): Update call of cleanup_cfg.
	* sibcall.c (optimize_sibling_calls): Likewise.
	* toplev.c (rest_of_compilation): Likewise.
	* flow.c (try_forward_edges): Take argument MODE;
	do not forward over loop pre-headers if CLEANUP_PRE_LOOP.
	(try_optimize_cfg): Update call of try_forward_edges.


	* (validate_replace_rtx_1): Fix simplification of MINUS.

From-SVN: r44458
2001-07-29 17:01:53 +00:00
Richard Henderson
587f922afb flow.c (life_analysis): Elide PROP_ALLOW_CFG_CHANGES if not optimizing.
* flow.c (life_analysis): Elide PROP_ALLOW_CFG_CHANGES if
        not optimizing.

From-SVN: r44451
2001-07-28 23:59:47 -07:00
Richard Henderson
91d84fadf4 flow.c (add_to_mem_set_list): New function.
* flow.c (add_to_mem_set_list): New function.
        (init_propagate_block_info): Use it.
        (mark_set_1): Likewise.
        (insn_dead_p): Canonicalize memory address for dead store
        comparison.  Allow wider mode stores to kill narrower mode stores.
        (invalidate_mems_from_autoinc): Use invalidate_mems_from_set.
        (invalidate_mems_from_set): Don't handle MEMs.

From-SVN: r44441
2001-07-28 18:13:53 -07:00
Jan Hubicka
134d3a2eaa basic-block.h (EDGE_FREQUENCY): New macro.
* basic-block.h (EDGE_FREQUENCY): New macro.
	* bb-reorder (fixup_reorder_chain): Set counts and frequencies
	for new BB/edges.
	* flow.c (find_sub_basic_blocks): Likewise.
	(try_crossjump_to_edge): Likewise; use EDGE_FREQUENCY
	(redirect_edge_and_branch): Use EDGE_FREQUENCY.

	* predict.c (DEF_PREDICTOR): New argument FLAGS.
	(HITRATE): New macro.
	(PRED_FLAG_FIRST_MATCH): New constant.
	(predictor_info): New field flgags.
	(combine_predictions_for_insn): Use DS theory to combine
	probabilities; set the edge probabilities when finished.
	(estimate_probability): Avoid duplicated matches
	of LOOP_BRANCH heuristics for nested loops; update comment.
	* predict.def: Add flags for each prediction, set probabilities
	according to B&L paper.
	* predict.h (DEF_PREDICTOR): New argument FLAGS.

	* profile.c (compute_branch_probabilities):  Cleanup way the edge
	probabilities are computed and REG_BR_PROB notes are dropped; if
	values does not match, emit error.
	(init_branch_prob): Do error instead of warning when profile driven
	feedback is missing or corrupt.

From-SVN: r44439
2001-07-28 21:37:35 +00:00
Jan Hubicka
d69d031618 flow.c (last_loop_beg_note): New function.
* flow.c (last_loop_beg_note): New function.
	(redirect_edge_and_branch): Use it.
	(split_edge): Likewise.

	* alias.c (loop_p): Avoid uninitialized memory access.

	* flow.c (try_forward_edges): Avoid accessing freed memory.

	* flow.c (backward_edge_of_syntactic_loop_p): Avoid uninitialized
	variable access.

From-SVN: r44429
2001-07-27 15:55:41 +00:00
John Wehle
a727094f58 flow.c (redirect_edge_and_branch_force): Test target->global_live_at_start.
* flow.c (redirect_edge_and_branch_force): Test
	target->global_live_at_start.

From-SVN: r44412
2001-07-27 04:35:18 +00:00
Jan Hubicka
01f62f016b rtl.h (cleanup_barriers): Declare.
* rtl.h (cleanup_barriers): Declare.
	* jump.c (cleanup_barriers): New function.
	* toplev.c (rest_of_compilation): Call cleanup_barriers
	before loop optimizer and after bb_reorder.

	* flow.c (back_edge_of_syntactic_loop_p): New.
	(split_edge): Use it.

From-SVN: r44409
2001-07-26 20:36:01 +00:00
John Wehle
11f6816516 basic-block.h (PROP_ALLOW_CFG_CHANGES): Define.
* basic-block.h (PROP_ALLOW_CFG_CHANGES): Define.
	(PROP_FINAL): Include PROP_ALLOW_CFG_CHANGES.
	(propagate_block): Update prototype.
	* flow.c (update_life_info): Simplify the CFG and
	recalculate the global regs which are alive when
	removing dead code during a global update.
	(propagate_block): Return non-zero if an INSN is
	deleted.

From-SVN: r44403
2001-07-26 18:06:45 +00:00
Jan Hubicka
6e64a52a92 flow.c (delete_dead_jumptables): New function.
* flow.c (delete_dead_jumptables): New function.
	(life_analyzis): Call it.
	* bb-reorder.c (skip_insns_after_block): Handle contradictive sequences.

From-SVN: r44365
2001-07-25 20:51:24 +00:00
Jan Hubicka
a368a2fabb flow.c (find_sub_basic_blocks): Fix handling of the last BB in the sequence.
* flow.c (find_sub_basic_blocks): Fix handling of the last BB in
        the sequence.
        (make_edges): New argument update_p; populate the edge cache if set.
        (find_basic_blocks): Update make_edges invocation.

Co-Authored-By: Richard Henderson <rth@redhat.com>

From-SVN: r44335
2001-07-25 01:30:36 -07:00
Jan Hubicka
ca9fef16af flow.c (try_simplify_condjump): Avoid duplicated edges.
* flow.c (try_simplify_condjump): Avoid duplicated edges.
	(verify_flow_info): Check for duplicated edges; clarify
	error reporting.

	* flow.c (block_label): Update basic_block_for_insn.
	(commit_edge_insertions): Call compute_bb_for_insn.

	* flow.c (purge_dead_edges): Handle conditional jumps and conditional
	returns too.

	* flow.c (redirect_edge_and_branch,
	try_optimize_cfg): Use redirect_edge_succ_nodup
	(redirect_edge_succ_nodup): New.
	* basic_block.h (redirect_edge_succ_nodup): Declare.

	* toplev.c (rest_of_compilation): Rebuild CFG before cfg_cleanup
	after gcse.

From-SVN: r44320
2001-07-24 23:42:40 +00:00
Jan Hubicka
40fc4e6a9f flow.c (try_forward_edges): Accept fallthru edge; Update comment.
* flow.c (try_forward_edges): Accept fallthru edge; Update comment.
	(try_crossjump_to_edge): Update commetns.
	(try_crossjump_bb): Likewise.

From-SVN: r44318
2001-07-24 22:34:43 +00:00
Jan Hubicka
8f54d2fffd * flow.c (delete_noop_moves): Do not confuse libcall regions.
From-SVN: r44290
2001-07-24 08:54:59 +00:00
Richard Henderson
6a7ca9966b * flow.c (try_simplify_condjump): Use tidy_fallthru_edge.
From-SVN: r44287
2001-07-23 17:57:46 -07:00
Jan Hubicka
0dd94abd70 flow.c (try_simplify_condjump): Unlink insn chain on fallthru edge; use can_fallthru.
* flow.c (try_simplify_condjump): Unlink insn chain on
	fallthru edge; use can_fallthru.

From-SVN: r44268
2001-07-23 15:27:33 +00:00
Jan Hubicka
0005550b58 basic-block.h (find_sub_basic_block): Declare.
* basic-block.h (find_sub_basic_block): Declare.
	* flow.c (make_edges): New arguments MIN and MAX;
	(find_sub_basic_blocks): Revamp to use make_edges
	and purge_dead_edges.
	(find_basic_blocks): Update call of find_sub_basic_block.

	* recog.c (split_all_insns): Always expect CFG to be consistent;
	call find_sub_basic_blocks in case something has changed.
	* toplev.c (rest_of_compilation): Always call split_all_insns once CFG
	has been built.

	* basic-block.h (delete_noop_moves): Declare.
	* combine.c (combine_instructions): Call it.
	(recog_for_combine): Tolerate noop moves
	(distribute_notes): Force refresh when register dies at noop move.
	* flow.c (delete_noop_moves): Use BB structure; delete JUMP insns
	too.
	(life_analysis): Update delete_noop_moves call.
	(set_noop_p): Move too ...
	* rtlanal.c (noop_move_p): ... here.
	* rtl.h (noop_move_p): Declare.

	* basic-block.h (purge_all_dead_edges, purge_dead_edges): New functions.
	* toplev.c (rest_of_compilation): Conditionally call purge_all_dead_edges
	after combine.
	* gcse.c (cprop_cc0_jump, cprop_insn): New argument "basic_block".
	(cprop_jump): Likewise; call purge_dead_edges if substitution suceeded.

From-SVN: r44267
2001-07-23 14:08:12 +00:00
Richard Henderson
b02eea61ce flow.c: Grammar check and clarify a lot of comments.
* flow.c: Grammar check and clarify a lot of comments.
        (try_simplify_condjump): Rename variables to be clearer.
        (try_forward_edges): Skip complex and fallthru edges.
        Rearrange tests to avoid duplicate checks.
        (flow_find_cross_jump): Likewise.
        (outgoing_edges_match): Allow match if neither branch has
        probability data.  Loosen probability match to 5%.
        (try_crossjump_to_edge): Hoist repeated indirection into
        local variables.
        (try_crossjump_bb): Don't check complex edges.  Eliminate
        redundant crossjump tests.
        (try_optimize_cfg): Fix use of bool.  Reorganize cheaper
        checks before more expensive checks.

From-SVN: r44257
2001-07-23 00:03:34 -07:00
Richard Henderson
0b6301aebe flow.c (split_block): Make sure bb_note is included in the new block when splitting before a label.
* flow.c (split_block): Make sure bb_note is included in the
        new block when splitting before a label.

From-SVN: r44250
2001-07-22 15:49:00 -07:00
Jan Hubicka
6b24c25948 basic-block.h (redirect_edge_and_branch_force, [...]): Declare.
* basic-block.h (redirect_edge_and_branch_force,
	redirect_edge_and_branch, block_label, forwarder_block_p): Declare.
	* flow.c (redirect_edge_and_branch_force,
	redirect_edge_and_branch, block_label, forwarder_block_p): Make global.
	(redirect_edge_and_branch_force): Fix copying of lifeness information.
	(block_label): Handle EXIT_BLOCK_PTR by returning NULL.
	* ifcvt.c (dead_or_predictable): Take BB as an new destionation
	instead of label; update CFG after transformation.
	(find_if_case_1): Update call, use redirect_edge_and_branch_force
	for finishing the transformation; handle even case where ELSE
	does not follow THEN.
	(find_if_case_2): Update call of dead_or_predictable; simplify
	CFG update.

	* emit-rtl.c (split_branch_probability): New global variable.
	(try_split): Take care to set split_branch_probability and
	create REG_BR_PROB note for new jump insns.
	* md.texi (define_split): Document new feature.

	* i386.c (ix86_split_fp_branch): Redistribute branch probability notes.

From-SVN: r44249
2001-07-22 21:42:35 +00:00
Richard Henderson
e9644cfea1 flow.c (try_redirect_by_replacing_jump): Correctly compute which insns to delete in the presence of cc0 in a jump insn.
* flow.c (try_redirect_by_replacing_jump): Correctly compute which
	insns to delete in the presence of cc0 in a jump insn.

From-SVN: r44217
2001-07-21 03:05:09 +00:00
Richard Henderson
0728902f90 flow.c (redirect_edge_and_branch): Bail out on complex edges.
* flow.c (redirect_edge_and_branch): Bail out on complex edges.
	(try_optimize_cfg): Do not remove tail recursive labels before sibcall.
	* jump.c (mark_jump_label): Do not forward branches.

Co-Authored-By: Jan Hubicka <jh@suse.cz>

From-SVN: r44118
2001-07-18 17:11:11 +00:00
Andreas Jaeger
b3bb645674 unix.h (ASM_OUTPUT_MI_THUNK): Fix output format for x86-64 pic support.
* config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Fix output format for
        x86-64 pic support.

        * lcm.c (optimize_mode_switching): Avoid warning for unused
        variable if !NORMAL_MODE

        * flow.c (try_crossjump_to_edge): Remove unused variable.

From-SVN: r44062
2001-07-17 06:55:25 +02:00
Jan Hubicka
4793dca158 basic-block.h (CLEANUP_PRE_SIBCALL): New constant.
* basic-block.h (CLEANUP_PRE_SIBCALL): New constant.
	* except.c (finish_eh_generation): Update call of cleanup_cfg;
	do rebuild_jump_labels instead of jump_optimize
	* sibcall.c (optimize_sibling_and_tail_recursive_call): Likewise.
	* toplev.c (rest_of_compulation): Likewise for -Wreturn_type.
	* flow.c (try_optimize_cfg): Remove unneeded code_labels.

	* flow.c: Include timevar.h
	(find_basic_block): Push/pop timevar;
	(cleanup_cfg): Likewise.
	* timevar.def (TV_CFG, TV_CLEANUP_CFG): New.
	* Makefile: Add dependencies on timevar.h

	* integrate.c (save_for_inline): Kill all BASIC_BLOCK notes.
	(copy_insn_list): Avoid killing of BASIC_BLOCK notes.

	* rtl.h (delete_trivially_dead_insns): Add new parameter.
	* toplev.c (rest_of_compilation): Update calls.
	* cse.c (set_live_p, insn_live_p, dead_libcall_p): Break out from ...
	(delete_trivially_dead_insns): ... here; accept new argument
	preserve_basic_blocks; preserve basic blocks if set.

	* reg-stack.c (stack_regs_mentioned): Return 0 if
	stack_regs_mentioned_data is not initialized.
	(reg_to_stack): Make stack_regs_mentioned survive after the
	reg-stack is completted; do not call cleanup_cfg.
	* toplev.c (rest_of_compilation): Do cleanup_cfg before bb-reorder;
	make cleanup_cfg after bb-reorder to output to debug file.

From-SVN: r44056
2001-07-16 20:54:44 +00:00
Richard Henderson
4e2db58460 hard-reg-set.h (regs_invalidated_by_call): Declare.
* hard-reg-set.h (regs_invalidated_by_call): Declare.
        * regclass.c (regs_invalidated_by_call): Move from cse.c.
        (init_reg_sets_1): Move initialization from cse_main.
        * cse.c (regs_invalidated_by_call): Move to regclass.c.
        (cse_main): Move its initialization also.
        * df.c (df_insn_refs_record): Use regs_invalidated_by_call.
        * flow.c (propagate_one_insn): Likewise.
        * gcse.c (compute_hash_table): Likewise.
        (compute_kill_rd, compute_store_table): Likewise.
        * sched-deps.c (sched_analyze_1): Likewise.

From-SVN: r44053
2001-07-16 10:54:34 -07:00
Richard Henderson
c319629b9a flow.c (redirect_edge_and_branch_force): Initialize global_live_at_start and global_live_at_end.
* flow.c (redirect_edge_and_branch_force): Initialize
        global_live_at_start and global_live_at_end.
        (allocate_bb_life_data): Export.
        * basic-block.h (allocate_bb_life_data): Declare it.
        * toplev.c (rest_of_compilation): Call it.

From-SVN: r44023
2001-07-15 08:47:05 -07:00
Jan Hubicka
1e5fd09422 Re-install recently reverted patch.
* emit-rtl.c (try_split): Update mark_jump_label call.
	* flow.c (find_sub_basic_blocks): Likewise.
	* jump.c (cross_jump_death_matters, find_cross_jump, do_cross_jump,
	jump_back_p): Kill.
	(mark_all_labels): Kill second parameter.
	(jump_optimize, jump_optimize_1): Kill cross_jump parameter.
	(rebuild_jump_labels, jump_optimize_minimal): Update call
	of jump_optimize_1.
	(jump_optimize_1): Kill crossjumping code.
	(mark_jump_label): Kill cross_jump parameter.
	* rtl.h (mark_jump_label, jump_optimize): Update prototypes.
	(JUMP_CROSS_JUMP, JUMP_CROSS_JUMP_DEATH_MATTERS): Kill.
	* reg-stack.c (reg_to_stack): Do not rebuild if not needed; do
	 splitting.
	* toplev.c (enum dump_file_index): Kill DFI_jump2; put DFI_stack before
	DFI_bpro.
	(dump_file_info): Likewise.
	(rest_of_compilation): Update calls to jump_optimize; kill jump2 pass;
	reorganize passes to do reg-stack first, bb-reorder second.
	* invoke.texi (-d letters doc): Remove the jump2 pass.

From-SVN: r44008
2001-07-14 22:52:50 +00:00
Jan Hubicka
1ed672dd7c bb-reorder.c (skip_insn_after_block): Get past the line number notes.
* bb-reorder.c (skip_insn_after_block): Get past the line number notes.

	* flow.c (redirect_edge_and_branch_force, split_edge,
	try_crossjump_to_edge): Use set_block_for_new_insns.
	* bb-reorder.c (emit_jump_to_block_after): Call set_block_for_new_insns.

From-SVN: r44002
2001-07-14 01:06:42 +00:00
Geoffrey Keating
998d20d22a Revert Jan Hubicka's patch of Fri Jul 13 14:46:21 CEST 2001.
From-SVN: r43986
2001-07-13 17:24:48 +00:00
Jan Hubicka
f3ba35e478 emit-rtl.c (try_split): Update mark_jump_label call.
* emit-rtl.c (try_split): Update mark_jump_label call.
	* flow.c (find_sub_basic_blocks): Likewise.
	* jump.c (cross_jump_death_matters, find_cross_jump, do_cross_jump,
	jump_back_p): Kill.
	(mark_all_labels): Kill second parameter.
	(jump_optimize, jump_optimize_1): Kill cross_jump parameter.
	(rebuild_jump_labels, jump_optimize_minimal): Update call
	of jump_optimize_1.
	(jump_optimize_1): Kill crossjumping code.
	(mark_jump_label): Kill cross_jump parameter.
	* rtl.h (mark_jump_label, jump_optimize): Update prototypes.
	(JUMP_CROSS_JUMP, JUMP_CROSS_JUMP_DEATH_MATTERS): Kill.
	* reg-stack.c (reg_to_stack): Do not rebuild if not needed; do
	 splitting.
	* toplev.c (enum dump_file_index): Kill DFI_jump2; put DFI_stack before
	DFI_bpro.
	(rest_of_compilation): Update calls to jump_optimize; kill jump2 pass;
	reorganize passes to do reg-stack first, bb-reorder second.
	* invoke.texi (-d letters doc): Remove the jump2 pass.

From-SVN: r43979
2001-07-13 12:55:15 +00:00
Jan Hubicka
6691db8e6b flow.c (try_optimize_cfg): Delete whole chain of trivially dead basic blocks.
* flow.c (try_optimize_cfg): Delete whole chain of trivially dead
	basic blocks.
	(verify_flow_info): Make diagnostics prettier.

From-SVN: r43967
2001-07-12 16:01:33 +00:00
Jan Hubicka
c35e85f978 flow.c (find_basic_blocks_1): Do not emit NOP after call.
* flow.c (find_basic_blocks_1): Do not emit NOP after call.

	* flow.c (outgoing_edges_match): Return early if condition reversal
	failed.

From-SVN: r43965
2001-07-12 14:52:51 +00:00
Jan Hubicka
46fac66482 flow.c (merge_blocks_move_successor_nojumps): Do not crash when fallthru edge is present.
* flow.c (merge_blocks_move_successor_nojumps): Do not crash
	when fallthru edge is present.
	(mege_blocks): Handle case where creation of jump insn
	is required.

	* basic-block.h (CLEANUP_EXPENSIVE, CLEANUP_CROSSJUMP,
	CLEANUP_POST_REGSTACK): New constants.
	* except.c (finish_eh_generation): Update call of cleanup_cfg,
	* jump.c (rtx_renumbered_equal_p): Handle 't' fields.
	* output.h (cleanup_cfg): Update prototype.
	* reg-stack.c (reg_to_stack): Use cleanup_cfg instead of jump_optimize
	* sibcall.c (optimize_sibling_and_tail_recursive_call): Update
	cleanup_cfg call; kill missleading comment.
	* toplev.c (rest_of_compilation): Update all cleanup_cfg calls.
	* flow.c (merge_blocks, try_optimize_cfg, cleanup_cfg): Accept mode
	parameter; control optimizations performed using it.
	(flow_find_cross_jump, outgoing_edges_match, try_crossjump_to_edge,
	try_crossjump_bb): New functions.

From-SVN: r43950
2001-07-11 19:42:35 +00:00
Daniel Berlin
5a660bff9a gcse.c, [...]: s/free on sbitmap vectors/sbitmap_vector_free on sbitmap vectors/g
* gcse.c, lcm.c, sched-deps.c:
        s/free on sbitmap vectors/sbitmap_vector_free on sbitmap vectors/g

        * flow.c (flow_loops_find): Free dom if we found no loops, since
        we aren't going to save it.

        * lcm.c (pre_edge_rev_lcm): Free st_antin, st_antout when we are
        done.

From-SVN: r43938
2001-07-11 10:11:47 -06:00
Jan van Male
ae0ed63adc regmove.c (replace_in_call_usage): Fix warnings.
2001-07-10  Jan van Male  <jan.vanmale@fenk.wau.nl>
	* regmove.c (replace_in_call_usage): Fix warnings.
	* sched-deps.c (add_dependence): Fix warnings.
	* simplify-rtx.c (simplify_subreg): Likewise.
	Return NULL_RTX instead of NULL.

	* reg-stack.c (emit_swap_insn): Eliminate warnings.
	(subst_asm_stack_regs): Likewise.

	* combine.c (num_sign_bit_copies): Cast bitwidth to int to avoid
	warnings.

	* dwarf2out.c (output_call_frame_info): Declare i as int.
	(build_abbrev_table): Declare n_alloc as int.
	(dwarf2out_finish): Initialize die.
	* except.c: Declare sjlj_funcdef_number as unsigned.
	(connect_post_landing_pads): Declare j as unsigned.
	(convert_to_eh_region_ranges): Initialize call_site.
	(output_function_exception_table): Initialize tt_format_size.
	* expr.c (move_by_pieces_1): Initialize to1.
	(store_constructor): Initialize minelt and maxelt.
	* flow.c (mark_regs_live_at_end): Declare i as unsigned.
	* function.c (instantiate_decls): Avoid signed/unsigned warning.

	* c-decl.c (combine_parm_decls): Unused, remove.
	* c-tree.h: Remove prototype for combine_parm_decls.

	* reload.c (push_reload): Fix warning.
	(regno_clobbered_p): Likewise.
	* reload1.c (replace_pseudos_in_call_usage): Likewise.
	(reload_combine): Likewise.

	* bitmap.c: Rename bitmap_zero to bitmap_zero_bits to fix warnings.
	* bitmap.h: Rename bitmap_zero to bitmap_zero_bits to fix
	warnings.
	* bitmap.c (bitmap_operation): Change user.
	* bitmap.h (EXECUTE_IF_AND_COMPL_IN_BITMAP): Likewise.
For cp/:
2001-07-10  Jan van Male  <jan.vanmale@fenk.wau.nl>

	* call.c (build_op_delete_call): Initialize fn.
	(convert_like_real): Delete conditional.
	(joust): Initialize *w and *l.
	* class.c: Add prototype for binfo_ctor_vtable.
	(get_primary_binfo): Initialize result.
	* init.c (build_java_class_ref): Initialize name.

	* typeck.c (unary_complex_lvalue): Do not duplicate the
	argument to modify, pre-, or post-increment when used as an
	lvalue and when the argument has side-effects.

For ch/:
2001-07-10  Jan van Male  <jan.vanmale@fenk.wau.nl>

	* ch-tree.h: Remove prototype for combine_parm_decls, unused
	function.

From-SVN: r43893
2001-07-10 12:38:10 +02:00
Diego Novillo
2b1d9dc0ef basic-block.h (tree_node): Forward declare if needed.
2001-07-09  Diego Novillo  <dnovillo@redhat.com>

	* basic-block.h (tree_node): Forward declare if needed.
	(struct basic_block_def): Add fields 'head_tree' and 'end_tree'.
	(BLOCK_HEAD_TREE): Define.
	(BLOCK_END_TREE): Define.
	(struct loops): Rename field 'tree' to 'tree_root'.
	* flow.c (entry_exit_blocks): Add initializers for 'head_tree' and
	'end_tree'.
	(flow_loops_tree_build): Rename reference to field 'tree' to
	'tree_root'.
	(flow_loops_level_compute): Ditto.
	* predict.c (estimate_bb_frequencies): Ditto.
	* tree.h (struct tree_common): Add field 'aux'.

From-SVN: r43886
2001-07-09 23:50:25 -04:00
Jan Hubicka
2b2c8b3e19 flow.c (redirect_edge_and_branch_force): New.
* flow.c (redirect_edge_and_branch_force): New.
	(can_fallthru): Ensure that basic blocks are succeeding.
	(try_optimize_cfg): Do not delete basic block if it is the last one.

	* flow.c (try_redirect_by_replacing_jump): Do not remove
	jumps with side effects, unlink chain on fallthru edge;
	set block for new jump instruction; avoid basic block to
	over by line number note.

	* flow.c (try_simplify_condjump): Verify that the condjump
	is not always falling trought.

	Re-install patch:
	* flow.c (try_redirect_by_replacing_jump): Remove cc0 setter.

	* flow.c (forwarder_block_p): Fix for fallthru blocks.
	(try_redirect_by_replacing_jump): Update properly the count
	and frequency information.

From-SVN: r43867
2001-07-09 19:32:53 +00:00
Jeffrey A Law
b62c888152 basic-block.h (first_insn_after_basic_block_note): Declare.
* basic-block.h (first_insn_after_basic_block_note): Declare.
        * flow.c (first_insn_after_basic_block_note): Define.  Moved
        from...
        * ssa.c (first_insn_after_basic_block_note): Remove.
        * ssa-dce.c (find_inherently_necessary): Consider BARRIERs
        necessary.
        (ssa_eliminate_dead_code): Properly update the CFG and PHI
        nodes when we find a dead conditional branch.  Insert BARRIERs
        after any blocks with no successors, but which do not have
        any BARRIERs.

From-SVN: r43816
2001-07-06 12:19:47 -06:00
Jeffrey Oldham
35428bb927 flow.c: Reverse Jan Hubicka's patch of 02July2001.
2001-07-05  Jeffrey Oldham  <oldham@codesourcery.com>

	* flow.c: Reverse Jan Hubicka's patch of 02July2001.
	(try_redirect_by_replacing_jump): Reverse updating properly the
	count and frequency information.  Reverse removing cc0 setter.
	(forwarder_block_p): Reverse fixing for fallthru blocks.

From-SVN: r43788
2001-07-05 20:54:29 +00:00
Jan Hubicka
f8d1529b85 flow.c (try_redirect_by_replacing_jump): Remove cc0 setter.
* flow.c (try_redirect_by_replacing_jump): Remove cc0 setter.

	* flow.c (forwarder_block_p): Fix for fallthru blocks.
	(try_redirect_by_replacing_jump): Update properly the count
	and frequency information.

From-SVN: r43708
2001-07-02 21:16:50 +00:00
Richard Kenner
faf041ed6b * flow.c (try_simplify_condjump): Fix typo in updating fallthru flags.
From-SVN: r43695
2001-07-02 12:47:57 -04:00
Diego Novillo
b02c22542a flow.c (dump_bb): Remove unused third argument to call to fprintf when...
2001-06-28  Diego Novillo  <dnovillo@redhat.com>

      * flow.c (dump_bb): Remove unused third argument to call
      to fprintf when displaying the basic block header.

From-SVN: r43649
2001-06-28 23:30:17 -04:00
Jeff Law
10c4b247fd Makefile.in (OBJS): Add df.o
* Makefile.in (OBJS): Add df.o
        (df.o): Add dependencies.
        * basic-block.h (flow_depth_first_order_compute): Declare.
        * flow.c (flow_depth_first_order_compute): No longer declare.
        Make external.
        * df.c, df.h: New files.
	* po/POTFILES.in: Update for new files.

From-SVN: r43647
2001-06-28 16:11:19 -06:00
Jan Hubicka
7a442791bb flow.c (try_merge_block): Rename to try_optimize_cfg; do basic simplifications on the CFG.
* flow.c (try_merge_block): Rename to try_optimize_cfg;
	do basic simplifications on the CFG.
	(is_forwarder_block_p, can_fallthru, try_redirect_by_replacing_jump,
	 try_simplify_condjump): New.
	(redirect_edge_and_branch): Try replace jump insn.
	(flow_delete_insn): Handle deleting of ADDR_VEC insns.

	* basic-block.h (FALLTHRU_EDGE, BRANCH_EDGE): New macros.

From-SVN: r43642
2001-06-28 18:14:05 +00:00
Jan Hubicka
b9b2c33963 i386.md (cmp?i): Simplify; refuse immediate operand in alternative 0
* i386.md (cmp?i): Simplify; refuse immediate operand
	in alternative 0
	* i386.c (cmpsi_operand): Refuse constants.

	* i386.md (movsi_insv_1, movsi_insv_1_rex64): Allow immediate operand.

	* flow.c (block_label, redirect_edge_and_branch): Split out from ....
	(split_edge) .... here;

From-SVN: r43635
2001-06-28 08:44:16 +00:00
Jan Hubicka
bc04d12c30 * flow.c (attempt_auto_inc, try_pre_increment_1): Fix typo.
From-SVN: r43527
2001-06-23 08:22:52 +00:00
Jan Hubicka
9401afe31a flow.c (mark_set_1, [...]): compute REG_FREQ using bb->frequency.
* flow.c (mark_set_1, attempt_auto_inc, mark_used_reg,
	try_pre_increment_1): compute REG_FREQ using bb->frequency.

	* regclass.c (loop_cost): Kill.
	(frequency): New global variable.
	(record_operand_costs): Replace loop_cost by frequency.
	(scan_one_insn): Likewise.
	(regclass): Likewise; set frequency according to bb->frequency.

	* flow.c (split_edge): Set frequency.

From-SVN: r43523
2001-06-22 23:27:48 +00:00
Jan Hubicka
44f498639c predict.c (block_info_def): Add nvisited.
* predict.c (block_info_def): Add nvisited.
	(propagate_freq): Count nvisited; re-queue delayed blocks; handle
	irreducible regions.

	* flow.c (dump_edge_info): Dump the probability of edge.
	(combine_predictions_for_insn): Dump the basic block.

From-SVN: r43522
2001-06-22 23:19:22 +00:00
Diego Novillo
316dcdf683 basic-block.h (dump_edge_info): Declare.
2001-06-22  Diego Novillo  <dnovillo@redhat.com>

	* basic-block.h (dump_edge_info): Declare.
	(clear_edges): Declare.
	(mark_critical_edges): Declare.
	* flow.c (dump_edge_info): Remove static declaration.
	(clear_edges): Ditto.
	(mark_critical_edges): Ditto.
	(free_basic_block_vars): Only clear edges and free basic block
	array if basic_block_info is not NULL.
	* ssa.c (compute_dominance_frontiers): Remove static declaration.
	* ssa.h (compute_dominance_frontiers): Declare.

From-SVN: r43518
2001-06-22 18:20:42 -04:00
Jan Hubicka
b2aec5c0eb regs.h (struct reg_info_def): Add freq field.
* regs.h (struct reg_info_def): Add freq field.
	(REG_N_REFS): Update comment.
	(REG_FREQ): New.
	* regclass.c (scan_one_insn): Update REG_FREQ.
	* flow.c (mark_set_1): Update REG_FREQ, make REG_N_SETS unweighted.
	(attempt_auto_inc): Likewise.
	(mark_used_reg): Likewise.
	(try_pre_increment_1): Likewise.
	* local-alloc.c (struct qty): Add freq field.
	(alloc_qty): Set freq.
	(update_equiv_regs): Set REG_FREQ.
	(QTY_CMP_PRI): Use freq.
	(combine_regs): Update qty->freq.
	* global.c (struct allocno): Update comment for n_refs;
	add freq field.
	(local_reg_freq): New array.
	(global_alloc): Update freq field;
	allocate and initialize local_reg_freq.
	(allocno_compare): Use freq field.
	(find_reg): Likewise.
	* reload1.c (count_pseudo): Use freq isntead of n_refs.
	(count_spilled_pseudo): Likewise.

	* tm.texi (GCOV_TYPE_SIZE): Document.
	* basic-block.h (gcov_type): Define.
	(struct edge_def): Use gcov_type for count field.
	(struct basic_block_def): Likewise.
	* defaults.h (GCOV_TYPE_SIZE): Define.
	* final.c (end_final): Use GCOV_TYPE_SIZE.
	* flow.c (dump_edge_info, dump_flow_info, dump_bb): Print count fields
	using HOST_WIDEST_INT_PRINT_DEC.
	* gcov-io.h (__fetch_gcov_type, __store_gcov_type, __read_gcov_type,
	__write_gcov_type): New.
	(store_long): Remove.
	* gcov.c (gcov_type): Set default.
	(struct adj_list): Use gcov_type for arc_count.
	(bb_info): Use gcov_type for succ_count, pred_count and exec_count.
	(create_program_flow_graph): Read arc_count properly.
	(solve_program_flow_graph): 'total' is gcov_type.
	(output_data): Line_counts is gcov_type, print it properly.
	* libgcc2.c (struct bb): Counts is gcov_type.
	(__bb_exit_func): Use __read_gcov_type and __write_gcov_type.
	* profile.c (LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE): Set default.
	(GCOV_TYPE_SIZE): Define.
	(struct bb_info): succ_count and pred_count is gcov_type.
	(compute_branch_probabilities): Use __read_gcov_type,
	print read edges to the dump file.
	(total): Is gcov_type.
	(gen_edge_profiler): Use GCOV_TYPE_SIZE.

From-SVN: r43505
2001-06-22 17:18:23 +00:00
Richard Henderson
ebf1c218a5 flow.c (entry_exit_blocks): Initialize frequency.
* flow.c (entry_exit_blocks): Initialize frequency.
        (split_block): Copy it.
        (dump_flow_info): Dump it.

From-SVN: r43494
2001-06-21 14:33:33 -07:00
Jeffrey A Law
164d59e04e flow.c (delete_unreachable_blocks): Fix patch error in previous change (call to find_unreachable_blocks was lost).
* flow.c (delete_unreachable_blocks): Fix patch error in
        previous change (call to find_unreachable_blocks was lost).

From-SVN: r43463
2001-06-19 09:03:01 -06:00
Jeffrey A Law
1e29ee12f0 flow.c (find_unreachable_blocks): New function.
* flow.c (find_unreachable_blocks): New function.
	(delete_unreachable_blocks): Use find_unreachable_blocks.
	* basic-block.h (find_unreachable_blocks): Declare.

From-SVN: r43448
2001-06-18 13:46:37 -06:00
Mark Mitchell
e68e310815 basic-block.h: Improve comments.
* basic-block.h: Improve comments.
	* except.c (expand_eh_region_end_allowed): Remove redundant call
	to do_pending_stack_adjust.
	* flow.c (life_analysis): Fix typo in comment.
	(calculate_global_regs_live): Add documentation.
	(mark_set_1): Likewise.
	(debug_regset): Likewise.
	* doc/rtl.texi (cond_exec): Document it.

From-SVN: r43049
2001-06-08 21:54:11 +00:00
Richard Henderson
37bb27091e flow.c (mark_used_reg): Clean up looping over multiple hard registers.
* flow.c (mark_used_reg): Clean up looping over multiple hard
        registers.  Do conditional life bits across multiple hard regs.

From-SVN: r42942
2001-06-06 00:33:57 -07:00
Jan Hubicka
c9682caf90 flow.c (set_block_for_new_insns): Remove bogus shortcut.
* flow.c (set_block_for_new_insns): Remove bogus shortcut.
	* i386.c (ix86_expand_int_movcc): Force one of operands to be register.

From-SVN: r42747
2001-05-31 17:11:44 +00:00
Jeffrey A Law
fca790eb60 flow.c (life_analysis): After life analysis is complete...
* flow.c (life_analysis): After life analysis is complete, do
        an optional scan over insns looking for REG_LABEL notes that
        reference a deleted label.
        (propagate_block_delete_insn): Verify INOTE is a CODE_LABEL
        before peeking at LABEL_NUSES.

From-SVN: r42131
2001-05-15 22:12:33 -06:00
Jeffrey A Law
5bb86bf23d flow.c (propagate_block_delete_insn): Handle deletion of ADDR_VEC and ADDR_DIFF_VEC insns when...
* flow.c (propagate_block_delete_insn): Handle deletion of ADDR_VEC
        and ADDR_DIFF_VEC insns when the proceeding CODE_LABEL was put
        into the constant pool.
        * jump.c (jump_optimize_1): Remove barrier successors after all
        the LABEL_NUSES counds have been computed.
        (delete_barrier_successors): When deleting a tablejump insn, also
        delete the jump table it uses.
        * varasm.c (force_const_mem): Set LABEL_PRESERVE_P when forcing a
        label into memory.

From-SVN: r41662
2001-04-28 10:53:00 -06:00
Mark Mitchell
e8c8470b1c flow.c (proagate_one_insn): Remove useless assignment.
* flow.c (proagate_one_insn): Remove useless assignment.
	* jump.c (delete_insn): Tidy.
	* loop.c (try_copy_prop): When deleting an instruction with a
	REG_RETVAL note, delete the entire libcall sequence.
	(loop_delete_insns): New function.
	* unroll.c (initial_reg_note_copy): Copy INSN_LIST notes, even if
	we're not substituting into them yet.

From-SVN: r41486
2001-04-21 18:45:00 +00:00
Richard Kenner
c57718d3fe gcse.c (update_ld_motion_stores): Don't use variable I for an insn.
* gcse.c (update_ld_motion_stores): Don't use variable I for an insn.
	* flow.c (set_block_for_new_insns): Remove needless cast and
	properly check for unset block number.

From-SVN: r41227
2001-04-10 17:45:12 -04:00
Andrew MacLeod
ccbaf064ff basic-block.h (set_new_block_for_insns): New Prototype.
2001-04-09  Andrew MacLeod  <amacleod@redhat.com>

	* basic-block.h (set_new_block_for_insns): New Prototype.
	(set_block_num): Delete prototype.
	* flow.c (set_block_num): Remove obsolete function.
	(set_block_for_new_insns): Set BB for single or multiple insns.
	* gcse.c (handle_avail_expr): Use set_block_for_new_insns.
	(process_insn_end_bb): Use set_block_for_new_insns or
	set_block_for_insn instead of set_block_num.
	(pre_insert_copy_insn): Use set_block_for_new_insns.
	(update_ld_motion_stores): Use set_block_for_new_insns.
	(insert_insn_start_bb): Use set_block_for_new_insns.
	(replace_store_insn): Use set_block_for_new_insns.

From-SVN: r41208
2001-04-09 15:17:08 +00:00
John Wehle
7142e31845 rtl.h (set_noop_p): Declare.
* rtl.h (set_noop_p): Declare.
	* flow.c (set_noop_p): Move from here ...
	* rtlanal.c (set_noop_p): ... to here and enhance.
	* cse.c (delete_trivially_dead_insns): Use it.
	* gcse.c (hash_scan_set): Likewise.
	* jump.c (delete_noop_moves): Likewise.
	* recog.c (split_all_insns): Likewise.

From-SVN: r41077
2001-04-04 05:03:29 +00:00
Jakub Jelinek
ddef6bc7a3 Use byte offsets in SUBREGs instead of words.
2001-04-03  Jakub Jelinek  <jakub@redhat.com>
	    David S. Miller  <davem@pierdol.cobaltmicro.com>
            Andrew MacLeod  <amacleod@redhat.com>

	Use byte offsets in SUBREGs instead of words.

	* alias.c (nonlocal_mentioned_p): Use subreg_regno function.
	* caller-save.c (mark_set_regs): Change callers of subreg_hard_regno
	to pass new argument.
	(add_stored_regs): Use subreg_regno_offset function.
	* calls.c (expand_call): For non-paradoxical SUBREG take endianess
	into account.
	(precompute_arguments): Use gen_lowpart_SUBREG.
	* combine.c (try_combine): Replace explicit XEXP with SUBREG_REG.
	(combine_simplify_rtx): Rework to use SUBREG_BYTE.
	(simplify_set): Rework to use SUBREG_BYTE.
	(expand_field_assignment): Use SUBREG_BYTE.
	(make_extraction): Use SUBREG_BYTE.
	(if_then_else_cond): Use SUBREG_BYTE.
	(apply_distributive_law): Use SUBREG_BYTE and fixup subreg comments.
	(gen_lowpart_for_combine): Compute full byte offset.
	* cse.c (mention_regs): Use SUBREG_BYTE.
	(remove_invalid_subreg_refs): Rework to use SUBREG_BYTE.
	(canon_hash): Use SUBREG_BYTE.
	(fold_rtx): Pass SUBREG_BYTE div UNITS_PER_WORD to operand_subword.
	(gen_lowpart_if_possible): Formatting.
	* dbxout.c (dbxout_symbol_location): Compute SUBREG hard regnos
	correctly.
	* dwarf2out.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG
	(mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	(loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	* dwarfout.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG
	(output_mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	(output_loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	* emit-rtl.c (gen_rtx_SUBREG): New function, used to verify
	certain invariants about SUBREGs the compiler creates.
	(gen_lowpart_SUBREG): New function.
	(subreg_hard_regno): New function to get the final register number.
	(gen_lowpart_common): Use SUBREG_BYTE.
	(gen_imagpart): Spacing nits.
	(subreg_realpart_p): Use SUBREG_BYTE.
	(gen_highpart): Use SUBREG_BYTE.
	(subreg_lowpart_p): Always compute endian corrected goal offset,
	even at the byte level, then compare against that.
	(constant_subword): New function, pulled out all constant cases
	from operand_subword and changed second argument name to offset.
	(operand_subword): Detect non REG/SUBREG/CONCAT/MEM cases early
	and call constant_subword to do the work.  Return const0_rtx if
	looking for a word outside of OP.
	(operand_subword_force): Change second arg name to offset.
	* expmed.c (store_bit_field): Use SUBREG_BYTE.
	(store_split_bit_field): Use SUBREG_BYTE.
	(extract_bit_field): Use SUBREG_BYTE.
	(extract_split_bit_field): Use SUBREG_BYTE.
	(expand_shift): Use SUBREG_BYTE.
	* expr.c (store_expr, expand_expr): Use gen_lowpart_SUBREG.
	* final.c (alter_subreg) Use subreg_hard_regno and SUBREG_BYTE.
	* flow.c (set_noop_p): Use SUBREG_BYTE.
	(mark_set_1): Remove ALTER_HARD_SUBREG. Use subreg_regno_offset instead.
	* function.c (fixup_var_refs_1): Fixup explicit XEXP into a SUBREG_REG.
	(fixup_memory_subreg): Use SUBREG_BYTE and remove byte endian
	correction code.
	(optimize_bit_field): Use SUBREG_BYTE.
	(purge_addressof_1): Use SUBREG_BYTE.
	(purge_single_hard_subreg_set): Use subreg_regno_offset function.
	(assign_params): Mark arguments SUBREG_PROMOTED_VAR_P if they are
	actually promoted by the caller and PROMOTE_FOR_CALLS_ONLY is true.
	* gengenrtl.c (special_rtx): Add SUBREG.
	* global.c (mark_reg_store): Use SUBREG_BYTE.
	(set_preference): Rework to use subreg_regno_offset and SUBREG_BYTE.
	* ifcvt (noce_emit_move_insn): Use SUBREG_BYTE.
	* integrate.c (copy_rtx_and_substitute): Use SUBREG_BYTE and make sure
	final byte offset is congruent to subreg's mode size.
	(subst_constants): Use SUBREG_BYTE.
	(mark_stores): Use subreg_regno_offset function.
	* jump.c (rtx_renumbered_equal_p, true_regnum): Use subreg_regno_offset
	function and SUBREG_BYTE.
	* local-alloc.c (combine_regs): Use subreg_regno_offset function.
	(reg_is_born): Use subreg_hard_regno.
	* recog.c (valid_replace_rtx_1): Use SUBREG_BYTE and remove byte
	endian correction code.  Don't combine subregs unless resulting
	offset aligns with type.  Fix subreg constant extraction for DImode.
	Simplify SUBREG of VOIDmode CONST_DOUBLE.
	(general_operand): Remove dead mode_altering_drug code.
	(indirect_operand): Use SUBREG_BYTE.
	(constrain_operands): Use subreg_regno_offset function.
	* reg-stack.c (get_true_reg): Use subreg_regno_offset function.
	* regmove.c (regmove_optimize): Use SUBREG_BYTE.
	(optimize_reg_copy_3): Use gen_lowpart_SUBREG.
	* regs.h (REG_SIZE): Allow target to override.
	(REGMODE_NATURAL_SIZE): New macro which target can override.
	* reload.c (reload_inner_reg_of_subreg): subreg_regno should be used
	on the entire subreg rtx.
	(push_reload): Use SUBREG_BYTE in comments and code.
	(find_dummy_reload): Use subreg_regno_offset.  Only adjust offsets
	for hard registers inside subregs.
	(operands_match_p): Use subreg_regno_offset.
	(find_reloads): Use SUBREG_BYTE and only advance offset for subregs
	containing hard regs.
	(find_reload_toplev): Use SUBREG_BYTE.  Remove byte endian
	corrections when fixing up MEM subregs.
	(find_reloads_address_1): Use SUBREG_BYTE, subreg_regno, and
	subreg_regno_offset where appropriate.
	(find_reloads_subreg_address): Use SUBREG_BYTE.  Remove
	byte endian corrections when fixing up MEM subregs.
	(subst_reloads): When combining two subregs, make sure final
	offset is congruent to subreg's mode size.
	(find_replacement): Use SUBREG_BYTE and subreg_regno_offset.
	(refers_to_regno_for_reload_p): Use subreg_regno.
	(reg_overlap_mentioned_for_reload_p): Use subreg_regno_offset.
	* reload1.c (eliminate_regs) Use SUBREG_BYTE. Remove byte endian
	correction code for memory subreg fixups.
	(forget_old_reload_1): Use subreg_regno_offset.
	(choose_reload_regs): Use subreg_regno.
	(emit_input_reload_insns): Use SUBREG_BYTE.
	(reload_combine_note_store): Use subreg_regno_offset.
	(move2add_note_store): Use subreg_regno_offset.
	* resource.c (update_live_status, mark_referenced_resources): Use
	subreg_regno function.
	(mark_set_resources): Use subreg_regno function.
	* rtl.h (SUBREG_WORD): Rename to SUBREG_BYTE.
	(subreg_regno_offset, subreg_regno): Define prototypes.
	(subreg_hard_regno, constant_subword, gen_rtx_SUBREG): Newi functions.
	(gen_lowpart_SUBREG): Add prototype.
	* rtl.texi (subreg): Update to reflect new byte offset representation.
	Add mentioning of the effect that BYTES_BIG_ENDIAN has on subregs now.
	* rtlanal.c (refers_to_regno_p): Use subreg_regno.
	(reg_overlap_mentioned_p): Use subreg_regno.
	(replace_regs); Make sure final offset of combined subreg is
	congruent to size of subreg's mode.
	(subreg_regno_offset): New function.
	(subreg_regno): New function.
	* sched-vis.c (print_value): Change SUBREG_WORD to SUBREG_BYTE.
	* sdbout.c (sdbout_symbol): Compute offset using alter_subreg.
	* stmt.c (expand_anon_union_decl): Use gen_lowpart_SUBREG.
	* tm.texi (ALTER_HARD_SUBREG): Remove, it is now dead.
	(SUBREG_REGNO_OFFSET): Describe SUBREG_REGNO_OFFSET overrides.
	* config/a29k/a29k.c (gpc_reg_operand): Use subreg_regno.
	(a29k_get_reloaded_address): Use SUBREG_BYTE.
	(print_operand): Use SUBREG_BYTE.
	* config/alpha/alpha.c (print_operand_address): Use SUBREG_BYTE.
	* config/arm/arm.c (arm_reload_in_hi): Use SUBREG_BYTE.
	(arm_reload_out_hi): Use SUBREG_BYTE.
	* config/d30v/d30v.c (d30v_split_double): Use subreg_regno_offset
	instead of SUBREG_WORD.
	(d30v_print_operand_memory_reference): Use subreg_regno_offset.
	* config/dsp16xx/dsp16xx.md (extendqihi2, zero_extendqihi2): Fix
	SUBREG creation to use byte offset.
	* config/h8300/h8300.md (Unnamed HImode zero extraction and 16bit
	inverted load insns): Fix explicit rtl subregs to use byte
	offsets.
	* config/i370/i370.md (cmpstrsi, movstrsi, mulsi3, divsi3,
	udivsi3, umodsi3): Generate SUBREGs with byte offsets.
	* config/i860/i860.c (single_insn_src_p): Use SUBREG_BYTE.
	* config/i860/i860.md (mulsi3_big): Fixup explicit SUBREGs in rtl
	to use byte offsets.
	(unnamed fmlow.dd insn): Fixup SUBREGS to use byte offsets.
	* config/i960/i960.md (extendhisi2): Generate SUBREGs with byte
	offsets, also make sure it is congruent to SUBREG's mode size.
	(extendqisi2, extendqihi2, zero_extendhisi2, zero_extendqisi2,
	unnamed ldob insn): Generate SUBREGs with byte offset.
	(zero_extendqihi2): SUBREG's are byte offsets.
	* config/m68hc11/m68hc11.c (m68hc11_gen_lowpart): Use SUBREG_BYTE.
	(m68hc11_gen_highpart): Use SUBREG_BYTE.
	* config/m68k/m68k.md (zero_extendhisi2, zero_extendqihi2,
	zero-extendqisi2): Generate SUBREGs with byte offset.
	(umulsidi3, mulsidi3, subreghi1ashrdi_const32,
	subregsi1ashrdi_const32, subreg1lshrdi_const32): Fixup explicit
	subregs in rtl to use byte offsets.
	* config/m88k/m88k.md (extendsidi2): fixup subregs to use byte offset.
	* config/mips/mips.c (mips_move_1word): Use subreg_regno_offset.
	(mips_move_2words): Use subreg_regno_offset.
	(mips_secondary_reload_class): Use subreg_regno_offset.
	* config/mips/mips.md (DImode plus, minus, move, and logical op
	splits): Fixup explicit subregs in rtl to use byte offsets.
	* config/mn10200/mn10200.c (print_operand): Use subreg_regno function.
	* config/mn10300/mn10300.c (print_operand): Use subreg_regno function.
	* config/ns32k/ns32k.md (udivmoddisi4): Fix explicit subregs in
	rtl to use byte offsets.
	* config/pa/pa.c (emit_move_sequence): Use SUBREG_BYTE.
	* config/pa/pa.md (floatunssisf2, floatunssidf2, mulsi3): fix explicit
	subregs to use byte offsets.
	* config/pdp11/pdp11.md (zero_extendhisi2, modhi3, modhi3+1):
	Fixup explicit subregs in rtl to use byte offsets.
	* config/romp/romp.c (memory_offset_in_range_p): Use SUBREG_BYTE
	and remove byte endian correction code.
	* config/sh/sh.c (output_movedouble): Use subreg_regno.
	(gen_ashift_hi): Use SUBREG_BYTE.
	(regs_used): Use subreg_regno_offset.
	(machine_dependent_reorg): Use subreg_regno_offset.
	* config/sh/sh.h (INDEX_REGISTER_RTX_P): Use SUBREG_BYTE.
	* config/sh/sh.md (DImode and DFmode move splits): Use subreg_regno.
	(movdf_i4): Subregs are byte offsets now.
	* config/sparc/sparc.c (ultra_find_type): Use SUBREG_BYTE.
	* config/sparc/sparc.h (ALTER_HARD_SUBREG): Removed.
	(REGMODE_NATURAL_SIZE): Override.
	(REG_SIZE): For SUBREG check float mode on SUBREG_REG's mode.
	* config/sparc/sparc.md (TFmode move splits): Generate SUBREGs
	with byte offsets.
	(zero_extendhisi2, zero_extendqidi2_insn, extendhisi2,
	extendqihi2, sign_extendqihi2_insn, sign_extendqisi2_insn,
	extendqidi2): Generate SUBREGs with byte offsets, also make sure
	it is congruent to SUBREG's mode size.
	(smulsi3_highpart_v8plus): Fix explicit subregs in rtl to use byte
	offsets.
	(cmp_siqi_trunc, cmp_siqi_trunc_set, cmp_diqi_trunc,
	cmp_diqi_trunc_set, lshrdi3_v8plus+1, lshrdi3_v8plus+2,
	lshrdi3_v8plus+3, lshrdi3_v8plus+4): Use proper
	SUBREG_BYTE offset for non-paradoxical subregs in patterns.
	* config/v850/v850.c (print_operand, output_move_double): Use
	subreg_regno function.

Co-Authored-By: Andrew MacLeod <amacleod@redhat.com>
Co-Authored-By: David S. Miller <davem@pierdol.cobaltmicro.com>

From-SVN: r41058
2001-04-03 15:06:12 +00:00
Richard Henderson
52a11cbfcf IA-64 ABI Exception Handling.
From-SVN: r40924
2001-03-28 03:04:51 -08:00
Richard Henderson
2f2ee4bba2 flow.c (cleanup_cfg): Take no argument.
* flow.c (cleanup_cfg): Take no argument.
        * output.h, sibcall.c, toplev.c: Update all calls.

From-SVN: r40910
2001-03-27 22:53:49 -08:00
Richard Henderson
ad73b55832 flow.c (tidy_fallthru_edges): Don't combine complex edges.
* flow.c (tidy_fallthru_edges): Don't combine complex edges.
        (calculate_global_regs_live): Kill call-clobbered registers
        across exception edges.
        * reg-stack.c (convert_regs_1): Kill the entire target stack
        across non-call exception edges.

From-SVN: r40909
2001-03-27 22:22:23 -08:00
Richard Henderson
c1e9f66309 bb-reorder.c, [...]: Rename asynchronous_exceptions to flag_non_call_exceptions.
* bb-reorder.c, dwarf2out.c, except.c, except.h, flow.c,
        jump.c, toplev.c:
        Rename asynchronous_exceptions to flag_non_call_exceptions.

        * java/decl.c (end_java_method): Rename asynchronous_exceptions to
        flag_non_call_exceptions.

From-SVN: r40902
2001-03-27 20:18:13 -08:00
Jim Wilson
685af3af8a Fix ia64-linux ICE on bash.
* flow.c (struct reg_cond_life_info): New fields orig_condition
	and stores.
	(init_propagate_block_info): Set new fields.
	(mark_regno_cond_dead): Set and use new fields.
	(flush_reg_cond_reg_1): Likewise.
	(and_reg_cond, case AND): Check for redundant AND conditions.
	(mark_used_reg): Delete unnecessary clears before freeing splay trees.
	Set new fields.

From-SVN: r40881
2001-03-27 14:48:03 -08:00
Richard Henderson
5e7f4a4ab9 mkconfig.sh: Include insn-flags.h.
* mkconfig.sh: Include insn-flags.h.
	* Makefile.in (CONFIG_H): Include insn-flags.h.
	(lots of objects): Remove insn-codes.h and insn-flags.h.

	* alias.c, bb-reorder.c, calls.c, do-loop.c, flow.c, haifa-sched.c,
	integrate.c, jump.c, loop.c, predict.c, profile.c, reg-stack.c,
	regmove.c, reorg.c, a29k/a29k.c, alpha/alpha.c, arc/arc.c, arm/arm.c,
	avr/avr.c, clipper/clipper.c, convex/convex.c, d30v/d30v.c,
	dsp16xx/dsp16xx.c, fr30/fr30.c, h8300/h8300.c, i370/i370.c,
	i386/i386.c, i860/i860.c, ia64/ia64.c, m32r/m32r.c, m68hc11/m68hc11.c,
	m68k/m68k.c, m88k/m88k.c, mcore/mcore.c, mn10200/mn10200.c,
	mn10300/mn10300.c, ns32k/ns32k.c, pa/pa.c, pdp11/pdp11.c,
	pj/pj.c, romp/romp.c, rs6000/rs6000.c, sh/sh.c, sparc/sparc.c,
	v850/v850.c, vax/vax.c:
	Don't include insn-flags.h.

	* diagnostic.c, expr.h, reload.c, toplev.c:
	Don't include insn-codes.h.

	* builtins.c, combine.c, except.c, explow.c, expmed.c, expr.c,
	final.c, function.c, optabs.c, recog.c, reload1.c, stmt.c,
	c4x/c4x.c, i960/i960.c, mips/mips.c:
	Don't include insn-codes.h or insn-flags.h.

	* genemit.c, genopinit.c, genoutput.c: Don't include insn-codes.h
	or insn-flags.h in the generated code.
	* genflags.c (gen_proto): Use "struct rtx_def *" instead of "rtx".
	(main): Forward declare struct rtx_def.

From-SVN: r40754
2001-03-22 10:48:52 -08:00
Richard Kenner
e8ea2809d0 flow.c (insn_dead_p): Don't consider two memrefs equivalent unless anti_dependence says they are.
* flow.c (insn_dead_p): Don't consider two memrefs equivalent
	unless anti_dependence says they are.
	* alias.c (objects_must_conflict): If neither has a type specified,
	they must conflict.

From-SVN: r40420
2001-03-12 14:09:57 -05:00
Jan Hubicka
a686dbf86a flow.c (find_sub_basic_blocks): New function.
* flow.c (find_sub_basic_blocks): New function.
	(split_block): Be ready for basic block introduced by CODE_LABEL.
	(commit_one_edge_insertion): Call find_sub_basic_block.

	* flow.c (make_edges): Add edge from entry for blocks starting with
	label having ALTERNATE_NAME

From-SVN: r40021
2001-02-24 02:32:33 +00:00
Jan Hubicka
ccfce8d2ee flow.c (init_propagate_block_info): Canon address and use single_set for killing dead memory stores.
* flow.c (init_propagate_block_info): Canon address and use single_set
	for killing dead memory stores.

From-SVN: r39949
2001-02-21 16:52:40 +00:00
Aldy Hernandez
7e6d8ba184 new macro REVERSE_CONDEXEC_PREDICATES_P
From-SVN: r39947
2001-02-21 15:59:30 +00:00
Richard Earnshaw
3c88f36654 flow.c (mark_set_1): Make not_dead unsigned long.
* flow.c (mark_set_1): Make not_dead unsigned long.  For
non-pseudos, use it as a bitmask of the hard regs that
don't die.

From-SVN: r39943
2001-02-21 12:18:11 +00:00
Richard Kenner
63c499dc55 flow.c (print_rtl_and_abort_fcn): Renamed from print_rtl_and_abort.
* flow.c (print_rtl_and_abort_fcn): Renamed from print_rtl_and_abort.
	Call fancy_abort directly, passing args.
	(print_rtl_and_abort): Now a macro, like fancy_abort.

From-SVN: r39852
2001-02-18 15:56:03 -05:00
Richard Kenner
a8b94b40ad * flow.c (tidy_fallthru_edge): Never end block on line number NOTE.
From-SVN: r39739
2001-02-15 21:35:30 -05:00
Jan Hubicka
848e0190fb cse.c (cse_main): Converts ifdefs on PIC_OFFSET_TABLE_REGNUM to conditionals.
* cse.c (cse_main): Converts ifdefs on PIC_OFFSET_TABLE_REGNUM to
	conditionals.
	* defaults.h (PIC_OFFSET_TABLE_REGNUM): Default to INVALID_REGNUM.
	* emit-rtl.c (init_emit_once): Convert ifdefs to conditionals.
	* flow.c (mark_regs_live_at_end): Likewise.
	(calculate_global_regs_live): Likewise.
	* gcse.c (compute_hash_table): Likewise.
	(compute_kill_rd): Likewise.
	* resource.c (mark_target_live_regs): Likewise.
	* rtl.h (INVALID_REGNUM): New macro.

From-SVN: r39643
2001-02-13 20:17:45 +00:00
Richard Kenner
400500c4a5 diagnostic.h (set_internal_error_function): Renamed.
* diagnostic.h (set_internal_error_function): Renamed.
	* toplev.h (internal_error): Renamed from fatal.
	(pfatal_with_name): Deleted.
	(fatal_io_error): Now has printf-style arguments.
	* diagnostic.c (pfatal_with_name): Deleted.
	(fatal_io_error): Rework to have args in printf-style.
	(set_internal_error_function): Renamed from set_fatal_function.
	(internal_error): Renamed from fatal.
	(error_recursion, fancy_abort): Call internal_error instead of fatal.
	* dwarf2out.c (get_cfa_from_loc_descr): Likewise.
	* emit-rtl.c (gen_realpart, gen_imagpart): Likewise.
	* expr.c (check_max_integer_computation_mode, expand_expr): Likewise.
	* flow.c (verify_flow_info): Likewise.
	* config/arm/arm.c (thumb_unexpanded_epilogue): Likewise.
	* config/mips/mips.c (save_restore_insns): Likewise.
	* cp/init.c (build_java_class_ref): Likewise.
	(dsp16xx_reg_class_from_letter): Likewise.
	(limit_reload_class, double_reg_to_memory): Likewise.
	(print_operand_address, emit_1600_code_shift): Likewise.
	(gen_tst_reg, gen_compare_reg): Likewise.
	* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
	* cp/decl.c (pushdecl): Likewise.
	* java/check-init.c (check_init): Likewise.
	* java/expr.c (java_lang_expand_expr): Likewise.
	* java/jcf-parse.c (get_constant): Likewise.
	* java/mangle.c (java_mangle_decl): Likewise.
	* java/parse.y (make_nested_class_name, java_complete_lhs): Likewise.
	(operator_string): Likewise.

	* except.c (duplicate_eh_handlers): Call abort instead of fatal.
	* flow.c (verify_flow_info): Likewise.
	* ch/convert.c (convert): Likewise.
	* ch/except.c (pop_handler, chill_check_no_handlers): Likewise.
	* ch/expr.c (chill_expand_expr): Likewise.
	* ch/parse.c (peek_token_, pushback_token, require): Likewise.
	* config/arm/arm.c (thumb_load_double_from_address): Likewise.
	* config/avr/avr.c (pttreg_to_str, unique_section): Likewise.
	(avr_normalize_condition): Likewise.
	* config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise.
	* config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
	(limit_reload_class, double_reg_to_memory): Likewise.
	(print_operand_address, emit_1600_code_shift): Likewise.
	(gen_tst_reg, gen_compare_reg): Likewise.
	* config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise.
	* cp/decl.c (pushdecl): Likewise.
	* java/check-init.c (check_init): Likewise.
	* java/class.c (build_class_ref): Likewise.
	* java/constants.c (write_constant_pool): Likewise.
	* java/decl.c (start_java_method): Likewise.
	* java/expr.c (push_type, java_stack_pop, java_stack_swap): Likewise.
	(java_stack_dup, encode_newarray_type): Likewise.
	(build_java_array_length_access): Likewise.
	(build_java_check_indexed_type, expand_java_pushc): Likewise.
	(build_java_soft_divmod, build_invokeinterface): Likewise.
	* java/java-tree.h (INNER_CLASS_P): Likewise.
	* java/jcf-parse.c (parse_signature, get_name_constant): Likewise.
	(give_name_to_class, get_class_constant): Likewise.
	* java/jcf-write.c (CHECK_PUT, CHECK_OP, get_access_flags): Likewise.
	(find_constant_index, generate_bytecode_conditional): Likewise.
	(generate_bytecode_insns, perform_relocations): Likewise.
	* java/lex.c (java_unget_unicode, java_lex): Likewise.
	* java/mangle.c (mangle_type, mangle_record_type): Likewise.
	(mangle_pointer_type, mangle_array_type, init_mangling): Likewise.
	(finish_mangling): Likewise.
	* java/parse.h (MARK_FINAL_PARMS): Likewise.
	* java/parse.y (pop_current_osb, unreachable_stmt_error): Likewise.
	(obtain_incomplete_type, java_complete_class): Likewise.
	(java_check_regular_methods, java_complete_expand_method): Likewise.
	(cut_identifier_in_qualified, check_deprecation): Likewise.
	(patch_invoke, find_applicable_accessible_methods_list): Likewise.
	(java_complete_lhs, lookup_name_in_blocks): Likewise.
	(check_final_variable_indirect_assignment, build_unaryop): Likewise.
	* java/typeck.c (set_local_type, parse_signature_type): Likewise.
	(parse_signature_string, build_java_signature): Likewise;
	(set_java_signature): Likewise.
	* java/verify.c (type_stack_dup, CHECK_PC_IN_RANGE): Likewise.

	* c-parse.in (methoddef): Call fatal_error instead of fatal.
	* objc/objc-act.c (build_ivar_chain): Likewise.
	* cp/except.c (decl_is_java_type): Likewise.
	* cp/init.c (build_java_class_ref): Likewise.
	* cp/init.c (build_new_1): Likewise.
	* f/com.c (ffecom_init_0): Likewise.
	* java/class.c (add_method, build_static_field_ref): Likewise.
	* java/expr.c (build_known_method_ref, expand_invoke): Likewise.
	* java/jcf-parse.c (get_constant, jcf_parse): Likewise.
	* java/lex.c (java_new_new_lexer): Likewise.
	* java/jv-scan.c (main): Likewise.
	(fatal_error): Renamed from fatal.

	* dwarfout.c (dwarfout_init): Call fatal_io_error instead of
	pfatal_with_name.
	* graph.c (clean_graph_dump_file): Likewise.
	* profile.c (init_branch_prob): Likewise.
	* ch/grant.c (write_grant_file): Likewise.
	* ch/lex.c (init_parse, same_file, yywrap): Likewise.
	* f/com.c (init_parse): Likewise.
	* java/jcf-parse.c (yyparse): Likewise.
	* objc/objc-act.c (objc_init): Likewise.

	* java/jcf-parse.c (jcf_parse_source): Call fatal_io_error, not fatal.
	(yyparse): Likewise.
	* java/jcf-write.c (make_class_file_name, write_classfile): Likewise.
	* java/lex.c (java_get_line_col): Likewise.

	* hash.c (hash_allocate): Don't check for failure returns from
	obstack functions that can't fail.
	(hash_table_init_n, hash_table_init): Likewise; also now return void.
	* hash.h (hash_table_init_n, hash_table_init): Now return void.
	* cp/decl.c (build_typename_type): hash_table_init now returns void.

	* ch/lang.c (GNU_xref_begin, GNU_xref_end): Deleted.
	* ch/lex.c (convert_bitstring): Delete check for alloca failure.
	* config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare):
	Deleted.
	* config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it.

	* f/com.c (ffecom_decode_include_option_): Make errors non-fatal.
	* f/lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise.
	(ffelex_hash_): Likewise.
	* config/arm/arm.c (arm_override_options): Likewise.
	* config/avr/avr.c (avr_override_options): Likewise.
	* config/c4x/c4x.c (c4x_expand_prologue): Likewise.
	* config/dsp16xx/dsp16xx.c (function_prologue): Likewise.
	* config/h8300/h8300.c (h8300_init_once): Likewise.
	* config/mips/mips.c (override_options): Likewise.
	* config/i386/i386.c (override_options): Likewise, rework.
	* config/m68k/m68k.c (override_options): Likewise.
	* cp/decl.c (init_decl_processing): Likewise.
	* java/jcf-parse.c (load_class): Likewise.

	* config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage
	instead of fatal.
	* config/mips/mips.c (print_operand): Likewise.

	* java/lex.c (byteswap_init, need_byteswap): Only #ifdef HAVE_ICONV.
	* objc/objc_act.c (objc_check_decl): Remove unneeded fatal call.
	(get_object_reference): Likewise.

From-SVN: r39443
2001-02-04 17:44:12 -05:00
Richard Henderson
240f9c2b13 flow.c (init_propagate_block_info): Don't consider unchanging memories for dead frame store elimination.
* flow.c (init_propagate_block_info): Don't consider unchanging
        memories for dead frame store elimination.

From-SVN: r39222
2001-01-23 18:23:54 -08:00
Richard Kenner
7193d1dc3d rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility.
* rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility.
	* flow.c (mark_set_1, case PARALLEL): Don't require BLKmode, allow
	element to be null, and always expect an EXPR_LIST.
	* rtlanal.c (reg_overlap_mentioned_p, note_stores): Likewise.
	* sched-deps.c (sched_analyze_1): Likewise.
	* sched-rgn.c (check_live_1, update_live_1): Likewise.

From-SVN: r39141
2001-01-19 13:28:58 -05:00
Richard Kenner
90d036a050 flow.c (mark_set_1, [...]): Now case; rework to allow entry to be EXPR_LIST.
* flow.c (mark_set_1, case PARALLEL): Now case; rework to allow
	entry to be EXPR_LIST.
	* rtlanal.c (reg_overlap_mentioned_p): Allow PARALLEL in SET to
	be an EXPR_LIST (but not null, which other code doesn't allow).
	(note_stores): Properly handle PARALLEL in SET.
	Recursively call for top-level PARALLEL.
	* sched-deps.c (sched_analyze_1): Handle EXPR_LIST in PARALLEL in SET.
	* sched-rgn.c (check_live_1, update_live_1): Likewise.

From-SVN: r39118
2001-01-18 08:14:34 -05:00
Richard Kenner
50e9b3f17a flow.c (propagate_on_insn): Make trying to delete a prologue or epilogue insn an ICE, not a warning.
* flow.c (propagate_on_insn): Make trying to delete a prologue
	or epilogue insn an ICE, not a warning.  Allow doing this if
	the current function returns with stack pointer depressed.

From-SVN: r39078
2001-01-16 18:10:36 -05:00
Richard Henderson
0875baa09e flow.c (struct propagate_block_info): Add mem_set_list_len.
* flow.c (struct propagate_block_info): Add mem_set_list_len.
        (MAX_MEM_SET_LIST_LEN): New.
        (propagate_one_insn): Update mem_set_list_len.
        (invalidate_mems_from_autoinc): Likewise.
        (invalidate_mems_from_set): Likewise.
        (mark_used_regs): Likewise.
        (init_propagate_block_info): Likewise.  Stop collecting memories
        when we reach MAX_MEM_SET_LIST_LEN.
        (mark_set_1): Likewise.

From-SVN: r39065
2001-01-16 05:57:17 -08:00
Bernd Schmidt
fb6754f096 Partially undo a previous patch
From-SVN: r38908
2001-01-11 17:02:44 +00:00
Michael Hayes
0ab409ed42 flow.c (flow_call_edges_add): New.
* flow.c (flow_call_edges_add): New.
	* basic_block.h (flow_call_edges_add): New.

From-SVN: r38899
2001-01-11 09:13:02 +00:00
Michael Hayes
eab02febcf flow.c (flow_loop_scan): Break out of ...
* flow.c (flow_loop_scan): Break out of ...
	(flow_loops_find) ... here.
	* basic-block.h (flow_loop_scan): New.
	(LOOP_ENTRY_EDGES, LOOP_EXIT_EDGES): Add.
	(LOOP_EDGES, LOOP_EXITS_DOMS, LOOP_ALL): Redefine.

From-SVN: r38822
2001-01-09 10:25:44 +00:00
Alexandre Oliva
f759eb8bf0 reload.c (subst_reloads): Take INSN argument.
* reload.c (subst_reloads): Take INSN argument.  When
replacing a LABEL_REF in a JUMP_INSN, add a REG_LABEL note.
* reload.h (subst_reloads): Adjust prototype.
* reload1.c (reload_as_needed): Pass INSN to subst_reloads.
* jump.c (mark_all_labels): Canonicalize any REG_LABEL notes
present in JUMP_INSNs and copy them to JUMP_LABEL.
* flow.c (find_label_refs, find_basic_blocks_1): Skip
JUMP_INSNs and insns with REG_LABELs that are followed by
JUMP_INSNs with the same REG_LABEL.
* sched-rgn.c (is_cfg_nonregular): Likewise.
* rtlanal.c (computed_jump_p): Make it false if a REG_LABEL
note is available.
* unroll.c (unroll_loop): Look for REG_LABEL notes in
JUMP_INSNs too.
* rtl.texi (REG_LABEL): Document usage in JUMP_INSNs.

From-SVN: r38755
2001-01-07 02:26:51 +00:00
Andreas Jaeger
21c7361e40 c-decl.c (c_decode_option): Remove support of -Wmissing-noreturn.
* c-decl.c (c_decode_option): Remove support of
	-Wmissing-noreturn.

	* toplev.c (documented_lang_options): Remove -Wmissing-noreturn.
	(W_options): Add -Wmissing-noreturn here.

	* flow.c: Define lang_missing_noreturn_ok_p.
	(check_function_return_warnings): Use it.

	* c-common.h: Declare lang_missing_noreturn_ok_p.

	* c-lang.c (c_missing_noreturn_ok_p): New function.
	(lang_init): Set lang_missing_noreturn_ok_p.

	* invoke.texi (Warning Options): Document this.

From-SVN: r38612
2001-01-02 08:00:49 +01:00
Bernd Schmidt
6152c64aab Compute REG_N_SETS for ORIGINAL_REGNOs.
From-SVN: r38547
2000-12-29 17:48:08 +00:00
Richard Henderson
4b01bd1658 rtl.h (REG_NON_LOCAL_GOTO): New.
* rtl.h (REG_NON_LOCAL_GOTO): New.
        * rtl.c (reg_note_name): Update.
        * stmt.c (expand_goto): Emit a REG_NON_LOCAL_GOTO note.
        * builtins.c (expand_builtin_longjmp): Likewise.
        * flow.c (make_edges): Check for REG_NON_LOCAL_GOTO and do
        not emit an edge.

From-SVN: r38408
2000-12-20 17:11:31 -08:00
Bernd Schmidt
fd7bcd6f05 Fix ARM bootstrap problems introduced by last change
From-SVN: r38399
2000-12-20 15:48:26 +00:00
Bernd Schmidt
288c2c9e63 Flow fixes for cond_exec on ia64
From-SVN: r38380
2000-12-19 16:52:23 +00:00
Jan Hubicka
0bf7d71a78 * flow.c (notice_stack_pointer_modification_1): Cleanup.
From-SVN: r38282
2000-12-15 13:14:37 +00:00
Jan Hubicka
a4377974da flow.c (notice_stack_pointer_modification_1): Notice midifications using PRE_MODIFY and POST_MODIFY.
* flow.c (notice_stack_pointer_modification_1): Notice midifications
	using PRE_MODIFY and POST_MODIFY.

From-SVN: r38226
2000-12-13 18:52:49 +00:00
Richard Henderson
f846e0de9b flow.c (calculate_global_regs_live): Force the stack pointer live after reload as well.
* flow.c (calculate_global_regs_live): Force the stack pointer live
        after reload as well.

From-SVN: r38114
2000-12-07 11:29:24 -08:00
Richard Henderson
39c39be99b flow.c (calculate_global_regs_live): Only force stack pointer live before reload.
* flow.c (calculate_global_regs_live): Only force stack pointer
        live before reload.  Force pic register live before reload.
        (insn_dead_p): Don't protect pic references from deletion.

From-SVN: r38027
2000-12-04 23:58:18 -08:00
Michael Matz
25e4379fe5 flow.c (make_edge): Early out, if no flags to set.
* flow.c (make_edge): Early out, if no flags to set.
        (calculate_global_regs_live): Clear out garbage only when necessary.

        * simplify-rtx.c (varray_type used_regs): New.
        (clear_table): Use it to only clear necessary items.
        (cselib_lookup, cselib_record_set): Remember newly set items.
        (cselib_update_varray_sizes, cselib_init): Initialize and grow
        used_regs.

        * local-alloc.c (update_equiv_regs): New local `cleared_regs'.
        Move clearing of dead regs out of insn-loop.

From-SVN: r37899
2000-11-30 13:40:33 -08:00
John David Anglin
3502dc9cd3 function.h (emit_status): Delete member regno_pointer_flag and rename regno_pointer_flag_length to...
* function.h (emit_status): Delete member regno_pointer_flag and
	rename regno_pointer_flag_length to regno_pointer_align_length.
	Delete define for REGNO_POINTER_FLAG.
	* integrate.h (inline_remap): Delete member regno_pointer_flag.
	Add member x_regno_reg_rtx.
	* rtl.h (rtx_def): Use frame_related bit to indicate register is
	a pointer in REG expressions.  Define REG_POINTER macro.
	* alias.c (find_base_value, find_base_term): Use REG_POINTER
	instead of REGNO_POINTER_FLAG.
	* combine.c (nonzero_bits, num_sign_bit_copies): Likewise.
	* emit-rtl.c (gen_reg_rtx): Use regno_pointer_align_length instead
	of regno_pointer_flag_length.  Remove code which refers to
	regno_pointer_flag.
	(mark_reg_pointer): Use REG_POINTER.
	(free_emit_status): Remove code which refers to regno_pointer_flag.
	(init_emit, mark_emit_status): Likewise.
	* flow.c (dump_flow_info): Likewise.
	* function.c (preserve_temp_slots): Likewise.
	* integrate.c (expand_inline_function, copy_rtx_and_substitute):
	Use x_regno_reg_rtx instead of regno_pointer_flag for function
	pointer determination in map.
	* loop.c (strength_reduce, maybe_eliminate_biv_1): Use REG_POINTER.
	* predict.c (estimate_probability): Likewise.
	* regclass.c (record_address_regs, reg_scan_mark_refs): Likewise.
	* unroll.c (unroll_loop): Use x_regno_reg_rtx instead of
	regno_pointer_flag for function pointer determination in map.
	* convex.h (RTX_COSTS): Don't test regno_pointer_flag and use
	REG_POINTER.
	* pa.c (hppa_legitimize_address, emit_move_sequence, basereg_operand):
	Use REG_POINTER.
	(restore_unscaled_index_insn_codes): Revise comment.

From-SVN: r37863
2000-11-29 23:31:19 -07:00
Bernd Schmidt
7dfc0fbe59 While building global lifetime information, keep track of which registers are only conditionally set.
While building global lifetime information, keep track of which registers are
only conditionally set.  Use this to force rescans in more cases where they
are needed.

From-SVN: r37801
2000-11-27 17:50:11 +00:00
Arno J. Klaassen
c3ff75c421 * flow.c (print_rtl_and_abort): Remove ANSIism.
From-SVN: r37722
2000-11-24 15:45:08 -08:00
Bernd Schmidt
f9b697bfa1 Try to dump some information before aborting.
From-SVN: r37699
2000-11-23 18:19:18 +00:00