aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
AgeCommit message (Collapse)AuthorFilesLines
2000-02-06flow.c (flow_delete_insn, [...]): Export.Richard Henderson1-0/+109
* flow.c (flow_delete_insn, make_edge, remove_edge): Export. * basic-block.h: Declare them. * emit-rtl.h (active_insn_p): New. (next_active_insn, prev_active_insn): Use it. * rtl.h: Declare it. * function.c (emit_return_into_block): New. (thread_prologue_and_epilogue_insns): Insert return insns instead of epilogues when possible. * jump.c (jump_optimize_1): Remove code to insert a return insn on the fallthru to the exit block. From-SVN: r31826
2000-02-04function.c (diddle_return_value): Rework to use a callback function.Richard Henderson1-29/+71
* function.c (diddle_return_value): Rework to use a callback function. Use current_function_return_rtx if it's been set up. (do_clobber_return_reg, clobber_return_register): New. (do_use_return_reg, use_return_register): New. (expand_function_end): Use them. * stmt.c (expand_null_return): Likewise. * function.h: Declare them. * flow.c (mark_regs_live_at_end): Use diddle_return_value. (mark_reg): Change arguments as appropriate for callback. * integrate.c (expand_inline_function): Revert 19 Jan change. From-SVN: r31791
2000-01-28flow.c (find_basic_blocks): Remove do_cleanup argument.Richard Henderson1-116/+32
* flow.c (find_basic_blocks): Remove do_cleanup argument. Break out that code ... (cleanup_cfg): ... here. (commit_one_edge_insertion): Detect a return instruction being emitted to an edge. Emit a barrier following; clear fallthru. (commit_edge_insertions): Verify CFG consistency. * function.c (expand_function_start): Kill unused variable. (expand_function_end): Likewise. (thread_prologue_and_epilogue_insns): Use insert_insn_on_edge to insert the epilogue. * gcse.c (gcse_main): Adjust for find_basic_blocks change. (delete_null_pointer_checks): Likewise. * output.h: Likewise. * reg-stack.c (reg_to_stack): Likewise. * toplev.c (rest_of_compilation): Likewise. Run thread_prologue_and_epilogue_insns after rebuilding the CFG. From-SVN: r31676
2000-01-27emit-rtl.c (unshare_all_rtl): Unshare virtual parameters too.Geoff Keating1-7/+1
* emit-rtl.c (unshare_all_rtl): Unshare virtual parameters too. Use unshare_all_rtl_1. (unshare_all_rtl_again): New function. (unshare_all_rtl_1): New function split out of unshare_all_rtl. * function.c (purge_addressof_1): Use unshare_all_rtl_again rather than resetting the 'used' flags ourself. * toplev.c (rest_of_compilation): Add current_function_decl to the unshare_all_rtl call. * tree.h: Prototype unshare_all_rtl. * rtl.h: Prototype unshare_all_rtl_again here. From-SVN: r31651
2000-01-19stupid.c: Die die die.Richard Henderson1-81/+8
* stupid.c: Die die die. * Makefile.in (OBJS): Remove stupid.o. (stupid.o): Likewise. * except.c (emit_eh_context): Don't emit USEs for stupid. * explow.c (probe_stack_range): Likewise. * flags.h (obey_regdecls): Remove. * flow.c (find_basic_blocks): Don't run try_merge_blocks when not optimizing. (life_analysis): Limit data collection when not optimizing. (mark_regs_live_at_end): Always mark the return value registers. (mark_used_regs): Remove dummy RETURN case. (print_rtl_with_bb): Don't consult obey_regdecls. * function.c (use_variable, use_variable_after): Remove. (assign_parms): Consult optimize not obey_regdecls. (expand_function_start): Don't emit USEs for stupid. (expand_function_end): Likewise. * global.c (build_insn_chain): Export. * integrate.c (expand_inline_function): Kill return-value USE handling code. * jump.c (jump_optimize_1): Do simple jump optimizations and dead code elimination. (calculate_can_reach_end): Remove check_deleted argument. (delete_insn): Patch out insns even when not optimizing. * local-alloc.c (block_alloc): Don't do tying when not optimizing. * rtl.h (use_variable, use_variable_after): Remove declarations. (build_insn_chain): Declare. * stmt.c (expand_value_return): Don't emit USEs for stupid. (expand_end_bindings): Likewise. (expand_decl): Likewise. Consult optimize not obey_regdecls. * toplev.c (obey_regdecls): Remove. (rest_of_compilation): Don't set it. Kill stupid in favour of flow1, local-alloc, and reload. (main): Don't set obey_regdecls. * config/nextstep.c (handle_pragma): Likewise. * alpha/alpha.md (allocate_stack): Don't emit USEs for stupid. * arm/arm.h (CONDITIONAL_REGISTER_USAGE): Don't fix reg 0 for stupid. From-SVN: r31499
2000-01-14eh-common.h: PROTO -> PARAMS.Kaveh R. Ghazi1-59/+59
* eh-common.h: PROTO -> PARAMS. * emit-rtl.c: Likewise. * errors.c: Likewise. * errors.h: Likewise. * except.c: Likewise. * except.h: Likewise. * explow.c: Likewise. * expmed.c: Likewise. * expr.c: Likewise. * expr.h: Likewise. * final.c: Likewise. * fix-header.c: Likewise. * flow.c: Likewise. * fold-const.c: Likewise. * function.c: Likewise. * function.h: Likewise. * gcc.c: Likewise. * gcov-io.h: Likewise. * gcov.c: Likewise. * gcse.c: Likewise. From-SVN: r31419
2000-01-13calls.c (emit_call_1): Wrap varaible `struct_value_size_rtx' in macro ↵Kaveh R. Ghazi1-2/+2
conditionals guarding use. * calls.c (emit_call_1): Wrap varaible `struct_value_size_rtx' in macro conditionals guarding use. * dwarf2out.c: Include "tm_p.h". * function.c (locate_and_pad_parm): Mark parameter with ATTRIBUTE_UNUSED. (expand_function_end): Likewise for variable `context'. * reorg.c (make_return_insns): Wrap prototype in macro HAVE_return. cp: * call.c: If GATHER_STATISTICS, declare `n_build_method_call'. From-SVN: r31398
2000-01-09elfos.h (ASM_OUTPUT_LIMITED_STRING): Add parentheses around assignment used ↵Kaveh R. Ghazi1-1/+3
as truth value. * elfos.h (ASM_OUTPUT_LIMITED_STRING): Add parentheses around assignment used as truth value. * function.c (assign_temp): Mark parameter `dont_promote' with ATTRIBUTE_UNUSED. Wrap variable `unsignedp' with macro PROMOTE_FOR_CALL_ONLY. * genrecog.c (write_subroutine): Mark variable `operands' with ATTRIBUTE_UNUSED. * optabs.c (prepare_cmp_insn): Mark parameter `align' with ATTRIBUTE_UNUSED. * sdbout.c (sdbout_init): Likewise for parameter `asm_file'. (sdbout_begin_block, sdbout_end_block): Likewise for `file'. * toplev.c (note_deferral_of_defined_inline_function): Likewise for `decl'. From-SVN: r31293
2000-01-04builtins.c (expand_builtin_strlen): Initialize variable `icode'.Kaveh R. Ghazi1-3/+3
* 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-31function.c (update_temp_slot_address): Handle case where sum of temporary ↵Richard Kenner1-4/+15
address plus offset in register is a valid... * function.c (update_temp_slot_address): Handle case where sum of temporary address plus offset in register is a valid address. From-SVN: r31153
1999-12-27alias.c (nonlocal_reference_p): Add else for disjoint ifs.Christophe Jaillet1-3/+3
* 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-20current_function -> cfunBernd Schmidt1-29/+29
From-SVN: r31033
1999-12-16Makefile.in (INTREGRATE_H): Rename to INTEGRATE_H.Mark Mitchell1-64/+2
* Makefile.in (INTREGRATE_H): Rename to INTEGRATE_H. * function.c (insert_block_after_note): Remove. (retrofit_block): Likewise. (identify_blocks): Fix indentation. (reorder_blocks): Don't NULL out NOTE_SOURCE_FILE for a NOTE_INSN_BLOCK_BEG or NOTE_INSN_BLOCK_END. * function.h (insert_block_after_note): Remove prototype. (retrofit_block): Likewise. * integrate.c (expand_inline_function): Don't call find_loop_tree_blocks. Use expand_start_bindings_and_block, not just expand_start_bindings. Use the block_map to remap old NOTE_BLOCKs to new ones. (integrate_decl_tree): Keep track of remapped blocks. * integrate.h (struct inline_remap): Add block_map. * stmt.c (expand_fixup): Don't try to retrofit_blocks. Just set NOTE_BLOCK on the notes. (expand_start_bindings): Rename to ... (expand_start_bindings_and_block): Add parameter. Set NOTE_BLOCK. (expand_end_bindings): Set NOTE_BLOCK. * toplev.c (rest_of_compilation): In function-at-a-time-mode, reconstruct the BLOCK tree. * tree.h (expand_start_bindings): Macroize. Call ... (expand_start_bindings_and_block): New function. * optimize.c (struct inline_data): Remove scope_stmt. (remap_block): Don't use insert_block_after_note. Don't update scope_stmt. (expand_call_inline): Don't update scope_stmt. (optimize_function): Don't initialize scope_stmt. * semantics.c (expand_stmt): Set NOTE_BLOCK for newly emitted NOTE_INSN_BLOCK_BEG/NOTE_INSN_BLOCK_END notes. From-SVN: r30982
1999-12-15function.c (retrofit_block): Abort if we don't find a suitable insn.Jason Merrill1-12/+12
* function.c (retrofit_block): Abort if we don't find a suitable insn. (insert_block_after_note): Abort if we don't have a previous block. Remove FN parameter. * function.h: Adjust. * tree.c (walk_tree): Walk operand subtrees in forward order. * optimize.c (expand_call_inline): Likewise. (optimize_function): Initialize id->scope_stmt to something useful. (remap_block): Assume id->scope_stmt has a useful value. From-SVN: r30965
1999-12-15function.c (PREFERRED_STACK_BOUDNARY): Provide default value.Jan Hubicka1-0/+13
* function.c (PREFERRED_STACK_BOUDNARY): Provide default value. (assign_stack_local_1): Limit alignment to PREFERRED_STACK_BOUNDARY, update stack_alignment_needed. (prepare_function_start): Initialize stack_alignment_needed * function.h (struct function): Add field stack_alignment_needed. From-SVN: r30958
1999-12-05function.h (insert_block_after_note): Declare.Mark Mitchell1-20/+37
* function.h (insert_block_after_note): Declare. * function.c (insert_block_after_note): Split out from ... (retrofit_block): ... here. From-SVN: r30776
1999-12-04c-common.c (enum attrs): Add A_NO_LIMIT_STACK.Geoff Keating1-0/+3
* c-common.c (enum attrs): Add A_NO_LIMIT_STACK. (init_attributes): Add A_NO_LIMIT_STACK. (decl_attributes): Handle A_NO_LIMIT_STACK. * c-decl.c (duplicate_decls): Handle DECL_NO_LIMIT_STACK. * explow.c (allocate_dynamic_stack_space) [!HAVE_allocate_stack]: Handle stack bounds checking. * flags.h (flag_stack_check): Use the word 'probe' rather than 'check', because the flag doesn't actually cause any checking to be done. * function.c (expand_function_start): Set current_function_limit_stack. * function.h (struct function): Add limit_stack. (current_function_limit_stack): Define. * invoke.texi (Code Gen Options): Document new options. * rtl.h: Declare stack_limit_rtx. * toplev.c (stack_limit_rtx): New variable. (decode_f_option): Handle new options -fstack-limit-register=REG, -fstack-limit-symbol=IDENT, -fno-stack-limit. (main): Add stack_limit_rtx as GC root. * tree.h (DECL_NO_LIMIT_STACK): New macro. (struct tree_decl): New member no_limit_stack. * config/rs6000/rs6000.c (rs6000_allocate_stack_space): Handle stack_limit_rtx. * config/rs6000/rs6000.md (allocate_stack): Handle stack_limit_rtx. (conditional_trap+1): Get new mnemonic correct. (conditional_trap+2): New pattern for DImode traps. * config/m68k/m68k.c (output_function_prologue): Handle stack_limit_rtx. * config/m68k/m68k.md (trap): New insn. (conditional_trap): New insn. * md.texi (Standard Names): Document `trap' and `conditional_trap'. * optabs.c (gen_cond_trap): Use start_sequence()/end_sequence() so a cc0 setter doesn't get emitted at some random place in the function. * config/i960/i960.md (trap): New insn. (conditional_trap): New expander. (conditional_trap+1, conditional_trap+2): New insns for signed and unsigned cases. * config/i960/i960.c (i960_function_prologue): Use STARTING_FRAME_OFFSET. Handle stack_limit_rtx. Co-Authored-By: Greg McGary <gkm@gnu.org> From-SVN: r30771
1999-11-18except.h (struct eh_entry): Add goto_entry_p.Mark Mitchell1-0/+3
* except.h (struct eh_entry): Add goto_entry_p. (eh_region_from_symbol): Remove prototype. * except.c (find_func_region_from_symbol): New function. (emit_cleanup_handler): Likewise. (eh_region_from_symbol): Make it static. (add_new_handler): Verify the argument. (find_func_region): Update comment. (expand_eh_region_end): Expand handlers here, rater than waiting until expand_leftover_cleanups or start_all_catch. (expand_leftover_cleanups): Don't expand here. (expand_start_all_catch): Or here. (expand_rethrow): Check the return value from find_func_region. * function.c (expand_function_end): Emit the catch_clauses. From-SVN: r30576
1999-11-16explow.c (hard_function_value): Add outgoing argument.Jakub Jelinek1-2/+2
* explow.c (hard_function_value): Add outgoing argument. * expr.h (hard_function_value): Declare it. * calls.c (expand_call, emit_library_call_value): Update callers. * function.c (aggregate_value_p): Ditto. (diddle_return_value): Must look at the outgoing registers on archs with register windows. From-SVN: r30550
1999-11-12function.c (diddle_return_value): Set REG_FUNCTION_VALUE_P as needed.Jeffrey A Law1-0/+1
* function.c (diddle_return_value): Set REG_FUNCTION_VALUE_P as needed. From-SVN: r30519
1999-11-12function.c (diddle_return_value): Only clal hard_function_value when the ↵Jeffrey A Law1-8/+9
return value is supposed to be in a register. * function.c (diddle_return_value): Only clal hard_function_value when the return value is supposed to be in a register. From-SVN: r30497
1999-11-11function.c (diddle_return_value): Use hard_function_value to get an rtx ↵Jeffrey A Law1-2/+8
suitable for use in the USE/CLOBBER insn. * function.c (diddle_return_value): Use hard_function_value to get an rtx suitable for use in the USE/CLOBBER insn. From-SVN: r30494
1999-11-08cse.c (delete_trivially_dead_insns): Replace alloca with xmalloc/xcalloc.Mark Mitchell1-1/+2
* 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-05oops - add missing return valuesNick Clifton1-2/+2
From-SVN: r30416
1999-11-05If purge_addressof_1 fails to remove addressofs in notes, remove the notesNick Clifton1-23/+65
instead. From-SVN: r30414
1999-11-04function.c (pad_to_arg_alignment): Only update argument_pad if the ↵Jeffrey A Law1-3/+3
argument's alignment is greater than STACK_BOUNDARY. * function.c (pad_to_arg_alignment): Only update argument_pad if the argument's alignment is greater than STACK_BOUNDARY. From-SVN: r30405
1999-11-04function.c (diddle_return_value): New.Richard Henderson1-1/+40
* function.c (diddle_return_value): New. (expand_function_end): Use it. * stmt.c (expand_null_return): Likewise. (expand_value_return): Likewise. * reg-stack.c (subst_stack_regs_pat): Handle clobbers at top-level. * reload1.c (reload): Don't remove return value clobbers. From-SVN: r30401
1999-10-31[multiple changes]Richard Kenner1-9/+46
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-31toplev.c (rest_of_compilation): Seperate the setjmp/vfork clobber warning ↵Marc Lehmann1-2/+4
from -Wuninitialized and put it under -W. Sun Oct 31 13:32:15 CET 1999 Marc Lehmann <pcg@goof.com> * toplev.c (rest_of_compilation): Seperate the setjmp/vfork clobber warning from -Wuninitialized and put it under -W. * function.c (uninitialized_vars_warning): Warn only when the corresponding flag is set. From-SVN: r30294
1999-10-29Fix up last patch.Catherine Moore1-5/+7
From-SVN: r30265
1999-10-29Remove stray comment.Catherine Moore1-1/+0
From-SVN: r30260
1999-10-29expr.c (emit_push_insn): New argument alignment_pad.Catherine Moore1-6/+29
* expr.c (emit_push_insn): New argument alignment_pad. Update all callers. Adjust stack pointer based on alignment pad. * function.c (pad_to_arg_alignment): New argument alignment_pad. Update all callers. Track alignment_pad if boundary > PARM_BOUNDARY. (locate_and_pad_parm): New argument alignment_pad. Update all callers. * expr.h (emit_push_insn): Update prototype. (locate_and_pad_parm): Update prototype. * calls.c (arg_data): Add new field alignment_pad. (initialize_argument_information): Initialize alignment_pad. From-SVN: r30257
1999-10-29except.c (free_eh_nesting_info): Free the info itself.Mark Mitchell1-1/+2
* except.c (free_eh_nesting_info): Free the info itself. * function.c (free_after_compilation): Don't free NULL. * gcse.c (alloc_pre_mem): Free the temp_bitmap, too. (pre_edge_insert): Free inserted. * stmt.c (free_stmt_status): Don't free NULL. From-SVN: r30255
1999-10-26Reorg reg-stack to use the standard CFG.Jan Hubicka1-11/+0
Co-Authored-By: Richard Henderson <rth@cygnus.com> From-SVN: r30201
1999-10-21calls.c: Include tm_p.h later, so everything we need is defined.Kaveh R. Ghazi1-1/+1
* calls.c: Include tm_p.h later, so everything we need is defined. * expr.c: Likewise. * function.c: Likewise. * except.c: Include tm_p.h. * sparc.c: Likewise. (dwarf2out_cfi_label): Don't prototype. (check_return_regs, epilogue_renumber, ultra_cmove_results_ready_p, ultra_fpmode_conflict_exists, ultra_find_type, ultra_build_types_avail, ultra_flush_pipeline, ultra_rescan_pipeline_state, set_extends, ultra_code_from_mask, ultra_schedule_insn): Add static prototype. (data_segment_operand, text_segment_operand): Call itself with the proper number of arguments. (sparc_flat_save_restore, sparc_v8plus_shift): Constify a char*. * sparc.h: Move all declarations to sparc-protos.h. (SELECT_RTX_SECTION): Pass a missing MODE argument to symbolic_operand. * sparc/sysv4.h (SELECT_RTX_SECTION): Likewise. * config/svr4.h (text_section, ctors_section, dtors_section): Add Prototypes. (ASM_OUTPUT_SECTION_NAME, UNIQUE_SECTION, ASM_FINISH_DECLARE_OBJECT, ASM_OUTPUT_LIMITED_STRING, ASM_OUTPUT_ASCII): Constify a char*. * sparc-protos.h: New file for sparc prototypes. cp: * expr.c: Include tm_p.h. From-SVN: r30122
1999-10-21function.c (record_insns, contains): Always declare and define.Kaveh R. Ghazi1-5/+3
* function.c (record_insns, contains): Always declare and define. (record_insns): Mark with ATTRIBUTE_UNUSED. From-SVN: r30121
1999-10-03cpplib.c (if_directive_nameo): Add static prototype.Kaveh R. Ghazi1-1/+6
* cpplib.c (if_directive_nameo): Add static prototype. * cse.c (cse_insn): Remove unused variable `p'. * except.c (create_rethrow_ref, push_entry, receive_exception_label, new_eh_region_entry, find_func_region, clear_function_eh_region, process_nestinfo): Add static prototypes. (get_reg_for_handler): Hide definition. (process_nestinfo): Initialize variable `extra_handlers'. * expr.h (expand_builtin_longjmp): Add extern prototype. * final.c (final_addr_vec_align, align_fuzz): Add static prototypes. * function.c (prepare_function_start): Likewise. (pop_function_context_from): Mark parameter `context' with ATTRIBUTE_UNUSED. (push_temp_slots_for_block, flush_addressof): Hide definition. * gcov.c (init_arc, reverse_arcs, create_program_flow_graph, solve_program_flow_graph, calculate_branch_probs, function_summary, main, fancy_abort): Add prototypes. * gen-protos.c (add_hash, parse_fn_proto, main): Likewise. (add_hash): Constify a char*. * ggc-common.c (ggc_mark_rtx_ptr, ggc_mark_tree_ptr, ggc_mark_tree_varray_ptr, ggc_mark_tree_hash_table_ptr, ggc_mark_string_ptr, ggc_mark_tree_hash_table_entry): Add prototypes. * integrate.c (expand_inline_function_eh_labelmap): Likewise. * lists.c (free_list, zap_lists): Likewise. From-SVN: r29783
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-17functiion.h (struct function): Add x_whole_function_mode_p.Mark Mitchell1-3/+61
* functiion.h (struct function): Add x_whole_function_mode_p. (retrofit_block): Declare. * function.c (retrofit_block): New function. (identify_blocks): Add assertions. Allow an incomplete set of block notes if we're still generating code for the function. * integrate.c: Include loop.h. (expand_inline_function): Call find_loop_tree_blocks to map block notes to blocks when in whole-function mode. Use retrofit_block to insert new BLOCKs for the inlined function, rather than insert_block. * stmt.c (expand_fixup): Likewise. Don't use pushlevel/polevel. * Makefile.in (integrate.o): Depend on loop.h. From-SVN: r29487
1999-09-16function.c (identify_blocks): Don't shadow a variable in an outer scope.Mark Mitchell1-4/+4
* function.c (identify_blocks): Don't shadow a variable in an outer scope. * integrate.c (integrate_decl_tree): Don't use pushlevel, pushdecl, or poplevel to build up the new BLOCK tree. (expand_inline_function): Likewise. (integrate_parm_decls): Likewise. From-SVN: r29453
1999-09-15emit-rtl.c (free_emit_status): Don't check DECL_DEFER_OUTPUT.Richard Henderson1-23/+66
* emit-rtl.c (free_emit_status): Don't check DECL_DEFER_OUTPUT. Free the struct. (mark_emit_status): Renamed from mark_emit_state. * except.c (mark_eh_status): Renamed from mark_eh_state. Check not null before marking. (free_eh_status): New. * expr.c (mark_expr_status, free_expr_status): New. * function.c (free_machine_status): New. (free_after_parsing): New. (free_after_compilation): Move bits to free_after_parsing; call free_eh_status, free_expr_status; zero the marked members of the function state. (prepare_function_start): No can_garbage_collect. Call init_eh_for_function. (expand_dummy_function_end): Free up current_function state. (mark_function_status): Renamed from mark_function_state. (mark_function_chain): No can_garbage_collect. Call mark_expr_status. * function.h (struct function): No can_garbage_collect. (free_machine_status, free_after_parsing): Declare. (free_eh_status, free_expr_status): Declare. * ggc.h (mark_expr_status): Declare. * stmt.c (free_stmt_status): Free the struct. (mark_stmt_status): Renamed from mark_stmt_state. (init_stmt): Don't call init_eh. (init_stmt_for_function): Don't call init_eh_for_function. * toplev.c (compile_file): Call init_eh. (rest_of_compilation): Free basic block info before ggc_collect. Call free_after_parsing; conditionally call free_after_compilation. * varasm.c (mark_varasm_status): Renamed from mark_varasm_state. Check not null before marking. From-SVN: r29448
1999-09-15rtl.h (NOTE_BLOCK_NUMBER): Replace with ...Mark Mitchell1-25/+23
* rtl.h (NOTE_BLOCK_NUMBER): Replace with ... (NOTE_BLOCK): New macro. (NOTE_BLOCK_LIVE_RANGE_BLOCK): Remove. * function.h (identify_blocks): CHange prototype. * function.c (identify_blocks): Simplify. (reorder_blocks): Likewise. * ggc-common.c (ggc_mark_rtx): Mark the BLOCK associated with a NOTE_INSN_BLOCK_{BEG,END}. * haifa-sched.c (sched_analyze): Don't put NOTE_BLOCK_NUMBER on the list of saved notes if the note isn't a NOTE_INSN_BLOCK_{BEG,END}. (move_insn1): Use NOTE_EH_HANDLER in comment, rather than NOTE_BLOCK_NUMBER. (reemit_notes): Adjust recreation of notes to reflect new saved note structure. * print-rtl.c (print_rtx): Print the address of the BLOCK when printing a block note. * stmt.c (block_vector): Remove. (find_loop_tree_blocks): Simplify. (unroll_block_trees): Likewise. From-SVN: r29441
1999-09-15Remove second arg from assign_parmsBernd Schmidt1-54/+36
From-SVN: r29431
1999-09-12Replace insn_foo with insn_data.foo.Richard Henderson1-3/+4
From-SVN: r29358
1999-09-09function.c (assign_stack_local_1): Allocate from function->x_frame_offset, ↵Richard Henderson1-1/+1
not frame_offset. * function.c (assign_stack_local_1): Allocate from function->x_frame_offset, not frame_offset. From-SVN: r29248
1999-09-09function.h (free_after_compilation): Remove decl parameter.Mark Mitchell1-9/+13
* function.h (free_after_compilation): Remove decl parameter. (free_varasm_status0: Likewise. (free_emit_status): Likewise. (free_stmt_status): Likewise. (free_after_compilation): Likewise. (init_lang_status): New variable. (free_lang_status): Likewise. * emit-rtl.c (free_emit_status): Make decl parameter implicit. * function.c (init_lang_status): New variable. (free_lang_status): Likewise. (push_function_context_to): Don't set function::decl here. (free_after_copmilation): Make decl parameter implicit. Call free_lang_status if defined. (prepare_function_start): Call init_lang_status if defined. (init_function_start): Set function::decl here. * profile.c (output_func_start_profiler): Don't call pushdecl until we've actually started the function. * stmt.c (free_stmt_status): Make decl parameter implicit. * toplev.c (rest_of_compilation): Don't pass decl to free_after_compilation. * varasm.c (free_varasm_status): Likewise. From-SVN: r29239
1999-09-09combine.c (SUBST): Break out to a real function do_SUBST.Richard Henderson1-0/+2
* 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-07emit-rtl.c (free_emit_status): Take decl as a parameter.Mark Mitchell1-10/+17
* emit-rtl.c (free_emit_status): Take decl as a parameter. (init_emit_once): Add more GC roots. * except.c (mark_func_eh_entry): New function. (mark_eh_node): Mark false_label and rethrow_label. (init_eh): Add more GC roots. * function.c (free_after_compilation): Take decl as a paramter. Call free_stmt_status. (mark_function_state): Don't assume x_parm_reg_stack_loc is non-NULL. * function.h (free_after_compilation): Change prototype. (free_varasm_status): Likewise. (free_emit_status): Likewise. (free_stmt_status): New function. * ggc-simple.c (rtx, vecs, trees, strings, bytes_alloced_since_gc): Remove, replacing with ... (ggc_status): New structure. (ggc_chain): New variable. (init_gcc): Define. (ggc_push_context): New function. (ggc_pop_context): Likewise. (ggc_alloc_rtx): Adjust for use of ggc_chain. (ggc_alloc_rtvec): Likewise. (ggc_alloc_tree): Likewise. (ggc_alloc_string): Likewise. (ggc_mark_rtx): Mark NOTE_SOURCE_FILE and NOTE_RANGE_INFO. (ggc_mark_tree): Give language-dependent code a chance to mark `x' nodes. (ggc_mark_tree_varray): Handle empty arrays. (ggc_collect): Adjust for use of ggc_chain. Clear bytes_alloced_since_last_gc. * ggc.h (ggc_pop_context): New function. (ggc_push_context): Likewise. * print-tree.c (print_node): Don't print obstacks when GC'ing. * stmt.c (free_stmt_status): New function. (init_stmt_for_function): Clear last_expr_value. * toplev.c (rest_of_compilation): Always call free_after_compilation. Conditionalize call to ggc_collect. (main): Call init_ggc. * tree.c (push_obstacks): Do the push, even when GC'ing. (push_obstacks_nochange): Likewise. (pop_obstacks): Liekwise. * varasm.c (free_varasm_status): Take decl as a parameter. From-SVN: r29170
1999-09-07Commit parts that were missing in Mark's last commitBernd Schmidt1-0/+1
From-SVN: r29164
1999-09-06Merge in gcc2-ss-010999Jeff Law1-12/+23
From-SVN: r29150