* cgraph.c (free_edges): New variable.
(NEXT_FREE_EDGE): New macro.
(cgraph_free_edge): New function.
(cgraph_remove_edge): Call cgraph_remove_edge_1.
(cgraph_node_remove_callees): Likewise.
(cgraph_node_remove_callers): Likewise.
(cgraph_create_edge): Reuse edges from the free list. Do not
update uid if doing so.
(cgraph_remove_*_hook): Add free call.
Co-Authored-By: Jan Hubicka <jh@suse.cz>
From-SVN: r140341
gcc/
* ira-color.c (conflict_allocno_vec): Delete.
(update_cost_queue_elem): New structure.
(update_cost_queue): New variable.
(update_cost_queue_tail): Likewise.
(update_cost_queue_elems): Likewise.
(allocno_update_cost_check): Delete.
(initiate_cost_update): Allocate update_cost_queue_elems
instead of allocno_update_cost_check.
(finish_cost_update): Update the free()s accordingly.
(start_update_cost): New function.
(queue_update_cost): Likewise.
(get_next_update_cost): Likewise.
(update_copy_costs_1): Inline into...
(update_copy_costs): ...here. Use a queue instead of recursive calls.
Use cover_class instead of ALLOCNO_COVER_CLASS (another_allocno),
once we've established they are equal. Don't allocate update
costs if there is nothing to add to them.
(update_conflict_hard_regno_costs): Remove ALLOCNO and
DIVISOR arguments. Use a queue instead of recursive calls;
process all the allocnos in the initial queue, rather than
a single allocno.
(assign_hard_reg): Use queue_update_cost instead of
conflict_allocno_vec. Queue coalesced allocnos instead
of calling update_conflict_hard_regno_costs for each one.
Just call update_conflict_hard_regno_costs once for the
entire queue.
(ira_color): Remove conflict_allocno_vec handling.
From-SVN: r140335
2008-09-12 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-opt/37377
* ira-build.c (common_loop_tree_node_dominator): Remove.
(copy_live_ranges_to_removed_store_destinations): New function.
(regno_top_level_allocno_map): Move to top level from ...
(ira_flattening): ... here. Use
copy_live_ranges_to_removed_store_destinations.
* ira-emit.c (generate_edge_moves): Fix a comment.
From-SVN: r140325
2008-09-12 Richard Guenther <rguenther@suse.de>
* tree-vrp.c (simplify_truth_ops_using_ranges): Fix types.
fortran/
* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Use
build_fold_addr_expr to properly mark the argument
addressable.
From-SVN: r140313
* lib/compat.exp, gcc.dg/compat/struct-layout-1.exp,
g++.dg/compat/struct-layout-1.exp: Use .exe extension for compat
test executables.
* gcc.dg/compat/struct-layout-1_generate.c,
g++.dg/compat/struct-layout-1_generate.c: Convert backslash to
slash in srcdir for dg-options string.
From-SVN: r140299
* reload1.c (alter_reg): Undo the BYTE_BIG_ENDIAN correction performed
by assign_stack_local on the IRA path for stack slot sharing as well
as the non-IRA path.
From-SVN: r140295
2008-09-11 Martin Jambor <mjambor@suse.cz>
* ipa-prop.h (struct ipa_param_flags): Removed.
(struct ipa_param_descriptor): New structure.
(struct ipa_node_params): ipcp_lattices, param_decls and
param_flags moved to ipa_param_description.
(ipa_get_ith_param): Renamed to ipa_get_param, changed to access
descriptors. Renamed all users.
(ipa_is_ith_param_modified): Renamed to ipa_is_param_modified,
changed to access descriptors. Renamed all users.
(ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed
to access descriptors. Renamed all users.
* ipa-cp.c (ipcp_init_cloned_node): Call
ipa_initialize_node_params instead of ipa_count_formal_params and
ipa_create_param_decls_array.
(ipcp_analyze_node): Likewise.
(ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access
descriptors. Renamed all users.
(ipcp_initialize_node_lattices): Remove allocation.
* ipa-inline.c (inline_indirect_intraprocedural_analysis): Call
ipa_initialize_node_params instead of ipa_count_formal_params and
ipa_create_param_decls_array.
* ipa-prop.c (ipa_create_param_decls_array): Renamed to
ipa_populate_param_decls, made static, added parameter info,
renamed mt to node, removed allocation, changed to use
descriptors.
(ipa_count_formal_params): Made static, added parameter info,
renamed mt to node.
(ipa_initialize_node_params): New function.
(ipa_check_stmt_modifications): Changed to use descriptors.
(ipa_detect_param_modifications): Removed allocation, changed to
use descriptors.
(ipa_note_param_call): Changed to use descriptors.
(ipa_analyze_params_uses): Removed allocation.
(ipa_free_node_params_substructures): Changed to use descriptors.
(ipa_edge_duplication_hook): Use the unused attribute.
(ipa_node_duplication_hook): Use the unused attribute, changed to
use descriptors, changed to duplicate descriptors.
* ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges,
changed all callers. Call ipa_propagate_indirect_call_infos if doing
indirect inlining. Made static.
(cgraph_decide_inlining): Freeing ipa-prop structures after inlining
functions called only once.
(cgraph_decide_recursive_inlining): Don't call
ipa_propagate_indirect_call_infos, pass new_edges to
cgraph_mark_inline_edge instead.
(cgraph_decide_inlining_of_small_functions): Don't call
ipa_propagate_indirect_call_infos, pass new_edges to
cgraph_mark_inline_edge instead.
(cgraph_decide_inlining): Don't call
ipa_propagate_indirect_call_infos.
* ipa-prop.c: Check that vectors are allocated.
* ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true
iff a new cgraph edges have been created.
(cgraph_decide_inlining): New variable redo_always_inline.
Flattening and always_inlining loop until callgraph stabilizes.
* ipa-prop.c (update_call_notes_after_inlining): Returns boolean,
true iff new cgraph edges have been created.
(propagate_info_to_inlined_callees): Likewise.
(ipa_propagate_indirect_call_infos): Likewise.
From-SVN: r140293
2008-09-11 Paolo Bonzini <bonzini@gnu.org>
* dojump.c (do_jump) [BIT_AND_EXPR]: Move below. Fall through to
TRUTH_AND_EXPR for boolean (1-bit precision) expressions.
(do_jump) [BIT_IOR_EXPR]: Compile as TRUTH_OR_EXPR.
* tree-flow.h (simplify_stmt_using_ranges): Accept a GSI, return a bool.
* tree-ssa-propagate.c (substitute_and_fold): Pass a GSI to
VRP's simplify_stmt_using_ranges. Do simplify_stmt_using_ranges
before finalizing the changes.
* tree-vrp.c (extract_range_from_binary_expr): Add limited support
for BIT_IOR_EXPR.
(simplify_truth_ops_using_ranges): New.
(simplify_div_or_mod_using_ranges, simplify_abs_using_ranges,
simplify_cond_using_ranges, simplify_switch_using_ranges): Return
whether a simplification was made.
(simplify_stmt_using_ranges): Ditto, and accept a GSI. For GS_ASSIGN,
use a switch statement and also call simplify_truth_ops_using_ranges.
testsuite:
2008-09-11 Paolo Bonzini <bonzini@gnu.org>
* gcc.dg/tree-ssa/vrp47.c: New.
* gcc.target/i386/andor-2.c: New.
From-SVN: r140288
* cgraph.c (cgraph_release_function_body): Plug memory leak on
ipa_transforms_to_apply and CFG; ggc_free gimple df and struct function
so we are sure we do not dangle it forever.
* function.c (outer_function_chain, find_function_data): Remove.
(function_context_stack): New.
(push_function_context, pop_function_context): Update.
* function.h (struct function): Remove pointer outer.
(outer_function_chain, find_function_data): Remove.
* stmt.c (force_label_rtx): Remove dead call of find_function_data.
From-SVN: r140285
* tree-ssa.c (redirect_edge_var_map_clear): Fix formatting.
(free_var_map_entry): New function.
(redirect_edge_var_map_destroy): Use it.
From-SVN: r140282
PR middle-end/37448
* tree-inline.c (add_lexical_block): Replace with ...
(prepend_lexical_block): ... prepend at begginig.
(remap_blocks): Use it and reverse later.
(expand_call_inline): Use prepend_lexical_block.
From-SVN: r140281