aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop.c
AgeCommit message (Collapse)AuthorFilesLines
2000-02-28Fix for SH gcc.c-torture/compile/991229-3.c failure:J"orn Rennecke1-2/+6
* loop.c (reg_in_basic_block_p): Don't abort when falling through to the end of the function. From-SVN: r32229
2000-02-26Fix copyrights.Jeff Law1-1/+2
From-SVN: r32178
2000-02-18loop.c (canonicalize_condition): New function, broken out of get_condition.John Wehle1-31/+62
* loop.c (canonicalize_condition): New function, broken out of get_condition. (get_condition): Use it. * expr.h (canonicalize_condition): Prototype it. * tree.h (tree_int_cst_msb): Declare. * tree.c (tree_int_cst_msb): New function. From-SVN: r32045
2000-01-27Reflect renaming of invariant_p to loop_invariant_p in comment.Joern Rennecke1-2/+3
From-SVN: r31644
2000-01-25loop.c (current_loop_info): Delete.Michael Hayes1-207/+222
2000-01-26 Michael Hayes <m.hayes@elec.canterbury.ac.nz> * loop.c (current_loop_info): Delete. (consec_sets_invariant_p): Add loop argument, update callers. (get_condition_for_loop): Likewise. (count_nonfixed_reads, update_giv_derive): Likewise. (simplify_giv_expr, general_induction_var): Likewise. (consec_sets_giv, recombine_givs): Likewise. (move_movables): Delete loop_start and loop_end arguments, add loop argument, and update callers. (find_mem_givs, check_final_value): Likewise. (record_giv, maybe_eliminate_biv, maybe_eliminate_biv_1): Likewise. (loop_invariant_p): Rename from invariant_p, add loop argument, and update callers. (basic_induction_var): Add loop argument, delete loop_level argument, and update callers. * unroll.c (iteration_info): Delete loop_start and loop_end arguments, add loop argument, and update callers. (find_splittable_regs, find_splittable_givs): Likewise. (reg_dead_after_loop, loop_find_equiv_value): Likewise. (final_biv_value, final_giv_value, back_branch_in_range_p): Likewise. (biv_total_increment): Delete loop_start and loop_end arguments; update callers. (precondition_loop_p): Delete loop_start and loop_info arguments; update callers. * loop.h (get_condition_for_loop): Add loop argument. (biv_total_increment): Delete loop_start and loop_end arguments. (precondition_loop_p): Delete loop_start and loop_info arguments; add loop argument. (final_biv_value): Delete loop_start and loop_end arguments; add loop argument. (final_giv_value, back_branch_in_range_p): Likewise. From-SVN: r31618
2000-01-25loop.h (LOOP_INFO): New accessor macro.Michael Hayes1-8/+8
2000-01-25 Michael Hayes <m.hayes@elec.canterbury.ac.nz> * loop.h (LOOP_INFO): New accessor macro. * basic-block.h (struct loop): Rename field `info' to `aux'. * loop.c (scan_loop): Replace loop->info with LOOP_INFO (loop). (prescan_loop, strength_reduce, check_dbra_loop, insert_bct): Likewise. * unroll.c (loop_iterations, unroll_loop): Likewise. From-SVN: r31596
2000-01-24rtl.def: Add unordered fp comparisions.Richard Henderson1-2/+5
* rtl.def: Add unordered fp comparisions. * tree.def: Likewise. * tree.h: Add ISO C 9x unordered fp comparision builtins. * builtins.c (expand_tree_builtin): New function. * c-typeck.c (build_function_call): Use it. (build_binary_op): Support unordered compares. * c-common.c (c_common_nodes_and_builtins): Add unordered compares. * combine.c (known_cond): Handle reverse_condition returning UNKNOWN. (reversible_comparison_p): Allow UNORDERED/ORDERED to be reversed. * cse.c (fold_rtx): Check FLOAT_MODE_P before reversing. (record_jump_equiv): Handle reverse_condition returning UNKNOWN. * jump.c (reverse_condition): Don't abort for UNLE etc, but return UNKNOWN. (swap_condition): Handle unordered compares. (thread_jumps): Check can_reverse before reversing. * loop.c (get_condition): Likewise. Allow UNORERED/ORDERED to be reversed for FP. * optabs.c (can_compare_p): New argument CODE. Verify branch or setcc is present before acking for cmp_optab. Update all callers. (prepare_float_lib_cmp, init_optabs): Handle UNORDERED. * expmed.c (do_cmp_and_jump): Update for can_compare_p. * expr.c (expand_expr): Likewise. Support unordered compares. (do_jump, do_store_flag): Likewise. * expr.h (enum libfunc_index): Add unordered compares. * Makefile.in (FPBIT_FUNCS): Add _unord_sf. (DPBIT_FUNCS): Add _unord_df. * config/fp-bit.c (_unord_f2): New. * fp-test.c (main): Try unordered compare builtins. * alpha-protos.h (alpha_fp_comparison_operator): Declare. * alpha.c (alpha_comparison_operator): Check mode properly. (alpha_swapped_comparison_operator): Likewise. (signed_comparison_operator): Likewise. (alpha_fp_comparison_operator): New. (alpha_emit_conditional_branch): Handle unordered compares. * alpha.h (PREDICATE_CODES): Update. * alpha.md (fp compares): Use alpha_fp_comparison_operator. (bunordered, bordered): New. * cp/call.c (build_over_call): Use expand_tree_builtin. * cp/typeck.c (build_function_call_real): Likewise. (build_binary_op_nodefault): Handle unordered compares. * gcc.c-torture/execute/ieee/fp-cmp-4.c: New. From-SVN: r31591
2000-01-23loop.c (check_dbra_loop): When checking a loop for reversability...Clinton Popetz1-1/+1
* loop.c (check_dbra_loop): When checking a loop for reversability, check the source of any stores to ensure they don't depend on an initial value. From-SVN: r31569
2000-01-22loop.c (loops_info): New variable.Michael Hayes1-13/+12
* loop.c (loops_info): New variable. (loop_optimize): Allocate loops->array and free it on exit. Allocate memory for loops_info and assign to each loop, replacing alloca. (find_and_verify_loops): Do not allocate loops->array. From-SVN: r31556
2000-01-19loop.c (loop_optimize): Allocate loop_info structure for each loop prior to ↵Michael Hayes1-3/+9
calling scan_loop. * loop.c (loop_optimize): Allocate loop_info structure for each loop prior to calling scan_loop. From-SVN: r31508
2000-01-19loop.c (current_loop_info): Renamed from loop_info_data and changed to a ↵Michael Hayes1-5/+8
pointer. * loop.c (current_loop_info): Renamed from loop_info_data and changed to a pointer. (loop_optimize): Allocate loop_info structure for each loop and initialise to zero. (scan_loop): Set current_loop_info. * unroll.c (loop_iterations): Don't abort if REG_USERVAR_P set on iteration_var. From-SVN: r31501
2000-01-17combine.c (combine_simplify_rtx): Give FLOAT_STORE_FLAG_VALUE a mode.Richard Henderson1-2/+4
* combine.c (combine_simplify_rtx): Give FLOAT_STORE_FLAG_VALUE a mode. * cse.c (find_comparison_args, fold_rtx): Likewise. * integrate.c (subst_constants): Likewise. * loop.c (get_condition): Likewise. * tm.texi (FLOAT_STORE_FLAG_VALUE): Update docs. * alpha.h (FLOAT_STORE_FLAG_VALUE): Use REAL_VALUE_ATOF. From-SVN: r31479
2000-01-17ggc-common.c: PROTO -> PARAMS.Kaveh R. Ghazi1-63/+63
* ggc-common.c: PROTO -> PARAMS. * ggc-page.c: Likewise. * ggc-simple.c: Likewise. * ggc.h: Likewise. * global.c: Likewise. * graph.c: Likewise. * gthr-win32.h: Likewise. * haifa-sched.c: Likewise. * halfpic.h: Likewise. * integrate.c: Likewise. * integrate.h: Likewise. * jump.c: Likewise. * lcm.c: Likewise. * local-alloc.c: Likewise. * loop.c: Likewise. * loop.h: Likewise. From-SVN: r31458
2000-01-15loop.c (this_loop_info): Delete.Michael Hayes1-440/+357
* loop.c (this_loop_info): Delete. (uid_loop): Add in place of uid_loop_num. All uses updated. (loop_number_exit_count): Delete and replace with entry in loop structure. All uses updated. (loop_number_loop_starts, loop_number_loop_ends): Likewise. (loop_number_loop_cont, loop_number_cont_dominator): Likewise. (loop_outer_loop): Likewise. (loop_invalid, loop_number_exit_labels): Likewise. (loop_used_count_register): Delete and replace with entry in loop_info structure. (find_and_verify_loops): Add loops argument. (verify_dominator, mark_loop_jump, prescan_loop): Replace loop_start, loop_end, etc. arguments with loop structure pointer. All callers changed. (loop_reg_used_before_p, scan_loop, strength_reduce): Likewise. (check_dbra_loop, next_insn_in_loop, try_copy_prop): Likewise. (load_mems_and_recount_loop_regs_set, load_mems): Likewise. (insert_bct): Likewise. (basic_induction_var): New argument level. * loop.h (struct loop_info): Delete fields num, loops_enclosed, vtop, and cont. Add used_count_register. (uid_loop): Delete declaration. (loop_number_exit_count): Likewise. (loop_number_loop_starts, loop_number_loop_ends): Likewise. (loop_number_loop_cont, loop_number_cont_dominator): Likewise. (loop_outer_loop, loop_used_count_register): Likewise. (loop_invalid, loop_number_exit_labels): Likewise. (unroll_loop): Replace loop_start and loop_end arguments with loop structure pointer. (loop_precondition_p, loop_iterations): Likewise. Include basic-block.h. * unroll.c: (unroll_loop): Replace loop_start and loop_end arguments with loop structure pointer. (loop_precondition_p, loop_iterations): Likewise. * basic-block.h (struct loop): New entries vtop, cont, cont_dominator, start, end, top, scan_start, exit_labels, exit_count. * Makefile.in (LOOP_H): Add basic-block.h to dependencies. From-SVN: r31434
2000-01-04cse.c (cse_insn): Missing cast added.Jeff Law1-1/+1
* cse.c (cse_insn): Missing cast added. * loop.c (loop_reg_used_before_p): Ditto. * gcse.c (Pre_gcse, hoist_code): Ditto. * varasm.c (decode_rtx_const): Ditto. * except.c (push_ehqueue): Ditto. * cccp.c (index0): Ditto. * toplev.c (main): Useless `&' removed before function name. From-SVN: r31229
2000-01-04builtins.c (expand_builtin_strlen): Initialize variable `icode'.Kaveh R. Ghazi1-2/+2
* builtins.c (expand_builtin_strlen): Initialize variable `icode'. * calls.c (expand_call): Likewise for `old_stack_arg_under_construction'. * cpphash.c (macroexpand): Likewise for `args' and `rest_zero'. * function.c (pad_to_arg_alignment): Likewise for `save_var' and `save_constant'. * gcc.c (execute): Likewise for `ut' and `st'. * genattrtab.c (attr_rtx): Likewise for `rt_val'. * genopinit.c (gen_insn): Likewise for `m1', `m2' and `op'. * jump.c (jump_optimize_1): Likewise for `temp2'. * local-alloc.c (block_alloc): Likewise for `r1'. * loop.c (recombine_givs): Likewise for `life_start' and `life_end'. * reg-stack.c (check_asm_stack_operands): Likewise for `clobber_reg'. (subst_asm_stack_regs): Likewise for `clobber_reg' and `clobber_loc'. * regmove.c (fixup_match_1): Likewise for `insn_const', `dst_node' and `set2'. * reload.c (find_reloads): Likewise for `goal_alternative_number' and `goal_earlyclobber'. * scan-decls.c (scan_decls): Likewise for `prev_id_end'. * sdbout.c (sdbout_one_type): Likewise for `member_scl'. * stupid.c (stupid_life_analysis): Likewise for `chain'. * unroll.c (copy_loop_body): Likewise for `copy'. * varasm.c (output_constructor): Likewise for `byte'. ch: * actions.c (update_else_range_for_int_const): Initialize variables `lowval' and `highval'. (update_else_range_for_range): Likewise for `low_range_val' and `high_range_val'. cp: * class.c (warn_hidden): Initialize variable `fndecl'. From-SVN: r31207
1999-12-27alias.c (nonlocal_reference_p): Add else for disjoint ifs.Christophe Jaillet1-2/+2
* alias.c (nonlocal_reference_p): Add else for disjoint ifs. * flow.c (find_use_as_address): Likewise. * function.c (fixup_var_refs_1): Likewise. (walk_fixup_memory_subreg, fixup_stack_1): Likewise. * jump.c (invert_exp, redirect_exp): Likewise. * loop.c (replace_call_address): Likewise. (count_nonfixed_reads): Likewise. * rtlanal.c (modified_between_p): Likewise. (modified_in_p, volatile_insn_p, volatile_refs_p): Likewise. (side_effects_p, replace_regs, jmp_uses_reg_or_mem): Likewise. * unroll.c (remap_split_bivs): Likewise. From-SVN: r31103
1999-12-24Makefile.in (toplev.o): Depend on loop.h.Kaveh R. Ghazi1-1/+3
* Makefile.in (toplev.o): Depend on loop.h. * dwarfout.c: Include tm_p.h. * emit-rtl.c (restore_emit_status): Mark parameter with ATTRIBUTE_UNUSED. * final.c (final_scan_insn): Likewise. * flow.c (flow_nodes_print, flow_exits_print, flow_loops_cfg_dump, flow_loop_nested_p, flow_loop_exits_find, flow_loop_nodes_find, flow_depth_first_order_compute, flow_loop_pre_header_find, flow_loop_tree_node_add, flow_loops_tree_build, flow_loop_level_compute, flow_loops_level_compute, flow_loop_outside_edge_p): Add prototypes. (recompute_reg_usage): Mark parameters with ATTRIBUTE_UNUSED. * ggc-callbacks.c (lang_mark_tree, lang_mark_false_label_stack): Mark with ATTRIBUTE_NORETURN. * hash.c (hash_newfunc): Mark parameter with ATTRIBUTE_UNUSED. * local-alloc.c (no_conflict_p): Likewise. * loop.c (insert_bct): Hide definitions of variables with hidden usage. (note_reg_stored): Mark parameter with ATTRIBUTE_UNUSED. * regclass.c (memory_move_secondary_cost): Mark variable `mem' with ATTRIBUTE_UNUSED. (record_reg_classes): Mark parameter with ATTRIBUTE_UNUSED. (reg_scan): Likewise. * reload.c (find_reloads): Remove unused variables `changed'. * reload1.c (reload_reg_class_lower): Don't unnecessarily cast away const-ness. (allocate_reload_reg): Mark parameter with ATTRIBUTE_UNUSED. Remove unused variable `insn'. * toplev.c: Include loop.h. (report_file_and_line): Remove unnecessary prototype. * tree.c (build_block): Mark parameter with ATTRIBUTE_UNUSED. * unroll.c (biv_total_increment): Likewise. From-SVN: r31085
1999-12-17loop.c (insert_loop_mem): Don't record MEMs from inside EXPR_LISTs.Richard Earnshaw1-0/+4
* loop.c (insert_loop_mem): Don't record MEMs from inside EXPR_LISTs. From-SVN: r30994
1999-12-16* loop.c (insert_loop_mem): Ignore memory clobbers.Richard Henderson1-0/+4
From-SVN: r30973
1999-12-14Avoid reversing bivs with maybe_multiple set.Bernd Schmidt1-0/+1
From-SVN: r30929
1999-12-14loop.c (strength_reduce): Fix sign of giv lifetime calculation for givs made ↵J"orn Rennecke1-1/+1
from biv increments. * loop.c (strength_reduce): Fix sign of giv lifetime calculation for givs made from biv increments. From-SVN: r30927
1999-12-14Run reg_scan_update to get information about regs created by loop.Bernd Schmidt1-2/+18
From-SVN: r30914
1999-12-12loop.c (load_mems): Don't hoist written floating point mem if -ffloat-store.Stephen L Moshier1-1/+5
* loop.c (load_mems): Don't hoist written floating point mem if -ffloat-store. From-SVN: r30875
1999-12-10Undo previous changeBernd Schmidt1-2/+1
From-SVN: r30858
1999-12-09loop.c (record_biv): Declare parameter as int.Andreas Jaeger1-0/+1
* loop.c (record_biv): Declare parameter as int. * config/i386/i386-protos.h: Declare long_memory_operand. From-SVN: r30851
1999-12-08Don't hoist volatile mems out of loops.Bernd Schmidt1-1/+2
From-SVN: r30834
1999-12-07loop.h (struct induction): Add multi_insn_incr.Richard Henderson1-16/+50
* loop.h (struct induction): Add multi_insn_incr. * loop.c (basic_induction_var): New multi_insn_incr argument. Set it if we search back through previous insns for the biv. (record_biv): New multi_insn_incr argument; fill in struct induction. (strength_reduce): Discard an iv with multiple bivs, any of which require multiple insns to increment. From-SVN: r30820
1999-12-02Prevent invalid transformationsBernd Schmidt1-7/+63
From-SVN: r30758
1999-11-26Avoid GNU C extensionBernd Schmidt1-1/+6
From-SVN: r30671
1999-11-24loop.c (loop_optimize): Always find_loop_tree_blocks and unroll_block_trees ↵Mark Mitchell1-6/+8
when generating debuggable code. * loop.c (loop_optimize): Always find_loop_tree_blocks and unroll_block_trees when generating debuggable code. From-SVN: r30647
1999-11-23Copy propagation for hoisted mems in loop.c.Bernd Schmidt1-3/+111
From-SVN: r30638
1999-11-22Reformat load_mems slightly.Bernd Schmidt1-137/+136
From-SVN: r30618
1999-11-11Fix yet another gcc2 merge problem, this one broke linux kernel compilesJim Wilson1-0/+6
Fix yet another gcc2 merge problem, this one broke linux kernel compiles * loop.c (invariant_p, case MEM): Put MEM_VOLATILE_P check back. From-SVN: r30496
1999-11-08cse.c (delete_trivially_dead_insns): Replace alloca with xmalloc/xcalloc.Mark Mitchell1-14/+20
* cse.c (delete_trivially_dead_insns): Replace alloca with xmalloc/xcalloc. * except.c (update_rethrow_references): Likewise. (init_eh_nesting_info): Likewise. * function.c (identify_blocks): Likewise. * gcse.c (dump_hash_table): Likewise. * graph.c (print_rtl_graph_with_bb): Likewise. * loop.c (combine_movables): Likewise. (move_movables): Likewise. (count_loop_regs_set): Likewise. (strength_reduce): Likewise. * profile.c (compute_branch_probabilities): New function, split out from ... (branch_prob): Here. Replace alloca with xmalloc/xcalloc. * regclass.c (regclass): Likewise. * regmove.c (regmove_optimize): Likewise. * toplev.c (compile_file): Likewise. (main): Don't mess with the stack rlimit. From-SVN: r30445
1999-11-01bitmap.h (BITMAP_XMALLOC): New macro.Mark Mitchell1-25/+42
* bitmap.h (BITMAP_XMALLOC): New macro. * flow.c (CLEAN_ALLOCA): Remove. (delete_unreachable_blocks): Use xmalloc/xcalloc instead of alloca. (life_analysis): Likewise. (update_life_info): Don't use CLEAN_ALLOCA. (life_analysis_1): Use xmalloc/xcalloc instead of alloca. (calculate_global_regs_live): Likewise. (print_rtl_with_bb): Likewise. (verify_flow_info): Likewise. * global.c (global_alloc): Likewise. (global_conflicts): Likewise. * integrate.c (save_for_inline_nocopy): Likewise. (expand_inline_function): Likewise. * jump.c (jump_optimize_1): Likewise. (duplicate_loop_exit_test): Likewise. (thread_jumps): Likewise. * loop.c (loop_optimize): Likewise. (combine_givs): Likewise. (recombine_givs): Likewise. * reorg.c (dbr_schedule): Likewise. * unroll.c (unroll_loop): Likewise. From-SVN: r30333
1999-10-31[multiple changes]Richard Kenner1-21/+25
Fri Oct 29 15:25:07 1999 Arnaud Charlet <charlet@ACT-Europe.FR> * gcov.c (DIR_SEPARATOR): Provide default. (output_data): Add test for MS-DOS format absolute filename. (fancy_abort): Correct program name. (open_files): Open all files in binary mode. * libgcc2.c (__bb_exit_func): Likewise. * profile.c (init_branch_prob): Specify binary when opening files. * flags.h (flag_unwind_tables): New decl. * toplev.c (flag_unwind_table): New definition. (f_options): Add -funwind-tables. (decode_g_option): Clarify warning when unknown -g option is given. (rest_of_compilation): If inside an inlined external function, pretend we are just being declared. * dwarf2out.c (dwarf2out_do_frame): Check -funwind_tables. (dwarf2out_frame_finish): Likewise. Fri Oct 29 06:32:44 1999 Geoffrey Keating <geoffk@cygnus.com> * flow.c (propagate_block): When the last reference to a label before an ADDR_VEC is deleted because the reference is a dead store, delete the ADDR_VEC. Fri Oct 29 07:44:26 1999 Vasco Pedro <vp@di.fct.unl.pt> * fold-const.c (merge_ranges): In not in0, but in1, handle upper bounds equal like subset case. Thu Oct 28 19:22:24 1999 Douglas Rupp <rupp@gnat.com> * dbxout.c (dbxout_parms): Generate a second stabs line for parameters passed in a register but moved to the stack. Thu Oct 28 19:12:57 1999 Sam Tardieu <tardieu@act-europe.fr> * gcc.c (pass_exit_codes, greatest_status): New variables. (struct option_map): Add entry for "--pass-exit-codes". (execute): Update greatest_status if error. (display_help): Add documentation for -pass-exit-codes. (process_command): Handle -pass-exit-codes. (main): Look at pass_exit_codes and greatest_status on call to exit. Thu Oct 28 18:06:50 1999 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * reload.c (find_reloads): Refine test for no input reload case to not includes reloads emitted after insn. * function.c (find_temp_slots_from_address): Handle sum involving a register that points to a temp slot. (update_temp_slot_address): Make recursive call if both old and new are PLUS with a common operand. * calls.c (expand_call): Mark temp slot for result as having address taken. * rtlanal.c (reg_referenced_p, case IF_THEN_ELSE): New case. * gcc.c (process_command): Add standard_exec_prefix with "GCC" component as well as "BINUTILS". * integrate.h (copy_rtx_and_substitute): New arg, FOR_LHS. * integrate.c (copy_rtx_and_substitute): Likewise. (expand_inline_function, integrate_parm_decls, integrate_decl_tree): All callers changed. * unroll.c (inital_reg_note_copy, copy_loop_body): Likewise. * dbxout.c (dbxout_type, case INTEGER_TYPE_NODE): If can use gdb extensions, write size of type; also be more consistent in using references when this is a subtype. * pa.md (extv, extzv, insv): Use define_expand to reject constant that is out of range. * loop.c (unknown_constant_address_altered): New variable. (prescan_loop): Initialize it. (note_addr_stored): Set it for RTX_UNCHANGING_P MEM. (invariant_p, case MEM): Remove handling for volatile and readony; check new variable if readonly. (check_dbra_loop): Chdeck unknown_constant_address_altered. * cse.c (canon_hash, case MEM): Do not record if BLKmode. (addr_affects_sp_p): Removed from note_mem_written and only define #ifdef AUTO_INC_DEC. * alpha.c (input_operand, case ADDRESSOF): Treat as REG. * regclass.c (record_reg_classes): Properly handle register move directions. * varasm.c (initializer_constant_valid_p, case MINUS_EXPR): Don't think valid if both operands are invalid. (struct constant_descriptor): New field RTL. (mark_const_hash_entry): Mark it. (record_constant{,_rtx}): Initialize it. (output_constant_def): Allocate RTL in permanent obstack and save in table. ({record,compare}_constant_1): Modes must match for CONSTRUCTOR of ARRAY_TYPE. * c-common.h (initializer_constant_valid_p): Delete decl from here. * output.h (initializer_constant_valid_p): Move decl to here. * c-common.c (initializer_constant_valid_p): Delete function from here. * varasm.c (initializer_constant_valid_p): Move function to here. * tree.h (STRIP_SIGN_NOPS): New macro. * fold-const.c (optimize_minmax_comparison): New function. (invert_truthvalue, case WITH_RECORD_EXPR): New case. (fold): Use STRIP_SIGN_NOPS instead of STRIP_TYPE_NOPS. (fold, case EQ_EXPR): Call optimize_minmax_comparison and add cases with ABS_EXPR, NEGATE_EXPR, PLUS_EXPR, MINUS_EXPR, and widening conversions. (fold, case LE_EXPR): Rework changing unsigned to signed comparisons to look at size of mode, not precision of type; also add missing cases. (optimize_bit_field_compare, decode_field_reference): Don't try to optimize COMPONENT_REF of a PLACEHOLDER_EXPR. * dwarf2out.c (ctype.h): Include. (dwarf2out_set_demangle_name_func): New function. (size_of_line_info): Deleted. (output_line_info): Compute size of line info table from difference of labels. (base_type_die, add_name_attribute): Call demangle function, if any. (field_byte_offset): Use bits per word for variable length fields. (gen_array_type_die): Add array name. (gen_subprogram_die): Ignore DECL_INLINE if -fno-inline. (dwarf2out_add_library_unit_info): New function. * explow.c (set_stack_check_libfunc): New function. (stack_check_libfunc): New static variable. (probe_stack_range): Allow front-end to set up a libfunc to call. * combine.c (simplify_comparison): When making comparison in wider mode, check for having commuted an AND and a SUBREG. (contains_muldiv): New function. (try_combine): Call it when dividing a PARALLEL. (simplify_rtx, case TRUNCATE): Don't remove for umulsi3_highpart. (simplify_comparison, case ASHIFTRT): Recognize sign-extension of a PLUS. (record_value_for_reg): If TEM is a binary operation with two CLOBBERs, use one of the CLOBBERs instead. (if_then_else_cond): If comparing against zero, just return thing being compared. * optabs.c (expand_abs): If machine has MAX, ABS (x) is MAX (x, -x). Don't generate shifts and subtract if have conditional arithmetic. * rtl.h (delete_barrier): New declaration. * jump.c (jump_optimize): Set up to handle conditional call. In conditional arithmetic case, handle CALL_INSN followed by a BARRIER. (delete_barrier): New function. * rtl.c (read_rtx): Call fatal if bad RTL code; check for bad mode. * recog.c (nonmemory_operand): Accept ADDRESSOF. * tree.c (build_type_attribute_variant): Push to obstack of ttype around type_hash_canon call. * expr.c (placeholder_list): Move decl to file scope. (expand_expr): Don't force access to volatile just because its address is taken. If ignoring reference operations, just expand the operands. (expand_expr, case COMPONENT_REF): Propagate EXPAND_CONST_ADDRESS to recursive call when expanding inner. Refine test for using bitfield operations vs pointer punning. (expand_expr, case CONVERT_EXPR): If converting to BLKmode UNION_TYPE from BLKmode, just return inner object. Use proper mode in store_field call. Properly set sizes of object to store and total size in store_field call for convert to union. (expand_expr, case ARRAY_REF): If OP0 is in a register, put it in memory (like for ADDR_EXPR). Also, don't put constant in register if we'll want it in memory. (readonly_fields_p): New function. (expand_expr, case INDIRECT_REF): Call it if LHS. (expand_assignment): Handle a RESULT_DECL where DECL_RTL is a PARALLEL. (do_jump, case WITH_RECORD_EXPR): New case. (get_inner_reference): Always go inside a CONVERT_EXPR and NOP_EXPR if both modes are the same. (store_field): Use bitfield operations if size of bitsize is not same as size of RHS's type. Check for bitpos not a multiple of alignment in BLKmode case. Do block move in largest possible alignment. (store_constructor): Set BITSIZE to -1 for variable size and properly in case of array of BLKmode. (expand_expr_unaligned): New function. (do_compare_and_jump): Call it. * mips/iris5.h (SWITCHES_NEED_SPACES): New macro. * collect2.c (main): Only allow -ofoo if SWITCHES_NEED_SPACES does not include 'o'. * function.c (instantiate_virtual_regs_1, case SET): Handle case where both SET_DEST and SET_SRC reference a virtual register. (gen_mem_addressof): Copy RTX_UNCHANGING_P from new REG to old REG. * integrate.c (expand_inline_function): Handle case of setting virtual stack vars register (from built in setjmp); when parameter lives in memory, expand virtual_{stack_vars,incoming_args}_rtx early. (subst_constant): Add new parm, MEMONLY. (expand_inline_function, integrate_parm_decls): Pass new parm. (integrate_decl_tree): Likewise. (copy_rtx_and_substitute, case MEM): Do copy RTX_UNCHANGING_P. (try_constants): Call subst_constants twice, with MEMONLY 0 and 1. (copy_rtx_and_substitute, case SET): Add explicit calls to copy_rtx_and_substitute for both sides. * stmt.c (expand_asm_operands): Don't use TREE_STRING_LENGTH for constraints. (pushcase{,_range}): Convert to NOMINAL_TYPE after checking for within INDEX_TYPE, instead of before. (fixup_gotos): Use f->target_rtl, not the next insn, since latter may be from a later fixup. (expand_value_return): Correctly convert VAL when promoting function return; support RETURN_REG being a PARALLEL. (expand_return): When checking for result in regs and having cleanup, consider PARALLEL in DECL_RTL as being in regs. From-SVN: r30299
1999-10-27rtl.h (note_stores): Add additional paramter.Mark Mitchell1-15/+17
* rtl.h (note_stores): Add additional paramter. * rtlanal.c (reg_set_p_1): Take additional paramter. (reg_set_last_1): Likewise. (reg_set_p): Adjust call to note_stores. (reg_set_last): Likewise. (note_stores): Pass data parameter to worker function. * alias.c (record_set): Take additional parameter. (init_alias_analysis): Pass it. * caller-save.c (mark_set_regs): Take additional parameter. (save_call_clobbered_regs): Pass NULL to note_stores. * combine.c (set_nonzero_bits_and_sign_copies): Take additional parameter. (record_dead_and_set_regs_1): Likewise. (reg_dead_at_p_1): Likewise. (combine_instructions): Adjust calls to note_stores. (try_combine): Likewise. (record_dead_insn): Remove. (record_dead_and_set_regs): Adjust calls to note_stores. (reg_dead_at_p): Likewise. * cse.c (invalidate_skipped_set): Take additional parameter. (cse_check_loop_start): Likewise. (cse_check_loop_start_value): Remove. (cse_set_around_loop): Adjust calls to note_stores. * flow.c (notice_stack_pointer_modification): Take additional parameter. Remove duplicate declaration. (record_volatile_insns): Adjust calls to note_stores. * gcse.c (record_set_info): Take additional parameter. (record_last_set_info): Likewise. (invalidate_nonnull_info): Likewise. (record_set_insn): Remove. (compute_sets): Adjust calls to note_stores. (last_set_insn): Remove. (compute_hash_table): Adjust calls to note_stores. (insert_insn_end_bb): Likewise. (delete_null_pointer_checks): Likewise. * global.c (mark_reg_store): Take additional parameter. (mark_reg_clobber): Likewise. (reg_becomes_live): Likewise. (global_conflicts): Adjust calls to note_stores. (build_insn_chain): Likewise. * integrate.c (note_modified_parmregs): Take additional parameter. (mark_stores): Likewise. Make it static. (save_for_inline_nocopy): Adjust calls to note_stores. (try_constants): Likewise. * integrate.h (mark_stores): Remove declaration. * jump.c (mark_modified_reg): Take additional parameter. (thread_jumps): Adjust calls to note_stores. * local-alloc.c (validate_equiv_mem_from_store): Take additional parameter. (no_equiv): Likewise. (reg_is_set): Likewise. (validate_equiv_mem): Adjust calls to note_stores. (update_equiv_regs): Likewise. (block_alloc): Likewise. * loop.c (note_set_pseudo_multiple_uses_retval): Remove. (note_addr_stored): Take additional parameter. (note_set_pseudo_multiple_uses): Likewise. (record_initial): Likewise. (prescan_loop): Adjust calls to note_stores. (strength_reduce): Likewise. (check_dbra_loop): Likewise. * regmove.c (flags_set_1): Take additional paramter. (mark_flags_life_zones): Adjust calls to note_stores. * reload1.c (mark_not_eliminable): Take additional parameter. (forget_old_reloads_1): Likewise. (reload_cse_invalidate_rtx): Likewise. (reload_cse_check_clobber): Likewise. (reload_combine_note_store): Likewise. (move2add_note_store): Likewise. (reload): Adjust calls to note_stores. (reload_as_needed): Likewise. (emit_reload_insns): Likewise. (reload_cse_regs_1): Likewise. (reload_cse_record_set): Adjust calls to reload_cse_invalidate_rtx. (reload_combine): Adjust calls to note_stores. * resource.c (update_live_status): Take additional paramter. (mark_target_live_regs): Adjust calls to note_stores. * stupid.c (find_clobbered_regs): Take additional parameter. (stupid_life_analysis): Adjust calls to note_stores. From-SVN: r30221
1999-10-25loop.c (basic_induction_var): A non-integer variable which is being set by a ↵Geoff Keating1-0/+2
paradoxical subreg is probably... * loop.c (basic_induction_var): A non-integer variable which is being set by a paradoxical subreg is probably not a biv. From-SVN: r30181
1999-10-25loop.c (note_set_pseudo_multiple_uses_retval): New variable.Jeffrey A Law1-4/+50
* loop.c (note_set_pseudo_multiple_uses_retval): New variable. (note_set_pseudo_multiple_uses): New function. (check_dbra_loop): Use not_set_pseudo_multiple_uses to determine if a pseudo set in the loop exit is used elsewhere. From-SVN: r30155
1999-10-10Don't put things between tablejumps and jump tables in loop.cBernd Schmidt1-1/+15
From-SVN: r29887
1999-10-06collect2.c (scan_prog_file, [...]): Prototype function pointers and casts ↵Kaveh R. Ghazi1-8/+20
for `int_handler' and `quit_handler'. * collect2.c (scan_prog_file, scan_libraries): Prototype function pointers and casts for `int_handler' and `quit_handler'. * flow.c (verify_flow_info, split_hard_reg_notes, find_insn_with_note, sets_reg_or_subreg_1, prepend_reg_notes, remove_edge, remove_fake_successors): Add static prototypes. (verify_flow_info): Wrap with macro ENABLE_CHECKING. (mark_set_1): Initialize variable `regno'. (unlink_insn_chain): Likewise for variable `curr'. (remove_fake_edges): Remove unused variables `e', `tmp' and `last'. * loop.c (strength_reduce): Initialize variable `unrolled_insn_copies'. (cmp_combine_givs_stats, cmp_recombine_givs_stats): Add static prototypes. Change these functions to take const PTR parameters to avoid prototype conflict when used as the comparson argument for qsort. (check_dbra_loop): Initialize variable `comparison_val'. * reload.c (debug_reload_to_stream, debug_reload): Add prototypes. (get_secondary_mem): Mark parameter `x' with ATTRIBUTE_UNUSED. (find_valid_class): Initialize variable `best_class'. (find_reloads): Call memcpy, not bcopy. * reload1.c (gen_mode_int, dump_needs): Add prototypes. (hard_reg_use_compare): Don't needlessly cast away const. (reload_reg_class_lower): Likewise. (choose_reload_regs): Initialize variable `regno'. From-SVN: r29840
1999-09-20Make it possible to prototype port-specific functions (and convert i386 to ↵Bernd Schmidt1-0/+1
use this) From-SVN: r29514
1999-09-19rtl.h (insns_safe_to_move_p): New function.Mark Mitchell1-4/+11
* rtl.h (insns_safe_to_move_p): New function. * loop.c (find_and_verify_loops): Use it. * rtlanal.c (insns_safe_to_move_p): Define it. From-SVN: r29509
1999-09-14loop.c (strength_reduce): Don't call reg_used_between_p if the insn from BL2 ↵Andreas Schwab1-5/+5
is after the insn from BL. * loop.c (strength_reduce): Don't call reg_used_between_p if the insn from BL2 is after the insn from BL. From-SVN: r29393
1999-09-14Fix typo in comment.Jeff Law1-1/+1
From-SVN: r29392
1999-09-12Replace insn_foo with insn_data.foo.Richard Henderson1-6/+8
From-SVN: r29358
1999-09-10loop.c (basic_induction_var): Typo NULL_RTX -> NULL.Richard Henderson1-2/+4
* loop.c (basic_induction_var): Typo NULL_RTX -> NULL. (strength_reduce): Release the varrays from the no-bivs early exit. * reload1.c (order_regs_for_reload): Init hard_reg_n_uses before the loop over the registers. * tree.c (save_tree_status): Set maybepermanent_firstobj NULL for a new obstack. (restore_tree_status): Check that instead when freeing the obstack. From-SVN: r29270
1999-09-09combine.c (SUBST): Break out to a real function do_SUBST.Richard Henderson1-0/+1
* combine.c (SUBST): Break out to a real function do_SUBST. (SUBST_INT): Likewise. * gcse.c (free_pre_mem): Free `temp_bitmap'. (pre_insert): Free `inserted'. * loop.c (basic_induction_var): Always set `location'. * function.c (expand_function_end): Add initial_trampoline as a root. * rtl.h (init_varasm_once): Declare. * toplev.c (compile_file): Call it. * ggc-simple.c (ggc_mark_string_ptr): New. (ggc_add_string_root): New. (ggc_collect): Disable collection avoidance temporarily. * ggc.h (ggc_add_string_root): Declare. * except.c (create_rethrow_ref): Use ggc_alloc_string. * optabs.c (init_libfuncs): Likewise. * varasm.c (named_section): Use ggc_alloc_string. (make_function_rtl): Likewise. (make_decl_rtl): Likewise. (assemble_static_space): Likewise. (assemble_trampoline_template): Likewise. (output_constant_def): Likewise. (force_const_mem): Likewise. (mark_const_hash_entry): New. (mark_pool_sym_hash_table): New. (mark_varasm_state): Use it. (init_varasm_once): New. * expr.h (init_one_libfunc): Declare. * optabs.c (init_one_libfunc): New. (init_optabs): Use it. * config/gofast.h: Likewise. * config/sparc/sol2.h (INIT_SUBTARGET_OPTABS): Likewise. * config/sparc/sparc.h (INIT_TARGET_OPTABS): Likewise. From-SVN: r29226
1999-09-06Merge in gcc2-ss-010999Jeff Law1-46/+105
From-SVN: r29150