* rtl.h (local_alloc): Returns an integer now.
* local-alloc.c (recorded_label_ref): New file scoped variable.
(local_alloc): Initialize recorded_label_ref to zero. Return its
value when local allocation has completed.
(update_equiv_regs); If we create an equivalence for a LABEL_REF,
set recorded_label_ref.
* toplev.c (rest_of_compilation): Run the loop optimizer after
register allocation and reloading if needed.
From-SVN: r26324
* rtlanal.c (multiple_sets): New function.
* rtl.h (multiple_sets): Declare it.
* local-alloc.c (wipe_dead_reg): Use it.
* global.c (global_conflicts): Likewise.
Should fix the m68k bootstrap problems.
From-SVN: r24283
* local-alloc.c (block_alloc): Slightly retune heuristic to widen
qty lifetimes.
Actually check in the local-alloc patch that goes along with this ChangeLog
entry...
From-SVN: r24171
* local-alloc.c (function_invariant_p): New function.
(update_equiv_regs): Use function_invariant_p instead of CONSTANT_P
to decide if an equivalence should be recorded.
* reload1.c (num_eliminable_invariants): New static variable.
(reload): Set it. Use function_invariant_p instead of CONSTANT_P
to decide if an equivalence should be recorded.
Unshare PLUS.
(calculate_needs_all_insns): Skip insns that only set an equivalence.
Take num_eliminable_invariants into account when deciding
if register elimination should be done.
(reload_as_needed): Take num_eliminable_invariants into account
when deciding if register elimination should be done.
(eliminate_regs): Handle non-constant reg_equiv_constant.
* rtl.h (function_invariant_p): Declare.
From-SVN: r24026
* reload1.c (reload): Handle equivalences set up in multiple places.
* local-alloc.c (reg_equiv_init_insns): New variable.
(no_equiv): New function.
(update_equiv_regs): Handle equivalences set up in multiple places.
Don't ignore an insn just because its destination is likely to be
spilled.
From-SVN: r23610
* Makefile.in (insn-extract.o): Fix dependencies.
* genextract.c (main): Generate includes for insn-config.h and
recog.h.
Delete generation of declarations which are now in recog.h.
* genrecog.c (main): Delete generation of definitions which are
now in recog.c.
* local-alloc.c (block_alloc): Use extract_insn and the variables
it sets up instead of looking up values by insn_code.
* recog.c (recog_operand, recog_operand_loc, recog_dup_loc,
recog_dup_num): Define here instead of generating the definition in
genrecog.c.
(recog_n_operands, recog_n_dups, recog_n_alternatives,
recog_operand_mode, recog_constraints, recog_operand_address_p):
New variables.
(extract_insn): New function.
* recog.h (extract_insn): Declare function.
(which_alternative, recog_n_operands, recog_n_dups,
recog_n_alternatives, recog_operand_mode, recog_constraints,
recog_operand_address_p): Declare variables.
* regclass.c (n_occurrences): New static function.
* reload.c (n_occurrences): Delete function.
(find_reloads): Use extract_insn.
* reload.h (n_occurrences): Delete declaration.
From-SVN: r23147
* Makefile.in (sched.o): Depend on recog.h.
* alias.c (REG_BASE_VALUE): Cast the result of REGNO() macro to
(unsigned) when comparing against one.
(find_base_value): Likewise.
(record_base_value): Cast variable `regno' to (unsigned) when
comparing against one. Cast the result of REGNO() macro to
(unsigned) when comparing against one.
(memrefs_conflict_p): Change type of variables `r_x' and `r_y' to
unsigned.
(init_alias_analysis): Add unsigned variable `ui'. Use it as loop
variable where an unsigned index is needed.
* caller-save.c (init_caller_save): Cast `-1' to (enum insn_code)
before comparing against one.
* collect2.c: Add prototypes for functions `error', `fatal' and
`fatal_perror'. Make these functions take variable arguments
instead of faking it with a fixed number of args.
(write_c_file_stat): Cast the argument of ctype macro to (unsigned
char).
* combine.c (can_combine_p): Mark parameter `pred' with
ATTRIBUTE_UNUSED.
(find_split_point): Cast variable `src' to (unsigned
HOST_WIDE_INT) when comparing against one.
HOST_WIDE_INT) when comparing against one.
(simplify_rtx): Cast 1 to (unsigned HOST_WIDE_INT) in shift.
(simplify_logical): Likewise.
(force_to_mode): Cast result of INTVAL() macro to (unsigned
HOST_WIDE_INT) when comparing against one. Cast 1 to (unsigned
HOST_WIDE_INT) in shift.
(simplify_and_const_int): Cast result of INTVAL() macro to
`unsigned HOST_WIDE_INT' when comparing against one.
(merge_outer_ops): Cast variable const0 to `unsigned
HOST_WIDE_INT' when comparing against the result of
GET_MODE_MASK() macro.
(simplify_comparison): Likewise for variable `c0'. Cast variable
`const_op' to `unsigned HOST_WIDE_INT' when comparing against
one. Cast `1' to `unsigned HOST_WIDE_INT' in shift. Cast the
result of `GET_MODE_MASK()/2' to `HOST_WIDE_INT' when comparing
against one. Cast `1' to `unsigned HOST_WIDE_INT' in shift. Cast
result of INTVAL() macro to `unsigned HOST_WIDE_INT' when
comparing against one.
(distribute_notes): Wrap variable `cc0_setter' in macro `HAVE_cc0'.
config/mips/mips.c (gen_int_relational): Cast result of INTVAL()
macro to `unsigned HOST_WIDE_INT' when comparing against one.
(output_block_move): Cast `sizeof' expression to (int) when
comparing against one.
(function_arg): Cast BITS_PER_WORD to `unsigned' when comparing
against one.
(save_restore_insns): Cast `base_offset' to `long' to match format
specifier in fprintf.
* config/mips/mips.h (Pmode): Cast the result of `Pmode' macro
to `enum machine_mode'.
* flow.c (life_analysis_1): Remove unused variable `insn'.
* gcc.c (translate_options): Move variables `j' and `k' into the
scope in which they are used. Change their types to `size_t'.
(set_spec): Cast the argument of ctype macro to `unsigned char'.
(read_specs): Likewise.
(process_command): Cast `sizeof' to (int) when comparing against one.
(do_spec_1): Cast the argument of ctype macro to `unsigned char'.
(handle_braces): Cast both sides of `==' expression to `long' to
ensure sign matching.
(main): Cast variable `i' to `int' when comparing against one.
* gcov-io.h (__fetch_long): Change type of parameter `bytes' from
int to size_t. Cast variable `i' to size_t when comparing against
one.
* genattrtab.c (convert_set_attr_alternative): Remove unused
parameter `insn_code'. All callers changed.
(convert_set_attr): Likewise.
* genrecog.c (add_to_sequence): Cast result of XVECLEN() macro to
size_t when comparing against one. Likewise for variable `len'.
* global.c (global_alloc): Cast variable `max_regno' to size_t
when comparing against one. Likewise for variable `max_allocno'.
* jump.c (sets_cc0_p): Mark parameter `x' with ATTRIBUTE_UNUSED.
* local-alloc.c (validate_equiv_mem_from_store): Mark parameter
`set' with ATTRIBUTE_UNUSED.
(find_free_reg): Cast `sizeof' expression to (int) when comparing
against one.
* loop.c (count_loop_regs_set): Remove unused variable `dest'.
(strength_reduce): Mark parameter `bct_p' with ATTRIBUTE_UNUSED.
(get_condition): Cast variable `const_val' to `unsigned
HOST_WIDE_INT' when comparing against one. Cast unsigned
expression to HOST_WIDE_INT when comparing against one.
(insert_loop_mem): Mark parameter `data' with ATTRIBUTE_UNUSED.
(load_mems_and_recount_loop_regs_set): Cast variable `nregs' to
`unsigned' when comparing against one.
* protoize.c (is_id_char): Change type of parameter `ch' to
unsigned char.
(munge_compile_params): Cast argument of ctype macro to (const
unsigned char).
(process_aux_info_file): Cast variable `aux_info_size' to int when
comparing against one.
(forward_to_next_token_char): Cast argument of ctype macro to
`const unsigned char'.
(edit_formals_lists): Likewise.
(find_rightmost_formals_list): Likewise.
(add_local_decl): Likewise.
(add_global_decls): Likewise.
(edit_fn_definition): Likewise.
(do_cleaning): Likewise.
(scan_for_missed_items): Likewise.
(edit_file): Cast variable `orig_size' to (int) when comparing
against one.
(main): Cast argument of ctype macro to `const unsigned char'.
* recog.c (const_int_operand): Mark parameter `mode' with
ATTRIBUTE_UNUSED.
* regclass.c (record_reg_classes): Change type of variable `c' to
`unsigned char'. Cast `char' array index to `unsigned char'.
* reload.c (push_secondary_reload): Cast argument to
REG_CLASS_FROM_LETTER() macro to `unsigned char'.
* reload1.c (calculate_needs): Cast `char' array index to
`unsigned char'.
(set_label_offsets): Change type of variable `i' to unsigned int.
Cast result of XVECLEN() macro to unsigned when comparing against
one.
(mark_not_eliminable): Change type of variable `i' to unsigned.
(order_regs_for_reload): Likewise. Cast `max_regno' to unsigned
when comparing against one.
(reload_as_needed): Cast macro NUM_ELIMINABLE_REGS to (int) when
comparing against one.
(choose_reload_regs): Hide unused label `fail'.
(reload_cse_simplify_operands): Cast `char' array index to
`unsigned char'.
(reload_combine_note_store): Mark parameter `set' with
ATTRIBUTE_UNUSED. Cast UNITS_PER_WORD to unsigned when comparing
against one.
(reload_cse_move2add): Remove unused variable `src2'.
* sched.c: Include recog.h.
(sched_note_set): Remove unused parameter `b'. All callers
changed.
(split_hard_reg_notes): Likewise for parameter `orig_insn'.
(blockage_range): Cast result of UNIT_BLOCKED() macro to (int)
when comparing against one.
* stupid.c (stupid_find_reg): Mark parameter `changes_size' with
ATTRIBUTE_UNUSED. Cast `sizeof' expression to (int) when
comparing against one.
* unroll.c (precondition_loop_p): Remove unused parameter
`loop_end'. All callers changed.
From-SVN: r23079
* global.c: Update comments.
(global_alloc): Assign allocation-numbers
even for registers allocated by local_alloc in case
they are later spilled and retry_global_alloc is called.
(mark_reg_store, mark_reg_clobber,
mark_reg_conflicts, mark_reg_death): Always record a
conflict with a pseudo register even if it has been
assigned to a hard register.
(dump_conflicts): Don't list pseudo registers already assigned to
a hard register as needing to be allocated, but do list their
conflicts.
* local-alloc.c: Update comment.
From-SVN: r22322
* local-alloc.c (block_alloc): Do not try to avoid false dependencies
when SMALL_REGISTER_CLASSES is nonzero.
Fixes x86 performance regression.
From-SVN: r20704
* alias.c: Include toplev.h
* caller-save.c: Include toplev.h
* combine.c: Include toplev.h
* flow.c Include toplev.h
* global.c: Include toplev.h
* jump.c: Include toplev.h
* local-alloc.c: Include toplev.h
* loop.c: Include toplev.h
* regmove.c: Include toplev.h
* stupid.c: Include toplev.h
* unroll.c: Include toplev.h
* Makefile.in: Add toplev.h dependencies.
From-SVN: r20623
* Makefile.in (LIB2FUNCS_EH): Define. Just "_eh" for now.
(LIBGCC2_CFLAGS): Remove -fexceptions.
(LIB2FUNCS): Remove "_eh".
(libgcc2.a): Iterate over LIB2FUNCS_EH and build everything in
it with -fexceptions.
* Makefile.in (local-alloc.o): Depend on insn-attr.h.
* local-alloc.c (block_alloc): Avoid creating false
dependencies for targets which use instruction scheduling.
From-SVN: r20370
* c-aux-info.c: Include string.h/strings.h.
* pa.c: Include stdlib.h.
(pa_combine_instructions): Prototype the function.
(pa_can_combine_p, forward_branch_p, shadd_constant_p): Likewise.
(reloc_needed): Add default case for enumeration switch.
(remove_useless_addtr_insns): Remove unused variable `all'.
(hppa_expand_prologue): Add explicit braces to avoid
ambiguous `else'.
(output_function_epilogue): Remove unused variable `i'.
(output_millicode_call): Remove unused variable `link'.
(shadd_constant_p, forward_branch_p): Make the function static.
(following_call): Explicitly declare to return int.
(pa_reorg): Declare as void.
(pa_combine_instructions): Declare as static void. Add
parentheses around && within ||.
* pa.h: Add prototypes for pa_reorg, symbolic_operand,
following_call, function_label_operand, lhs_lshift_cint_operand
and zdepi_cint_p.
* pa.md: Add parentheses around && within ||.
* cppalloc.c: Include stdlib.h.
* cpperror.c (cpp_print_containing_files): Remove unused variable
`i'. Fix format specifier in fprintf.
* cse.c (cse_around_loop): Add explicit braces to avoid
ambiguous `else'.
(delete_dead_from_cse): Wrap variable `tem' in macro HAVE_cc0.
* expr.c (expand_expr): Add parentheses around && within ||.
* final.c (app_enable): Replace fprintf with fputs where there are
no format specifiers and no trailing argument after the string.
Eg, when printing ASM_APP_ON/ASM_APP_OFF.
(app_disable): Likewise.
(final_end_function): Likewise.
(final_scan_insn): Likewise. Remove unused variable `set'.
(profile_function): Wrap empty if-statement body in {} brackets.
* function.c: Include stdlib.h.
(pad_below): Wrap prototype and definition in ARGS_GROW_DOWNWARD.
(reposition_prologue_and_epilogue_notes): Add parentheses
around assignment used as truth value.
* integrate.c (expand_inline_function): Wrap variable
`cc0_insn' in macro HAVE_cc0.
* jump.c (jump_optimize): Wrap variable `q' in macro
HAVE_cc0. Remove unused variable `prev1'.
* libgcc2.c (__bb_exit_trace_func): Add parentheses around &&
within ||. Fix format specifier in fprintf.
(__bb_init_prg): Add parentheses around assignment used as
truth value.
* local-alloc.c: Include stdlib.h.
(requires_inout): Add parentheses around assignment used
as truth value.
* loop.c (analyze_loop_iterations): Wrap prototype and definition
in macro HAVE_decrement_and_branch_on_count.
(insert_bct, instrument_loop_bct): Likewise.
(move_movables): Add parentheses around assignment used as
truth value.
(consec_sets_invariant_p): Likewise.
(maybe_eliminate_biv_1): Wrap variable `new' in macro HAVE_cc0.
* objc/objc-act.c: Include stdlib.h.
(lookup_method_in_protocol_list): Wrap empty else-statement body
in braces.
(lookup_protocol_in_reflist): Likewise.
(objc_add_static_instance): Remove unused variables `decl_expr'
and `decl_spec'.
(get_objc_string_decl): Remove unused variable `decl'.
(generate_static_references): Remove unused variables `idecl' and
`instance'.
(check_protocols): Wrap empty else-statement body in braces.
* protoize.c: Include stdlib.h.
(substr): Add parentheses around assignment used as truth value.
(abspath): Likewise.
(shortpath): Likewise.
* regmove.c (fixup_match_1): Add parentheses around assignment
used as truth value.
* reload.c (push_secondary_reload): Remove unused variable `i'.
(find_reloads): Add parentheses around assignment used as truth
value.
* reload1.c: Include stdlib.h.
* rtl.h: Correct typo in prototype of offsettable_memref_p.
* stmt.c (add_case_node): Add parentheses around assignment used
as truth value.
(case_tree2list): Likewise.
* tree.c (valid_machine_attribute): Wrap variable `decl_attr_list'
in macro VALID_MACHINE_DECL_ATTRIBUTE. Wrap variable
`type_attr_list' in macro VALID_MACHINE_TYPE_ATTRIBUTE.
(merge_attributes): Add explicit braces to avoid ambiguous
`else'.
* unroll.c (copy_loop_body): Wrap variable `cc0_insn' in
macro HAVE_cc0.
* varasm.c: Include stdlib.h.
From-SVN: r18290
* regmove.c: New implementation of regmove pass.
* local-alloc.c (optimize_reg_copy_1, optimize_reg_copy_2): Remove
decls, make them have external linkage. Return a value from
optimize_reg_copy_1.
* reload.h (count_occurrences): Add decl.
* reload1.c (count_occurrences): Delete decl, make it have external
linkage.
* rtl.h (optimize_reg_copy_1, optimize_reg_copy_2): Declare.
Co-Authored-By: Jeffrey A Law <law@cygnus.com>
From-SVN: r17316
* local-alloc.c (contains_replace_regs): New function.
(update_equiv_regs): When adding a REG_EQUIV note for a set of a MEM,
verify that there is no existing REG_EQUIV note, and add a call to
contains_place_regs.
From-SVN: r15041
* version.c: Bump for new snapshot.
* local-alloc.c (update_equiv_regs): All the target to reject
promotion of some REG_EQUAL to REG_EQUIV notes.
* pa.h (DONT_RECORD_EQUIVALENCE): Define.
Fixes some c-torture failures, also improves generated code.
* pa.c (secondary_reload_class): (mem (mem ... )) does not need
secondary reloads.
Fixes 094.fpppp/twldrv.f abort.
* pa.c (hppa_builtin_saveregs): Emit a blockage insn after the
store of the argument registers.
Fixes c-torture failure.
* fold-const.c (multiple_of_p): New function.
(fold): Turn some cases of *_DIV_EXPR into EXACT_DIV_EXPR.
One of the performance patches from the g77 folks.
From-SVN: r14915
* Makefile.in (OBJS): Add alias.o
(alias.o): Add dependencies.
* alias.c: New file.
* sched.c: Remove alias analysis code. It lives in alias.c now.
(reg_last_uses_size): Declare.
(sched_analyze_2): Add new arguments to true_dependence.
(sched_analyze_insn): Use reg_last_uses_size instead of max_reg.
(schedule_block): Initialize reg_last_uses_size.
(schedule_insns): Always call init_alias_analysis.
* calls.c (expand_call): Note calls to malloc, calloc, and realloc;
mark return value from such functions as a pointer and keep track of
them for alias analysis. If a return value from a function is a
pointer, mark it as such.
* combine.c (distribute_notes): Handle REG_NOALIAS.
* cse.c (struct write_data): Delete. No longer needed.
(invalidate): Don't call set_nonvarying_address_components anymore.
Use true_dependence to decide if an entry should be removed from
the hash table.
(invalidate_memory): Remove WRITES argument, simplify appropriately.
Fix all callers.
(note_mem_written): Similarly for WRITE_PTR argument.
(invalidate_from_clobbers): Similarly for W argument.
(invalidate_for_call): Remove memory elements from the hash table.
(refers_to_mem_p, cse_rtx_addr_varies_p): Deleted.
(cse_rtx_varies_p): New function. Derived from old
cse_rtx_addr_varies_p.
(cse_insn): Remove WRITES_MEMORY and INIT variables and all references.
Don't call note_mem_written anymore. Stack pushes invalidate the stack
pointer if PUSH_ROUNDING is defined. No longer need to call
cse_rtx_addr_varies_p to decide if a MEM should be invalidated.
(skipped_writes_memory): Remove variable.
(invalidate_skipped_set): Simplify and wewrite to use invalidate_memory.
(invalidate_skipped_block): Simplify for new alias analysis code.
(cse_set_around_loop): Likewise.
(cse_main): Call init_alias_analysis.
* flags.h (flag_alias_check, flag_argument_noalias): Declare.
* toplev.c (flag_alias_check, flag_argument_noalias): Define.
(f_options): Add new alias checking arguments.
(main): Set flag_alias_check when optimizing.
* local_alloc (validate_equiv_mem_from_store): Add new arguments
to true_dependence.
(memref_referenced_p): Likewise.
* loop.c (NUM_STORES): Increase to 30.
(prescan_loop): Only non-constant calls set unknown_address_altered.
(invariant_p): Add new arguments to true_dependence.
(record_giv): Initialize unrolled and shared fields.
(emit_iv_add_mult): Call record_base_value as needed.
* loop.h (struct induction): Add unrolled and shared fields.
* unroll.c (unroll_loop): Call record_base_value as needed.
(copy_loop_body): Likewise.
(final_biv_value): Likewise.
(final_giv_value): Likewise.
(find_splittable_regs): Likewise. Only create one new pseudo
if we have multiple address GIVs that were combined with the same
dst_reg GIV. Note when a new register is created due to unrolling.
* rtl.c (reg_note_name): Add REG_NOALIAS.
* rtl.h (enum reg_note): Similarly.
(rtx_varies_p, may_trap_p, side_effects_p): Declare.
(volatile_refs_p, volatile_insn_p, remove_note): Likewise.
(note_stores, refers_to_regno_p, reg_overlap_mentioned_p): Likewise.
(true_dependence, read_dependence, anti_dependence): Likewise.
(output_dependence, init_alias_analysis, end_alias_analysis): Likewise.
(mark_user_reg, mark_reg_pointer): Likewise.
jfc's alias analysis code.
From-SVN: r14768
* local-alloc.c (block_alloc): Stop looping over the input
operands once we find an input/output register pair which can
be combined into a single qty.
From-SVN: r8990
(alloc_qty{,_for_scratch}, update_qty_class): Set it.
(local_alloc): Allocate it.
(find_free_reg): If CLASS_CANNOT_CHANGE_SIZE, avoid its registers if
qty_changes_size.
From-SVN: r7865
(requires_inout): Renamed from requires_inout_p and returns number of
alternatives that require a match.
(block_alloc): Use new function and handle case where all alternatives have
some operand that must match operand 0.
From-SVN: r7358
(qty_phys_has{,_copy}_sugg): Deleted.
(qty_sugg_compare{,_1}): New functions.
(local_alloc): Allocate and init new vars instead of deleted ones.
(block_alloc): Update and use new vars.
Order quantities using new functions when allocating quantities with
suggested registers.
(combine_regs, find_free_reg): Use new vars to count number of suggestions.
From-SVN: r7356
(alloc_qty_for_scratch): Can allocate likely-spilled register classes
for SCRATCH.
(block_alloc): Likewise for regs in small register classes.
From-SVN: r4719
(local_alloc): Allocate and initialize them.
(block_alloc): Only allocate a SCRATCH if it can fit in the block we make.
Don't mark regs used in SCRATCH live here; instead, make entry in new tables.
From-SVN: r4713
(qty_first_reg, reg_next_in_qty): Make int, not short.
(local_alloc): Allocate these as arrays of ints.
(block_alloc, qty_compare_1): qty_order is now array of ints.
From-SVN: r4167
(block_alloc): Generalize tying so we can tie any operand with the
output unless some operand must be in the same register as the output,
in which case only try tying that operand.
From-SVN: r3075
(optimize_reg_copy_1): Tighten up code to properly handle the case
when SRC or DEST is a multi-word hard register and only some parts of
the register are set or used. Also, avoid updating register status
for DEST if we can't do the optimization.
From-SVN: r2380
(alloc_qty_for_scratch, block_alloc): Provide alternate code in some cases
when REGISTER_CONSTRAINTS is not defined.
(requires_inout_p): Only used when REGISTER_CONSTRAINTS is defined.
From-SVN: r1899