aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
AgeCommit message (Collapse)AuthorFilesLines
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
1999-09-05Makefile.in (ggc-simple.o): Depend on varray.h.Richard Henderson1-11/+10
* Makefile.in (ggc-simple.o): Depend on varray.h. (rtl.o): Depend on ggc.h. (genattrtab.o): Depend on ggc.h. (print-tree.o): Likewise. (fold-const.o): Likewise. * emit-rtl.c (sequence_element_free_list): Remove, and all references. (make_insn_raw): Don't cache insns when GC'ing. (emit_insn_before): Likewise. (emit_insn_after): Likewise. (emit_insn): Likewise. (start_sequence): Use xmalloc to allocate the sequence_stack. (end_sequence): Add free to free it. (gen_sequence): Don't cache insns when GC'ing. (clear_emit_caches): Don't use sequence_element_free_list. (init_emit): Use xcalloc, not xmalloc+bzero. * fold-const.c (size_int_wide): Kill the cache, when GC'ing. * function.c (pop_function_context_from): Use free to free the fixup_var_refs_queue. (put_reg_into_stack): Allocate it with xmalloc. * genattrtab.c: Include ggc.h. (operate_exp): Don't use obstack_free when GC'ing. (simplify_cond): Likewise. (simplify_text_exp): Likewise. (optimize_attrs): Likewise. * gengentrtl.c (gendef): Use ggc_alloc_rtx to allocate RTL, when GC'ing. (gencode): Generate a #include for ggc.h. * ggc-callbacks.c (ggc_p): Define it to zero. * ggc-none.c (ggc_p): Likewise. * ggc-simple.c: Include varray.h. (ggc_mark_tree_varray): New function. (ggc_add_tree_varray_root): Likewise. (ggc_mark_tree_varray_ptr): Likewise. * ggc.h (ggc_p): Declare. (varray_head_tag): Likewise. (ggc_add_tree_varray_root): Declare. * print-tree.c (print_node): Don't check for TREE_PERMANENT inconsistencies when GC'ing. * rtl.c: Include ggc.h. (rtvec_alloc): Use ggc_alloc_rtvec when GC'ing. (rtx_alloc): Use ggc_alloc_rtx when GC'ing. (rtx_free): Don't call obstack_free when GC'ing. * toplev.c (rest_of_compilation): Call ggc_collect after every pass, if GC'ing. * tree.c (push_obstacks): Do nothing, if GC'ing. (pop_obstacks_nochange): Likewise. (pop_obstacks): Likewise. (make_node): Use ggc_alloc_tree when GC'ing. (copy_node): Likewise. (get_identifier): Use ggc_alloc_string when GC'ing. (build_string): Likewise. (make_tree_vec): Use ggc_alloc_tree when GC'ing. (tree_cons): Likewise. (build1): Likewise. (type_hash_canon): Don't call obstack_free when GC'ing. Co-Authored-By: Bernd Schmidt <bernds@cygnus.co.uk> Co-Authored-By: Mark Mitchell <mark@codesourcery.com> From-SVN: r29125
1999-09-05Makefile.in (tree.o): Depend on ggc.h.Richard Henderson1-1/+118
* Makefile.in (tree.o): Depend on ggc.h. (varasm.o): Likewise. (function.o): Likewise. (stmt.o): Likewise. (except.o): Likewise. (optabs.o): Likewise. (emit-rtl.o): Likewise. * emit-rtl.c: Include ggc.h. (sequence_element_free_list): Remove, and all references. (mark_sequence): New functions. (mark_emit_state): New function. * except.c: Include ggc.h. (mark_eh_node, mark_eh_stack, mark_eh_queue): New functions. (mark_tree_label_node): New functions. (mark_eh_state): New function. * function.c: Include ggc.h. (mark_temp_slot, mark_function_chain): New functions. (mark_function_state): New function. (init_function_once): New function. * function.h (init_function_once): New function. * ggc-callbacks.c (lang_mark_false_label_stack): New function. * ggc.h (label_node): Declare. (eh_status, emit_status, stmt_status, varasm_status): Likewise. (lang_mark_false_label_stack): New function. (mark_temp_slot): Remove declaration. (mark_function_chain): Likewise. (mark_eh_state): Adjust prototype. (mark_stmt_state, mark_emit_state, mark_varasm_state, mark_optab): Likewise. * optabs.c: Include ggc.h. (mark_optab): New function. (init_optabs): Add gc roots. * stmt.c: Include ggc.h. (mark_cond_nesting, mark_loop_nesting): New functions. (mark_block_nesting, mark_case_nesting, mark_goto_fixup): Likewise. (mark_stmt_state): New function. * toplev.c (compile_file): Call init_function_once. * tree.c: Include ggc.h. (type_hash): Move declaration earlier in file. (TYPE_HASH_SIZE, type_hash_table): Likewise. (init_obstacks): Add gc roots. (mark_type_hash): New function. * varasm.c: Include ggc.h. (mark_pool_constant): New function. (mark_varasm_state): New function. Co-Authored-By: Bernd Schmidt <bernds@cygnus.co.uk> Co-Authored-By: Mark Mitchell <mark@codesourcery.com> From-SVN: r29119
1999-09-05c-decl.c (struct language_function): Renamed from struct c_function.Bernd Schmidt1-108/+63
* c-decl.c (struct language_function): Renamed from struct c_function. Delete elt NEXT. (c_function_chain): Delete. (push_c_function_context): New arg F. Don't warn about nested functions here. Fill LANGUAGE elt of F. Delete code to update c_function_chain. Don't call push_function_context. (pop_c_function_context): New arg F. Restore from there instead of from c_function_chain. Don't call pop_function_context. Clear out LANGUAGE field of F when done. * c-lang.c: Include "function.h" (lang_init): Initialize save_lang_status and restore_lang_status. * c-parse.in (nested_function, nested_function_notype): Warn about nested functions. Call push_function_context/pop_function_context instead of the _c_ variants. * c-tree.h (push_c_function_context, pop_c_function_context): Update prototype. * Makefile.in (c-lang.o): Update dependencies. * emit-rtl.c (init_emit): Use xmalloc to allocate regno_reg_rtx, regno_pointer_flag, regno_pointer_align. (gen_reg_rtx): Use xrealloc to enlarge them. (free_emit_status): New function. * function.c (mark_machine_status, mark_lang_status): New variables. (assign_stack_local_1): Renamed from assign_outer_stack_local. Merge in some bits from assign_stack_local. All callers changed to use new name. (assign_stack_local): Just call assign_stack_local_1. (free_after_compilation): New function. (put_reg_into_stack): Simplify to always call assign_stack_local_1. (trampoline_address): Likewise. (assign_parms): Use xcalloc/xrealloc to allocate parm_reg_stack_loc. (prepare_function_start): Explicitly clear some more variables. * function.h (struct function): New elt can_garbage_collect. (mark_machine_status, mark_lang_status): Declare variables. (free_after_compilation, free_emit_status, free_varasm_status, init_varasm_status): Declare functions. * toplev.c (rest_of_compilation): Call free_after_compilation when done with the current function. * varasm.c (free_varasm_status): New function. From-SVN: r29117
1999-09-04Change memory mangement and constant pool handling for nested functions to ↵Bernd Schmidt1-9/+18
match that of normal functions; add init_machine_status mechanism. From-SVN: r29101
1999-09-04function.h (struct function): Add new element LANGUAGE.Bernd Schmidt1-3/+12
* function.h (struct function): Add new element LANGUAGE. (save_lang_status): Declare new variable. (restore_lang_status): Likewise. * function.c (save_lang_status): Define. (restore_lang_status): Likewise. (push_function_context_to): Call language-specific save function. (pop_function_context_from): Call language-specific restore function. From-SVN: r29095
1999-08-31rtl.h (RTL_CHECK1, RTL_CHECK2): New macros which type- and bounds- check RTL ↵Zack Weinberg1-6/+12
accesses if --enable-checking. 1999-08-31 12:20 -0700 Zack Weinberg <zack@bitmover.com> * rtl.h (RTL_CHECK1, RTL_CHECK2): New macros which type- and bounds- check RTL accesses if --enable-checking. (RTVEC_ELT): Bounds check if --enable-checking. (XWINT, XINT, XSTR, XEXP, XVEC, XMODE, XBITMAP, XTREE, XBBDEF): Use RTL_CHECK1/RTL_CHECK2 as appropriate. (XVECEXP, XVECLEN): Define in terms of XVEC, RTVEC_ELT, and GET_NUM_ELEM. (X0WINT, X0INT, X0STR, X0EXP, X0VEC, X0MODE, X0BITMAP, X0TREE, X0BBDEF, X0ADVFLAGS): New macros for accessing '0' slots of RTXes. (ADDR_DIFF_VEC_FLAGS): Use X0ADVFLAGS. (NOTE_SOURCE_FILE): Use X0STR. (NOTE_BLOCK_NUMBER, NOTE_EH_HANDLER, LABEL_NUSES, MEM_ALIAS_SET): Use X0INT. (NOTE_RANGE_INFO, NOTE_LIVE_INFO, NOTE_BASIC_BLOCK, JUMP_LABEL, LABEL_REFS, LABEL_NEXTREF, CONTAINING_INSN): Use X0EXP. * real.h (CONST_DOUBLE_CHAIN): Use X0EXP. * rtl.c (copy_rtx, copy_most_rtx): Copy '0' slots with X0WINT. (rtl_check_failed_bounds, rtl_check_failed_type1, rtl_check_failed_type2, rtvec_check_failed_bounds): New functions. (fancy_abort): Fix comment. * cse.c (canon_hash): Read CONST_DOUBLE data slots with XWINT. (cse_insn): Decrement LABEL_NUSES for jump target before deleting jump insn. * emit-rtl.c (gen_rtx_CONST_DOUBLE): Use X0EXP for slot 1. * final.c (alter_subreg): Compute regno before changing x to REG; set REGNO(x) after changing it. * flow.c (count_basic_blocks): Use XWINT to inspect EH_REGION notes containing CONST_INTs. (delete_eh_regions): Use NOTE_EH_HANDLER. * function.c (put_reg_into_stack): Make reg a MEM before initializing it. (fixup_var_refs_insns): Save REG_NOTES (insn) in case we delete insn. (gen_mem_addressof): Make reg a MEM before initializing it. * integrate.c (copy_rtx_and_substitute): Copy '0' slots with X0WINT. * local-alloc.c (update_equiv_regs): Zap REG_NOTES before deleting an insn, not after. (block_alloc): Only look at PATTERN(insn) if we have to, and only if it's format class 'i'. * loop.c (check_dbra_loop): Check bl->biv->add_val is a CONST_INT before using its INTVAL. * print-rtl.c (print_rtx): Use X0STR. * regmove.c (fixup_match_1): Don't look at PATTERN of non-class-'i' insn chain elements. * reload.c (loc_mentioned_in_p): Take address of in->fld[1].rtx directly. * reload1.c (reload): Change reg to a MEM before initializing it. * varasm.c (mark_constant_pool): Skip CONST_DOUBLES, which have no names. * config/i386/i386.md (decrement_and_branch_if_zero): Fix typo. From-SVN: r29008
1999-08-27function.c (assign_stack_temp_for_type): Fix change of Mar 5 for the fact ↵Andreas Schwab1-3/+4
that ALIGN is measured in bits, not bytes. * function.c (assign_stack_temp_for_type): Fix change of Mar 5 for the fact that ALIGN is measured in bits, not bytes. From-SVN: r28926
1999-08-24Fix more problems from GC diffsBernd Schmidt1-6/+0
From-SVN: r28820