blob: c4b25fdd2291d08116302e458a5d87bddd1186bd [file] [log] [blame]
2004-05-11 Diego Novillo <>
* tree-cfg.c (delete_tree_cfg): Update call to
2004-05-10 Diego Novillo <>
* tree-ssa-live.h: Fix typo in #include guard.
2004-05-08 Jeff Sturm <>
* tree-eh.c (lower_catch): Lower catch body in context of
2004-05-07 Richard Henderson <>
* tree-eh.c (tree_could_trap_p): Use get_base_address on references.
2004-05-07 Diego Novillo <>
* doc/invoke.texi: Remove documentation for -ftree-copyprop.
Update documentation for -ftree-pre.
2004-05-06 Richard Henderson <>
* stmt.c (parse_output_constraint): Don't warn for read-write
memory operand.
* gimplify.c (gimplify_asm_expr): Force in-out memory operands
to minimal lvalues, then expand to non-matching constraints.
2004-05-06 Zack Weinberg <>
* c-decl.c (finish_function): When !targetm.have_ctors_dtors,
record static constructors and destructors here...
(c_expand_body_1): ... not here.
* c-objc-common.c (start_cdtor, finish_cdtor): Collapse
together into
(build_cdtor): Update to construct a complete tree
for the function. No need to call push_scope, pop_scope, or
clear_last_expr, or set current_function_cannot_inline.
(c_objc_common_finish_file): Just call build_cdtor for static
ctors/dtors, then clear the variables. Do this before calling
cgraph_finalize_compilation_unit and cgraph_optimize.
2004-05-06 Richard Henderson <>
* fold-const.c (fold): Don't build COND_EXPR from comparisons for
boolean and integer result types. Handle X ^ X for TRUTH_XOR_EXPR.
2004-05-05 Richard Henderson <>
* tree-nested.c (create_tmp_var_for): Disallow variable sized types.
(convert_nonlocal_reference): Set val_only false for the base of a
component or array reference.
(convert_local_reference): Likewise.
2004-05-05 Richard Henderson <>
* gimplify.c (create_tmp_var): Disallow variable sized objects.
(gimplify_modify_expr): Don't memcpy for VA_ARG_EXPR.
2004-05-05 Richard Henderson <>
* fold-const.c (operand_equal_p): Replace only_const argument with
flags. Allow pure functions if OEP_PURE_SAME.
(fold, nondestructive_fold_binary_to_constant): Use OEP_ONLY_CONST.
* tree-cfg.c (phi_alternatives_equal): Fix operand_equal_p flag type.
* tree-ssa-dom.c (avail_expr_eq): Use OEP_PURE_SAME.
* tree.h (enum operand_equal_flag): New.
(operand_equal_p): Update argument list.
2004-05-05 Richard Henderson <>
* tree-ssa-operands.c (get_call_flags): Remove.
(get_expr_operands): Use call_expr_flags.
* tree-alias-common.c (call_may_clobber): Likewise.
(call_may_return): Likewise.
2004-04-05 Andrew Pinski <>
PR c/15062
* c-typeck.c (build_asm_expr): Mark the output operands
to an asm addressable, if necessary.
2004-05-05 Steven Bosscher <>
* (GTFILES): Remove duplicate basic-block.h.
2004-05-04 Richard Henderson <>
* gimplify.c (build_addr_expr_with_type): Set TREE_ADDRESSABLE.
(gimplify_modify_expr): Turn variable-width assignment into memcpy.
* tree-nested.c (convert_local_reference): Set val_only after default.
2004-05-04 Diego Novillo <>
* tree-cfg.c (tree_cfg2vcg): Rename from tree_cfg2dot. Update all
Emit flowgraph using VCG syntax.
* tree-dump.c (dump_files): Rename -fdump-tree-dot to
* tree.h (enum tree_dump_index): Rename TDI_dot to TDI_vcg.
* doc/invoke.texi: Update documentation to describe
2004-05-03 Andrew Pinski <>
* objc/objc-act.c (build_objc_string_object):
Add the fields to the purpose of the list for
the constructor.
2004-05-03 Richard Henderson <>
* c-simplify.c (gimplify_if_stmt): Loop for else-if.
2004-05-03 Andrew Pinski <>
PR optimization/15245
* tree-ssa-phiopt.c (conditional_replacement): Use fold_convert
instead of convert.
2004-05-03 Diego Novillo <>
* gimplify.c (gimplify_compound_lval): Gimplify non-constant
array indices into a temporary variable.
2004-04-30 Richard Henderson <>
* builtins.c (validate_arglist): Don't reject side effects.
(simplify_builtin_strcpy): Do reject side effects in length.
2004-04-30 Jeff Law <>
* tree-outof-ssa.c (eliminate_build): Move code which verifies
that all of a PHI's arguments do not have a partition if the
result does not have a partition from here to...
(rewrite_trees): Here.
2004-04-24 Zdenek Dvorak <>
* tree-cfg.c (factored_computed_goto_label,
factored_computed_goto): Removed.
(disband_implicit_edges): Unfactor computed gotos without
using them.
2004-04-23 Per Bothner <>
* expr.c (expr_wfl_stack): Remove unused global.
Pre-patches for future source_location / location_t merge.
* tree.h (EXPR_LOCATION, EXPR_HAS_LOCATION): New macros.
* expr.c (expand_expr_real, expand_expr_real_1): Use new macros.
* gimple-low.c (lower_stmt): Likewise.
* gimplify.c (annotate_all_with_locus): Likewise.
* print-tree.c (print_node): Likewise.
* tree-inline.c (expand_call_inline): Likewise.
* tree-pretty-print.c (tree-pretty-print.c): Likewise.
* tree-sra.c (scalarize_structure_assignment, emit_scalar_copies,
scalarize_call_expr): Likewise.
* tree-ssa-pre.c (code_motion): Likewise.
2004-04-23 Andrew Pinski <>
* c-simplify.c (gimplify_decl_stmt) [TYPE_DECL]:
Do not check the type.
2004-04-22 Jeff Law <>
* tree-into-ssa.c (rewrite_initialize_block_local_data): Mark all
arguments as potentially unused. Do not bother to VARRAY_CLEAR
the block_defs. Instead abort if we are presented with a block
which has a nonempty block_defs. Wrap entire thing inside
* tree-ssa-dom.c (dom_opt_initialize_block_local_data): Similarly
* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Do not mark
arguments to bypassed PHIs as needing to be rewritten.
2004-04-21 Richard Henderson <>
PR middle-end/14978
* tree-nested.c (convert_nonlocal_reference): Set val_only when
processing any otherwise unhandled expression.
2004-04-21 Jeff Law <>
* tree-ssa-copy.c (cprop_operand): Break out of cprop_into_stmt.
(cprop_into_stmt): Use cprop_operand. Rearrange slightly to avoid
switch statement inside a loop.
* tree-flow.h (var_ann_d): Add "current_def" field.
(register_new_def): Lose last argument (currdefs table).
* tree-into-ssa.c (currdefs): Remove.
(rewrite_into_ssa): Initialize current_def field on each variable's
annotation. Remove initialization/clearing of currdefs.
(set_value_for, get_value_for): Kill.
(rewrite_initialize_block): Update call to register_new_def.
(rewrite_stmt): Similarly.
(rewrite_finalize_block): Get/set a _DECL node's current
definition from its annotation.
(get_reaching_def): Similarly.
(register_new_def): Similarly. Lose last argument.
* tree-ssa-dom.c (currdefs): Remove.
(get_value_for, set_value_for): Simplify.
(tree_ssa_dominator_optimize): Initialize current_def on each
variable's annotation. Remove initialization/clearing of currdefs.
(thread_across_edge): Lose unnecessary argument to register_new_def.
(record_equivalences_from_phis): Likewise.
(register_definitions_for_stmt): Likewise.
(restore_currdefs_to_original_value): Get/set a _DECL node's current
definition from its annotation. Lose unnecessary "table" argument.
(dom_opt_finalize_block): Corresponding changes.
* tree-dfa.c (free_df_for_stmt): Release memory back to the GC
system immediately.
2004-04-21 Ben Elliston <>
PR middle-end/14730
* expr.c (expand_expr_real_1) <SWITCH_EXPR>: Discard out of bounds
case label values and ranges. Saturate case range values that
exceed the minimum or maximum permitted value for the controlling
expression type to TYPE_MIN_VALUE or TYPE_MAX_VALUE.
2004-04-20 Jeff Law <>
* tree-into-ssa.c (register_new_def): Avoid pushing useless
information onto the block local definition stack.
* tree-into-ssa.c (register_new_def): If there is no current
reaching definition for SSA_NAME_VAR (DEF), then just push
SSA_NAME_VAR (DEF) onto the stack.
(rewrite_finalize_block): If we pop a _DECL node from the stack,
then the _DECL node has no current reaching definition.
* tree-ssa-dom.c (restore_currdefs_to_original_value): Similarly.
2004-04-19 Jeff Law <>
* tree-ssa-dom.c: Reinstate all changes from 2004-04-12.
(lookup_avail_expr): Do not access a hash table object after
it has been freed.
2004-04-19 Daniel Berlin <>
* doc/passes.texi: Add blurb about PRE.
2004-04-19 Andrew Pinski <>
* tree-ssa-phiopt.c (conditional_replacement):
Catch some more non-gimple.
2004-04-19 Jan Hubicka <>
* predict.c (combine_predictions_for_bb): Fix pasto.
2004-04-18 Jan Hubicka <>
* tree-inline.c (estimate_num_insn_1): Deal properly with
builtin_constant_p and builtin_expect.
2004-04-17 Andrew MacLeod <>
* doc/invoke.texi (tree-ter, tree-lrs): Document options.
2004-04-17 Paul Brook <>
* configure: Regenerate.
2004-04-16 Andrew MacLeod <>
* common.opt (ftree-lrs): New common option.
* flags.h (flag_tree_live_range_split): New flag.
* opts.c (decode_options): Turn on LRS by default.
(common_handle_option): Set LRS flag to specified value.
* toplev.c (flag_tree_live_range_split): Initialize.
(lang_independent_options f_): Add tree-lrs.
* tree-outof-ssa.c (rewrite_out_of_ssa): Use LRS flag.
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't coalesce
variables if one is a hardware register. Coalesce inlined user vars.
(rename_ssa_copies): Scan blocks first, then PHI nodes.
2004-04-15 Andrew Pinski <>
* builtins.c (fold_builtin_isascii): Do not return non-gimple
code when we are in gimple form.
(fold_builtin_isdigit): Do not return non-gimple
code when we are in gimple form.
* c-simplify.c (gimplify_decl_stmt): Handle TYPE_DECL.
2004-04-14 Paul Brook <>
* (GMPLIBS, GMPINC): Don't set.
* Remove checks for GMP.
* configure: Regenerate.
2004-04-13 Diego Novillo <>
* fold-const.c, tree-ssa-ccp.c, tree-ssa-dom.c,
tree-ssa.c, tree.c: Replace all uses of TREE_UNSIGNED with
* c-semantics.c (build_stmt): Don't check type nodes for
side effects.
2004-04-13 Jeff Law <>
* tree-ssa-dom.c: Revert all changes from 2004-04-12.
2004-04-12 Jeff Law <>
* tree-ssa-dom.c (struct expr_hash_elt): Add new field for hash value.
(initialize_hash_element): New LHS argument. Callers changed.
Initialize the hash value field.
(remove_local_expressions_from_table): Use htab_remove_elt_with_hash.
(update_rhs_and_lookup_avail_expr): Similary.
(lookup_avail_expr): Use htab_find_slot_with_hash. Simplify slightly
and pass LHS to initialize_hash_element.
(record_cond): Also use htab_find_slot_with_hash. Initialize the
hash table entry with initialize_hash_element.
(avail_expr_eq): Use the saved hash value rather than calling into
the hash functions again.
* tree-ssa-dom.c (tree_ssa_dominator_optimize): Slightly rearrange
code to clear tables before each iteration to be clearer.
* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Use
2004-04-12 Diego Novillo <>
* flags.h (flag_tree_loop): Remove. Update all users.
* opts.c (common_handle_option) <OPT_ftree_loop_optimize>: Remove.
* toplev.c (f_options): Remove -ftree-loop-optimize.
* tree-optimize.c (init_tree_optimization_passes): Don't
schedule pass_loop.
* tree-ssa-loop.c (tree_ssa_loop_opt): Remove.
(gate_loop): Remove.
* doc/invoke.texi: Remove documentation for -ftree-loop-optimize.
2004-04-12 Diego Novillo <>
* c-lang.c (LANG_HOOKS_RTL_EXPAND_STMT): Remove.
* c-semantics.c (expand_stmt_toplev): Remove.
* langhooks-def.h (LANG_HOOKS_RTL_EXPAND_INITIALIZER): Remove.
* langhooks.h (struct lang_hooks_for_rtl_expansion): Remove.
(struct lang_hooks): Update.
* tree-optimize.c (tree_rest_of_compilation): Don't call
lang_hooks.rtl_expand.start nor lang_hooks.rtl_expand.end.
Call expand_expr_stmt_value instead of
* objc/objc-lang.c (LANG_HOOKS_RTL_EXPAND_STMT): Remove.
2004-04-12 Richard Henderson <>
* c-common.c (c_do_switch_warnings): Use EXPR_LOCUS instead
(c_walk_subtrees): Likewise.
(c_estimate_num_insns_1): Remove FILE_STMT.
* c-common.def (FILE_STMT): Remove.
* c-common.h (FILE_STMT_FILENAME_NODE): Remove.
(c_common_stmt_codes): Remove FILE_STMT.
* c-dump.c (dump_stmt): Use EXPR_LOCUS instead of STMT_LINENO.
* (lineno_stmt, lineno_label): Likewise.
* c-pretty-print.c (pp_c_statement): Remove FILE_STMT.
* c-semantics.c (add_stmt): Don't emit FILE_STMT. Do set
EXPR_LOCUS if not yet set.
(finish_stmt_tree): Don't set line for end of function.
(build_stmt): Set EXPR_LOCUS instead of STMT_LINENO.
(prep_stmt): Use EXPR_LOCUS instead of STMT_LINENO.
* c-simplify.c (c_gimplify_stmt): Remove FILE_STMT.
(gimplify_block): Save and restore entire locus.
(stmt_expr_last_stmt): Use EXPR_LOCUS instead of STMT_LINENO.
* doc/c-tree.texi (FILE_STMT, FILE_STMT_FILENAME, STMT_LINENO): Remove.
2004-04-12 Jeff Law <>
* tree-ssa-dom.c (true_exprs, false_exprs): Kill.
(struct expr_hash_elt): New structure for the expression hash table.
(struct dom_walk_block_data): Kill block local true_exprs and
(get_eq_expr_value): One less local varray argument. Fix prototype.
Use record_cond rather than record_cond_is_{true,false}.
(true_false_expr_hash, true_false_expr_eq): Kill.
(record_cond_is_true, record_cond_is_false): Collapse into ...
(record_cond): New function.
(tree_ssa_dominator_optimize): Kill references to true_exprs and
false_exprs. Use "free" as the free function for the avail_exprs
hash table.
(dom_opt_initialize_block_local_data): No longer initialize
block local true/false expressions.
(initialize_hash_element): New function.
(remove_local_expressions_from_table): Use initialize_hash_element.
(update_rhs_and_lookup_avail_expr): Similarly.
(dom_opt_finalize_block): Record true/false expressions into the
main avail_expr hash table. Unwind main hash table appropriately.
Use record_cond rather than record_cond_is_{true,false}.
(record_equivalences_from_incoming_edge): Pass block local avail_exprs
varray instead of block local true/false varrays to get_eq_expr_value.
(dump_dominator_optimization_stats): Update to reflect that the
true/false expression hash tables are gone.
(lookup_avail_expr): Simplify slightly now that we only have one
expression hash table.
(avail_expr_hash, avail_expr_eq): Generalize slightly to handle new
hash table entry structure and having true/false expression information
in the available expression hash table.
2004-04-09 Jeff Law <>
* tree-ssa_dom.c (register_definitions_for_stmt): Accept a statement
annotation rather than the statement itself. Callers changed.
Use [V]DEF_OPS rather than STMT_[V]DEF_OPS.
* tree-ssa-operands.c (get_stmt_operands): Slightly reorganize to
avoid unnecessary calls to stmt_ann.
* tree-ssa-pre.c (expr_phi_insertion): Get the statement's annotation
and use [V]USE_OPS rather than STMT_[V]USE_OPS.
(same_e_version_phi_result): Similarly
(process_left_occs_and_kills): Similarly for [V]DEF_OPS and
* tree-ssa.c (replace_immediate_uses): Similarly.
(verify_ssa): Similarly. Also verify that VDEF_OPs uses are dominated
by their sets.
* tree-into-ssa.c (insert_phi_nodes_for): Use passed in worklist
varray instead of allocated one for every variable we rewrite into
SSA form.
(insert_phi_nodes_1): Pass worklist varray from caller to
(insert_phi_nodes): Allocate a worklist for insert_phi_nodes_for
and pass it to insert_phi_nodes_1.
2004-04-08 Jeff Law <>
* tree-ssa-dom.c (nonzero_vars): Turn it into a bitmap.
(tree_ssa_dominator_optimize): Update initialization, clearing and
freeing of nonzero_vars.
(restore_nonzero_vars_to_original_value): New function.
(dom_opt_finalize_block): Use it.
(record_var_is_nonzero): Only record the variable into the block
local nonzero vars array if it did not already have a nonzero property.
(lookup_avail_expr): Lookup the nonzero property of an SSA_NAME with
a bitmap test.
* fold-const.c (fold): Remove attempt to share code which
simplifies tests against the highest/lowest value of a
range between the main folder and the nondestructive folder.
2004-04-08 Brian Booth <>
Diego Novillo <>
* tree-into-ssa.c (invalidate_name_tags): New function.
Mark aliases of invalidated name tags for renaming.
(rewrite_into_ssa): Call invalidate_name_tags.
2004-04-07 Diego Novillo <>
* gimplify.c (gimplify_call_expr): Remove argument POST_P.
Update all callers.
Don't use POST_P when gimplifying the call expression.
2004-04-07 Diego Novillo <>
* doc/tree-ssa.texi: Add documentation for the dominator
2004-04-07 Andrew MacLeod <>
* tree-outof-ssa.c: Update comments and reformat for legibility.
* tree-ssa-copyrename.c: Update comments and reformat for legibility.
* tree-ssa-live.c: Update comments and reformat for legibility.
* tree-ssa-live.h: Update comments and reformat for legibility.
2004-04-07 Diego Novillo <>
* gimplify.c (gimplify_call_expr): Don't use POST_P when
gimplifying CALL_EXPR arguments.
2004-04-06 Diego Novillo <>
* tree-dfa.c: Update comments and reformat for legibility.
(find_vars_r): Remove special casing of MODIFY_EXPR and
simplify logic.
(compute_reached_uses, compute_reaching_defs, remove_decl,
find_decl_location): Remove.
discover_nonconstant_array_refs): Move ...
* tree-outof-ssa.c: ... here.
2004-04-05 Richard Henderson <>
* tree-simple.c (is_gimple_min_invariant): Disallow &a+i.
* tree-ssa-ccp.c (maybe_fold_stmt_addition): Rename from
maybe_fold_stmt_plus. Handle MINUS_EXPR.
(fold_stmt_r): Pass MINUS_EXPR to it.
2004-04-05 Ben Elliston <>
* (OBJS-common): Remove tree-browser.o.
(cc1): Depend on @TREEBROWSER@ and include in list of objects.
* Add --enable-tree-browser option.
* configure: Rebuild.
2004-04-05 Andrew Pinski <>
* tree-ssa-ccp.c (fold_stmt_r): Fix whitespace formatting.
(set_rhs): Likewise.
2004-04-03 Paolo Bonzini <>
Diego Novillo <>
* tree-alias-common.c (find_func_aliases): Support
assigning to BIT_FIELD_REFs.
* tree-cfg.c (verify_expr): Don't allow assign to
a register with BIT_FIELD_REF.
* tree-dfa.c (get_virtual_var): Add consistency check on
the shape of expected VARs.
(discover_nonconstant_array_refs_r): Go through BIT_FIELD_REFs.
* tree-simple.c: Document that BIT_FIELD_REFs are valid lvalues.
* tree-ssa.c (set_is_used): Go through BIT_FIELD_REFs.
* tree-ssa-operands.c (get_expr_operands): Mark VA_ARG_EXPR
nodes as making volatile references.
2004-04-02 Fariborz Jahanian <>
* c-convert.c (convert): Make convert work when converting
to compatible types across translation unit.
2004-04-02 Andrew Pinski <>
* (stage2_build): Remove support for
rebuilding libbanshee.
* Remove support for rebuilding
* config.gcc (powerpc-*-darwin*): Do not rebuild
2004-04-01 Kazu Hirata <>
* tree-ssa-forwprop.c: Add a comment about forward propagation
2004-04-01 Diego Novillo <>
* tree-optimize.c (tree_rest_of_compilation): Fix typo in
setting of in_gimple_form.
2004-04-01 Jeff Law <>
* fold-const.c (fold_relational_hi_lo): Do not return non-gimple
code when we are in gimple form.
* tree-optimize.c (tree_rest_of_compilation): Note when we are in
gimple form.
* tree-ssa-ccp.c (ccp_fold): Tighten tests on return value from
* tree.h (in_gimple_form): Declare.
* tree-ssa.c (ssa_remove_edge): Correct looping structure.
(ssa_redirect_edge): Similarly
2004-03-30 Brian Booth <>
* tree-pretty-print.c (dump_vops): Add flags argument and
propagate it to dump_generic_node calls.
(dump_generic_node): Update dump_vops call.
2004-03-29 Diego Novillo <>
* Emit confirmation messages for libbanshee.
* configure: Regenerate.
2004-03-29 Jan Hubicka <>
PR 14756
* cgraphunit.c (cgraph_decide_inlining): Rewrite handling of
always_inline functions.
2004-03-28 Jan Hubicka <>
* tree-inline.c (expand_call_inline): Remove fixme introduced by
nested function patch.
2004-03-26 Diego Novillo <>
* tree-ssa-operands.c (get_stmt_operands): Remove always-true
* tree-ssa-alias.c (maybe_create_global_var): Create
.GLOBAL_VAR if there are no call-clobbered variables.
* tree-ssa-operands.c (get_stmt_operands): Add call-clobbering
VDEFs for asm ("":::"memory") if there are call-clobbered
variables or if .GLOBAL_VAR has been created.
2004-03-26 Diego Novillo <>
* passes.c (rest_of_compilation): Re-enable .01.rtl
2004-03-25 Diego Novillo <>
* tree-pretty-print.c (dump_generic_node) <WITH_RECORD_EXPR>: Remove.
* tree-inline.c (estimate_num_insns_1) <WITH_RECORD_EXPR>: Remove.
* fold-const.c (fold_relational_hi_lo): Change type of argument
'type_p' to const tree and rename it to 'type'. Update
all callers.
2004-03-25 Diego Novillo <>
* (C_AND_OBJC_OBJS): Remove c-call-graph.o
(c-call-graph.o): Remove.
* c-call-graph.c: Remove.
* c-tree.h (print_call_graph): Remove.
(debug_call_graph): Remove.
* tree-cfg.c: Update/add comments everywhere.
(pre_insert_on_edge): Rename from bsi_insert_on_edge_immediate.
* tree-flow.h (build_tree_cfg): Make static.
(tree_cfg2dot): Likewise.
(verify_stmt): Likewise.
* tree-ssa-pre.c (insert_one_operand): Call pre_insert_on_edge.
2004-03-25 Diego Novillo <>
* tree-ssa-alias.c (struct alias_info): Change type of field
'num_references' to varray_type. Update all users.
2004-03-24 Jeff Law <>
* c-mudflap (mflang_flush_calls): Use push_scope/pop_scope instead
of pushlevel and poplevel.
2004-03-23 Richard Henderson <>
PR middle-end/14694
* c-common.c (handle_alias_attribute): Mark aliased variables
2004-03-23 Jeff Law <>
* tree-into-ssa.c (register_new_def): Lose unnecessary VAR argument,
instead derive VAR from DEF argument.
(rewrite_initialize_block, rewrite_stmt, rewrite_operand): Corresponding
* tree-ssa-dom.c (register_definitions_for_stmt): Corresponding changes.
(record_equivalences_from_phis): Likewise.
(restore_currdefs_to_original_value): New, extracted from ...
(dom_opt_finalize_block): Use restore_currdefs_to_original_value.
Restore currdefs after threading across a true edge.
(thread_across_edge): Register new defintions when we walk through
a PHI node or real statement.
* tree-flow.h (register_new_def): Updated.
2004-03-23 Zdenek Dvorak <>
* tree-ssa-dce.c (find_obviously_necessary_stmts,
perform_tree_ssa_dce): Do not remove loops.
2004-03-19 Diego Novillo <>
PR optimization/14643
* tree-ssa-alias.c (group_aliases_into): Don't add a variable
to its own may-alias set.
(create_alias_map_for): New.
(setup_pointers_and_addressables): Call it.
Fix allocation of AI->ADDRESSABLE_VARS and AI->POINTERS.
If there are no addressable variables and more than one
dereferenced pointers, add type tags to the ADDRESSABLE_VARS
(get_tmt_for): Add comment about using alias set equality when
checking for existing tags.
2004-03-19 Kazu Hirata <>
* fold-const.c (fold_relational_const): Remove dead code.
2004-03-19 Dale Johannesen <>
* tree-ssa-dse.c (dse_optimize_stmt): Redirect uses feeding into
a deleted store correctly.
2004-03-19 Jeff Law <>
* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Fix typo.
Eliminate unnecessary test of VAL.
* tree-dfa.c (find_hidden_use_vars): Also look inside the
PENDING_SIZES list for hidden uses.
* tree-optimize.c (tree_rest_of_compilation): Expand used variables
before setting up parameters.
* tree-ssa-copyrename.c (rename_ssa_copies): Do nothing for copies
where the LHS has a hidden use.
2004-03-18 Diego Novillo <>
* (TREE_FLOW_H): Reformat.
(OBJS-common): Add tree-into-ssa.o and tree-outof-ssa.o.
(tree-ssa.o): Remove dependency on domwalk.h and tree-ssa-live.h
(tree-into-ssa.o): New.
(tree-outof-ssa.o): New.
(GTFILES): Remove tree-ssa.c.
(gt-tree-ssa.h): Remove.
* tree-into-ssa.c: New file.
Move all the functions used to rename into SSA from tree-ssa.c.
Update/add comments.
Remove unused variables and structures.
Don't use GGC for memory allocation.
* tree-outof-ssa.c: New file.
Move all the functions used to rename out of SSA from
Update/add comments.
* tree-ssa-alias.c (compute_points_to_and_addr_escape): Add
bibliographic reference.
2004-03-18 Jeff Law <>
* (tree-tailcall.o): Depend on langhooks.h.
* tree-tailcall.c: Include langhooks.h.
(find_tail_calls): Use types_compatible_p langhook instead of
equality test of TYPE_MAIN_VARIANT.
* tree-nested.c (get_chain_decl): Mark the chain decl with
2004-03-18 Devang Patel <>
* tree-ssa-live.c (new_tree_live_info): Set num_blocks to
last_basic_block instead of n_basic_blocks.
(calculate_live_on_entry): Use last_basic_block instead of
(calculate_live_on_exit): Same.
2004-03-17 Jeff Law <>
* tree-tailcall.c (find_tail_calls): Tighten test for tail recursion.
2004-03-17 Diego Novillo <>
PR optimization/14511
* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Do not
ignore read-only variables.
(may_alias_p): Fix pointer-to-var calculation when 'var' is an
2004-03-17 Jan Hubicka <>
* tree-ssa.c (rewrite_into_ssa, compute_global_livein): Fix.
2004-03-17 Paolo Bonzini <>
* builtins.c (expand_builtin_constant_p,
purge_builtin_constant_p): Remove.
(expand_builtin): Expand __builtin_constant_p to zero.
* function.c (struct function): Remove calls_constant_p.
(current_function_calls_constant_p): Remove.
* passes.c (rest_of_handle_gcse): Do not run
* rtl.def (CONSTANT_P_RTX): Die die die.
* cse.c (fold_rtx): Do not handle CONSTANT_P_RTX.
* expr.c (emit_move_insn): Likewise.
* gcse.c (want_to_gcse_p, gcse_constant_p): Likewise.
* genrecog.c (validate_pattern): Likewise.
* recog.c (immediate_operand): Likewise.
* rtl.h (CONSTANT_P): Likewise.
* simplify-rtx.c (simplify_rtx): Likewise.
* config/alpha/alpha.c (input_operand): Likewise.
* config/arm/arm.c (THUMB_LEGITIMATE_CONSTANT_P): Likewise.
* config/c4x/c4x.c (const_operand): Likewise.
* config/cris/cris.c (cris_gotless_symbol,
cris_got_symbol): Likewise.
* config/frv/frv.h (LEGITIMATE_PIC_OPERAND_P): Likewise.
* config/ia64/ia64.c (gr_reg_or_5bit_operand,
gr_reg_or_6bit_operand, gr_reg_or_8bit_operand,
gr_reg_or_14bit_operand, gr_reg_or_22bit_operand,
shift_count_operand, shift_32bit_count_operand): Likewise.
* config/m32r/m32r.c (move_src_operand): Likewise.
* config/mips/mips.c (mips_const_insns): Likewise.
* config/mmix/mmix.c (mmix_constant_address_p): Likewise.
* config/pa/pa.c (move_src_operand): Likewise.
* config/rs6000/rs6000.c (input_operand): Likewise.
* config/sparc/sparc.c (input_operand): Likewise.
* config/v850/v850.c (movsi_source_operand): Likewise.
* config/xtensa/xtensa.c (move_operand,
xtensa_emit_move_sequence): Likewise.
* config/ia64/ia64.h (PREDICATE_CODES): Do not mention CONSTANT_P_RTX.
* config/pa/pa.h (PREDICATE_CODES): Likewise.
2004-03-16 Diego Novillo <>
* tree-dump.c (struct dump_option_value_info): Add TDF_UID.
* tree.h (TDF_UID): Define.
* doc/invoke.texi: Document -ftree-dump-...-uid.
* tree-pretty-print.c (debug_generic_expr): Add TDF_UID.
(debug_generic_stmt): Likewise.
(dump_decl_name): New function.
(dump_generic_node): Call it.
(print_declaration): Add new argument 'flags'. Update all users.
(print_struct_decl): Likewise.
* tree-alias-ander.c, tree-cfg.c, tree-dfa.c, tree-mudflap.c,
tree-nrv.c, tree-sra.c, tree-ssa-alias.c, tree-ssa-ccp.c,
tree-ssa-copy.c, tree-ssa-dom.c, tree-ssa-dse.c,
tree-ssa-forwprop.c, tree-ssa-operands.c, tree-ssa-pre.c,
tree-ssa.c, tree-tail-call.c: Call print_generic_* with
2004-03-16 Dale Johannesen <>
* (tree-ssa-phiopt.o): add langhooks.h dependency.
(tree-nrv.o): Ditto.
(tree-ssa-copy.o): Ditto.
(tree-ssa-dom.o): Ditto.
(tree-ssa-ccp.o): Ditto.
* c-common.c: Add #include hashtab.h.
(c_type_hash): New.
(c_common_get_alias_set): Handle multiple type nodes referring
to "the same" type, currently for C90 only.
* c-decl.c (current_file_decl): Move to toplev.c.
* c-lang.c (LANG_HOOKS_TYPES_COMPATIBLE_P): Define to
(c_types_compatible_p): New.
* c-tree.h (c_types_compatible_p): New declaration.
* c-typeck.c (tagged_types_tu_compatible_p): Allow for
compiler-generated TYPE_DECLs without a DECL_ORIGINAL_TYPE.
* gimplify.c (canonicalize_addr_expr): Use types_compatible_p langhook.
(cpt_same_type): Ditto.
* langhooks-def.h (lhd_types_compatible_p): New declaration.
* langhooks.c (lhd_types_compatible_p): New.
* langhooks.h (struct lang_hooks): Add types_compatible_p.
* stmt.c (tail_recursion_args): Use types_compatible_p langhook.
* toplev.c (current_file_decl): New, moved from c-decl.c.
* tree-nrv.c: Include langhooks.h.
(tree_nrv): Use types_compatible_p langhook.
* tree-ssa-ccp.c: Include langhooks.h.
(maybe_fold_offset_to_array_ref): Use types_compatible_p langhook.
(maybe_fold_offset_to_component_ref): Ditto (2 places).
(fold_stmt_r): Make sure rhs of COMPONENT_REF is in lhs type.
* tree-ssa-copy.c: Include langhooks.h.
(cprop_into_stmt): Use types_compatible_p langhook.
* tree-ssa-dom.c: Include langhooks.h.
(avail_expr_p): Use types_compatible_p langhook.
* tree-ssa-phiopt.c: Include langhooks.h.
(conditional_replacement): Use types_compatible_p langhook.
* tree-ssa.c (tree_ssa_useless_type_conversion_1): Use
types_compatible_p langhook.
* tree.h (current_file_decl): New declaration.
2004-03-16 Dale Johannesen <>
PR optimization/14498
* gimplify.c (copy_if_shared_r): Mark VA_ARGS_EXPRs as volatile.
(mark_decls_volatile_r): Moved higher in file (unchanged).
2004-03-16 Daniel Berlin <>
PR optimization/14562
* tree-ssa-pre.c (generate_expr_as_of_bb): Don't use names_match_p.
(generate_vops_as_of_bb): Ditto.
2004-03-12 Diego Novillo <>
PR optimization/14553
* tree-ssa.c (replace_immediate_uses): Call propagate_value to
update operands.
2004-03-12 Diego Novillo <>
* tree-alias-common.c (create_alias_vars): Add #if
2004-03-11 Diego Novillo <>
* tree-dfa.c (struct walk_state): Remove fields 'is_store' and
'is_indirect_ref'. Update all users.
* tree-flow.h (struct var_ann_d): Remove fields 'is_stored',
'is_dereferenced_store' and 'is_dereferenced_load'. Update
all users.
* tree-simple.c (get_base_address): Handle BIT_FIELD_REF.
* tree-ssa-alias.c (struct alias_info): Add fields
'written_vars', 'dereferenced_ptrs_store' and
(init_alias_info): Initialize them.
(delete_alias_info): Free them.
(find_ptr_dereference): New.
(ptr_is_dereferenced_by): Call it.
Add new argument 'is_store'. Set to true if the
expression is an indirect store operation.
(compute_points_to_and_addr_escape): If the statement
makes a store, load or write operation, update the
corresponding bitmap.
(compute_flow_insensitive_aliasing): Test the
'written_vars' bitmap to determine if alias sets should
be computed.
(setup_pointers_and_addressables): Always assume that
volatile pointers and hidden pointers have been used in a
memory store operation.
* tree-ssa-operands.c (add_stmt_operand): Do add an
operand for may-aliased variables before computing
2004-03-11 Zdenek Dvorak <>
* tree-optimize.c (init_tree_optimization_passes): Move
pass_tail_recursion and pass_ch after pass_may_alias.
* tree-ssa-loop.c (mark_defs_for_rewrite): Mark type tags
for rewriting.
* tree-ssa.c (mark_def_sites): Process the operand of a
VDEF before the result.
2004-03-11 Richard Henderson <>
PR 14204
* tree-ssa.c (warn_uninit): Don't warn for hard register variables.
2004-03-10 Richard Henderson <>
* tree-simple.c (get_base_var, get_base_decl): Remove.
* tree-simple.h: Likewise.
* tree-dfa.c (discover_nonconstant_array_refs_r): Use get_base_address.
* tree-ssa-alias.c (ptr_is_dereferenced_by): Likewise.
(add_pointed_to_var, is_escape_site): Likewise.
* tree-ssa-ccp.c (get_default_value): Expect only SSA_NAME and DECLs.
* tree-ssa-operands.c (add_stmt_operand): Likewise.
(note_addressable): Use get_base_address.
* tree-ssa-dce.c (need_to_preserve_store): Expect only SSA_NAME.
* tree-ssa.c (set_is_used): Inline get_base_decl.
2004-03-10 Richard Henderson <>
* tree-nested.c (convert_nonlocal_reference): Clear TREE_INVARIANT
on modified ADDR_EXPRs.
2004-03-10 Andrew Pinski <
PR c/14475
* c-decl.c (check_bitfield_type_and_width): Check for null
lang_type_specific when check the precision of an enum.
2004-03-09 Andrew Pinski <>
* (tree-ssa-forwprop.o): Fix the dependences.
2004-03-09 Jeff Law <>
* tree-flow-inline.h (may_propagate_copy): Do not allow propagation of
a constant for a virtual operand.
2004-03-08 Richard Henderson <>
* calls.c (initialize_argument_information): Add
parameter may_tail_call. Set to false for invisible
pass-by-reference arguments that require stack
Update all users.
2004-03-07 Jeff Law <>
* tree-ssa-dom.c: (get_eq_expr_value): Fix typo when comparing a
boolean against a constant.
* tree-ssa-forwprop.c (record_single_argument_cond_exprs): Do not
record the same SSA_NAME more than once. Only record the SSA_NAME
tested, not the COND_EXPR.
(substitute_single_use_vars): Substitute booleans which are
set from a TRUTH_NOT_EXPR even if they have more than one use site.
2004-03-05 Jeff Law <>
* tree-ssa-dce.c (remove_dead_stmt): Clear PENDING_STMT after
redirect_edge_and_branch call.
* tree-ssa-forwprop.c (record_single_argument_cond_exprs): Also
record COND_EXPRs with single use vars defined by SSA_NAME + CONST
(substitute_single_use_vars): Corresponding changes to rewrite
COND_EXPRs using single use vars defined by SSA_NAME + CONST
2004-03-05 Ulrich Weigand <>
* config/s390/s390.c (s390_expand_movstr): Do not use
expand_exit_loop_top_cond, manually copy loop header.
(s390_expand_clrstr): Likewise.
(s390_expand_cmpmem): Likewise.
2004-03-04 Diego Novillo <>
* tree-ssa-alias.c (compute_flow_sensitive_aliasing): If
a name tag has been marked call-clobbered, also mark the
corresponding type tag.
2004-03-04 Zdenek Dvorak <>
* tree-ssa-loop-live.c (coalesce_tpa_members): Update the root
variable of the partition.
2004-03-04 Jeff Law <>
* tree-ssa-dce.c (remove_dead_stmt): Redirect an existing edge
rather than deleting the old ones and creating a new one when
removing a dead conditional.
* fold-const.c (fold): When rebuilding the expression after a
call to fold_relational_hi_lo, make sure to convert the type of
the second argument to the type of the first.
2004-03-04 Diego Novillo <>
* cgraphunit.c (cgraph_optimize): Do not do memory release
check if there have been errors.
2004-03-03 Jeff Law <>
* tree-ssa-phiopt.c (conditional_replacement): Clear EDGE_TRUE_VALUE
and EDGE_FALSE_VALUE on the remaining edge after eliminating a PHI.
2004-03-03 Andrew MacLeod <>
* tree-ssa-copyrename.c (gate_copyrename): Really check it in.
* tree-ssa.c (create_temp): Use DECL_ARTIFICIAL from original decl.
2004-03-02 Zdenek Dvorak <>
* tree-tailcall.c (struct tailcall): Remove return_block and return_bsi
fields, add m and a fields.
(m_acc, a_acc): New.
(find_tail_calls): Find tail calls on whose results simple operations
are performed.
(independent_on_stmt_p, process_assignment,
propagate_through_phis, adjust_accumulator_values,
adjust_return_value): New.
(eliminate_tail_call): Update the accumulators if needed.
(optimize_tail_call): Do not create phis.
(tree_optimize_tail_calls): Create phis and accumulators as needed.
Adjust return values.
2004-03-02 Diego Novillo <>
* tree-ssa-operands.c (get_expr_operands): Mark CALL_EXPRs
with has_volatile_ops if aliases haven't been computed yet.
(add_stmt_operand): Use 'true' instead of '1'.
2004-03-02 Diego Novillo <>
PR optimization/14266
* tree-ssa-alias.c (create_global_var): Mark GLOBAL_VAR for
2004-03-01 Richard Henderson <>
* tree.c (associative_tree_code): Remove MINUS_EXPR, LSHIFT_EXPR,
* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Use
is_gimple_min_invariant and is_gimple_var. Handle minus_expr
2004-03-01 Richard Henderson <>
* cfgbuild.c (rtl_make_eh_edge): Rename from make_eh_edge.
* basic-block.h, except.c: Update decl and uses.
2004-03-01 Frank Ch. Eigler <>
* doc/passes.texi: Add information about mudflap.
2004-03-01 Andrew Pinski <>
PR middle-end/13066
* fold-const (fold): Call fold_convert when building
a TRUTH_*_EXPR tree.
2004-03-01 Andrew MacLeod <>
* common.opt : Add tree-copyrename option. Remove duplicate tree-sra.
* flags.h (flag_tree_copyrename): Declare.
* opts.c (decode_options): Turn copyrename on by default at -O.
(common_handle_option): Handle -ftree-copyrename.
* toplev.c (flag_tree_copyrename): Declare.
* tree-ssa-copyrename.c (gate_copyrename): New. Check flag.
(pass_rename_ssa_copies): Initialize with gated routine.
(lang_independent_options f_): Add tree-copyrename.
* doc/invoke.texi: Add -fdump-tree-copyrename and -ftree-copyrename.
* doc/passes.texi: Add blurb for copy renaming.
2004-03-01 Jeff Law <>
* tree-ssa-dom.c (true_false_expr_hash): Update comments slightly.
(true_false_expr_eq): Update comments slightly. Avoid using
operand_equal_p, instead check the code and operands directly.
2004-03-01 Andrew MacLeod <>
* (tree-ssa-copyrename.o): New object.
* timevar.def (TV_TREE_COPY_RENAME): New time variable.
* tree-optimize.c (init_tree_optimization_passes): Add copy rename
* tree-pass.h (pass_rename_ssa_copies): New pass structure.
* tree-sra.c (lookup_scalar): Copy DECL_ARITIFICIAL flag from base.
* tree-ssa-copyrename.c : New file.
(copy_rename_partition_coalesce): Coalesce partitions for renaming.
(rename_ssa_copies): Find renamable copies.
(pass_rename_ssa_copies): Initialize.
* tree-ssa-live.c (register_ssa_partition): Move to tree-ssa-live.h.
* tree-ssa-live.h (register_ssa_partition): Moved from tree-ssa-live.c.
2004-02-29 David Edelsohn <>
* doloop.c (doloop_optimize): Increment n_iterations if loop->top
2004-02-29 Diego Novillo <>
* gimple-low.c (pass_remove_useless_vars): Add TODO_dump_func.
2004-02-27 Richard Henderson <>
PR middle-end/14310
* explow.c (emit_stack_save): Remove savearea mode check.
2004-02-27 Richard Henderson <>
* builtins.c (simplify_builtin_strcmp): Don't export. Remove
length parameters. Remove conversion to memcmp.
(simplify_builtin_strncmp): Likewise.
* expr.h: Don't declare them.
* tree-ssa-ccp.c (ccp_fold_builtin): Don't call them.
2004-02-27 Dale Johannesen <>
* tree-cfg.c (cleanup_control_expr_graph): Prevent edge
probability from overflowing due to roundoff errors.
2004-02-27 Jeff Law <>
* tree-cfg.c (verify_expr): Do not walk down into types.
Expand checking to verify that unary/binary operators have
gimple operands.
* tree-ssa-ccp.c (ccp_fold_builtin, case BUILT_IN_STRLEN): Do not
create non-gimple code. Similarly for BUILTIN_IN_STRCPY and
* tree-ssa-phiopt.c (conditional_replacement): Do not create
non-gimple code.
* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
* tree-simple.c (is_gimple_min_invariant): Subtraction of a
constant from a constant pointer is a gimple invariant as well.
* tree-ssa-operands.c (get_expr_operands): Handle subtraction
of a constant from a constant pointer too.
* fold-const.c (fold): Tighten test for optimizing an equality
comparison of the address of two variables.
* tree-inline.c (setup_one_parameter): Improve test for when we
need to gimplify the initialization statements.
2004-02-27 Diego Novillo <>
PR optimization/14312
* tree-pretty-print.c (dump_generic_node): Mark tail calls.
* tree-ssa-alias.c (compute_may_aliases): Restore call to
(compute_points_to_and_addr_escape): If the address of a
variable V is stored into a non-pointer variable, mark V as
* tree-tailcall.c (suitable_for_tail_opt_p): Check for
call-clobbered instead of TREE_ADDRESSABLE.
Ignore memory tags.
(optimize_tail_call): Add newline to dump output.
2004-02-27 Diego Novillo <>
PR optimization/13347
* tree-sra.c (scalarize_structure_assignment): Use STRIP_NOPS
instead of STRIP_USELESS_TYPE_CONVERSION to remove type casts
from RHS of the assignment.
* tree-ssa.c (tree_ssa_useless_type_conversion_1): Reformat
and rephrase comments.
* tree.h (STRIP_USELESS_TYPE_CONVERSION): Reformat comment.
2004-02-26 Zdenek Dvorak <>
* tree-cfg.c (tree_redirect_edge_and_branch_1): Allow to redirect
RETURN_EXPR branches.
2004-02-26 Jeff Law <>
* tree-nrv.c (tree_nrv): Only perform NRV optimization when the
return value lives in memory.
* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): If an
operand is unsigned, then we can eliminate more ABS expressions
and turned div/mod expression into shift/and expressions.
* fold-const.c (fold): An equality comparison of the address of
two non-weak variables has known compile-time result.
2004-02-26 Andrew Pinski <>
* tree-ssa-phiopt.c (conditional_replacement):
* tree-ssa-phiopt.c (tree_ssa_phiopt): Split into ...
(conditional_replacement): Here.
2004-02-26 Andrew MacLeod <>
* tree-ssa.c (find_replaceable_in_bb): Don't repalce expressions in
volatile statements.
2004-02-25 Richard Henderson <>
PR opt/14288
* gimplify.c (gimple_push_cleanup): Add VAR argument. Set
TREE_NO_WARNING if in a conditional context.
(gimplify_target_expr): Pass new argument.
* tree-sra.c (lookup_scalar): Copy TREE_NO_WARNING to replacement.
2004-02-24 Kazu Hirata <>
* doc/invoke.texi: Replace -fdump-tree-all-ssa with
2004-02-24 Kazu Hirata <>
PR target/14285
* config/arm/arm.c (arm_compute_func_type): Replace
"current_function_needs_context" with "cfun->static_chain_decl
!= NULL".
(arm_compute_initial_elimination_offset): Likewise.
* config/h8300/h8300.c (h8300_emit_stack_adjustment):
* config/sh/sh.c (output_stack_adjust): Likewise.
(sh5_schedule_saves): Likewise.
* config/xtensa/xtensa.c (compute_frame_size): Likewise.
2004-02-24 Richard Henderson <>
* c-simplify.c (c_genericize): s/dump_flags/local_dump_flags/.
* predict.c, tree-alias-ander.c, tree-cfg.c, tree-nrv.c,
tree-optimize.c, tree-pass.h, tree-sra.c, tree-ssa-alias.c,
tree-ssa-ccp.c, tree-ssa-copy.c, tree-ssa-dce.c, tree-ssa-dom.c,
tree-ssa-dse.c, tree-ssa-forwprop.c, tree-ssa-loop.c,
tree-ssa-phiopt.c, tree-ssa-pre.c, tree-ssa.c, tree-tailcall.c:
2004-02-24 Richard Henderson <>
* predict.c, tree-alias-ander.c, tree-cfg.c, tree-mudflap.c,
tree-nrv.c, tree-optimize.c, tree-pass.h, tree-profile.c, tree-sra.c,
tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-copy.c, tree-ssa-dce.c,
tree-ssa-dom.c, tree-ssa-dse.c, tree-ssa-forwprop.c, tree-ssa-loop.c,
tree-ssa-operands.c, tree-ssa-phiopt.c, tree-ssa-pre.c, tree-ssa.c,
tree-tailcall.c: s/tree_dump_file/dump_file/g.
2004-02-24 Diego Novillo <>
* doc/tree-ssa.texi: Fix formatting mark ups.
2004-02-24 Jeff Law <>
* gimple-low.c (remove_useless_vars): Now static.
(pass_remove_useless_vars): New.
* tree-flow.h (remove_useless_vars): Remove prototype.
* tree-nrv.c (struct nrv_data): Remove visited hashtable.
(finalize_nrv_r): Do not descend into types. No need to update
the visited hashtable.
(tree_nrv): No need to allocate/free the visited hashtable.
Clear the used flag on the variable's annotation.
* tree-optimize.c (init_tree_optimizatio_passes): Link in
* tree-pass.h (pass_remove_useless_vars): Declare.
* tree-ssa.c (rewrite_out_of_ssa): Do not remove useless vars here.
* (OBJS-common): Add tree-nrv.o.
(tree-nrv.o): Add dependencies.
* timevar.def (TV_TREE_NRV): New timevar.
* tree-nrv.c: New file implementing NRV on generic trees.
* tree-optimize.c (init_tree_optimization_passes): Link in
tree_nrv optimization pass.
* tree-pass.h (tree_nrv): Declare.
* doc/invoke.texi: Add -fdump-tree-nrv documentation.
2004-02-24 Sebastian Pop <>
* tree-flow.h (walk_use_def_chains_fn): Return a boolean.
True for stopping the use-def walk, false otherwise.
* tree-ssa-alias.c (collect_points_to_info_r): Same.
Always return false, and never stopping the def-use walk as before.
* tree-ssa.c (walk_use_def_chains_1): Stop when the result of the
callback function is true.
* doc/tree-ssa.texi: Document the behavior of the callback
function for walk_use_def_chains.
2004-02-24 Richard Henderson <>
* doc/passes.texi: Rewrite.
2004-02-23 Diego Novillo <>
* (TEXI_GCCINT_FILES): Add cfg.texi and tree-ssa.texi
* tree-ssa-alias.c (compute_may_aliases): Update documentation.
* doc/gccint.texi: Add node for Tree SSA documentation.
Include tree-ssa.texi.
* doc/tree-ssa.texi: New file.
2004-02-23 Dale Johannesen <>
* config/rs6000/ Roll in changes from mainline:
(movdf_softfloat64): Add POWER form of nop.
(movsf_hardfloat): Ditto, and accept CTR-to-CTR copy.
(movdf_hardfloat64): Ditto.
2004-02-23 Jeff Law <>
* ggc-page.c (struct page_entry): New field PREV.
(ggc_alloc): Update PREV field appropriately.
(sweep_pages): Likewise.
(ggc_free): Likewise. Use PREV field rather than loop to
improve ggc_free performance.
* (OBJC-common): Add tree-ssa-copy.o.
(tree-ssa-copy.o): Add dependencies.
* tree-flow.h (propagate_value, replace_exp): Prototype.
(cprop_into_stmt, cprop_into_successor_phis): Likewise.
* tree-ssa-copy.c: New file, most functions copied from tree-ssa-dom.c
(cprop_into_stmt): Handle pointer & reference types better.
* tree-ssa-dom.c (opt_stats_d): Kill uninteresting stats.
(dump_dominator_optimization_stats): Corresponding changes.
(cprop_into_stmt): Moved into tree-ssa-copy.c.
(propagate_value): Likewise.
(cprop_into_phis): Simplify using code fromi tree-ssa-copy.c.
(optimize_stmt): Pass additional argument to cprop_into_stmt.
* tree-ssa-pre.c (generate_expr_as_of_bb): Use replace_exp.
(generate_vops_as_of_bb): Similarly.
2004-02-21 Jan Hubicka <>
* cgraphunit.c (decide_is_function_needed): Nested functions of extern
inline functions don't need to be output.
(expand_function): Re-enable sanity check.
2004-02-21 Zdenek Dvorak <>
* tree-ssa-loop.c (do_while_loop_p): New function.
(copy_loop_headers): Do not peel do-while loops.
2004-02-21 Jan Hubicka <>
* tree-cfg.c (cleanup_control_expr_graph): Update profile.
* tree-cfg.c (disband_implicit_edges): Set fallthru edges correctly.
* cfg.c (dump_flow_info): Work on trees too.
* tree-pretty-print.c (dump_generic_bb_stuff): Do not touch bb
annotations when not allocated.
2004-02-21 Jeff Law <>
* tree-ssa-dom.c (cprop_into_stmt): Look at the type's main variant
to determine if the two operands of a copy have equivalent types.
2004-02-20 Jeff Law <>
* tree-flow-inline.h (may_propagate_copy): Do not perform ABNORMAL_PHI
and DECL_HARD_REGISTER tests on virtual operands.
* tree-flow.h (propagate_copy): Kill prototype.
(propagate_value): New prototype.
* tree-ssa-dom.c (propagate_copy): Now static.
(propagate_value): No longer static.
2004-02-20 Richard Henderson <>
PR middle-end/14218
* c-simplify.c (mark_labels_r): Move to ...
* gimplify.c (force_labels_r): ... here, and rename.
(gimplify_init_constructor): Invoke it.
* tree-simple.h (force_labels_r): Declare.
2004-02-20 Richard Henderson <>
PR opt/14194
* tree-ssa-ccp.c (substitute_and_fold): Also mark new vars
if fold_stmt was successful.
2004-02-20 Diego Novillo <>
* doc/invoke.texi: Add documentation for parameters
global-var-threshold and max-aliased-vops.
* params.def (PARAM_GLOBAL_VAR_THRESHOLD): Reformat help message.
* params.h (MAX_ALIASED_VOPS): Rename from MAX_ALIAS_SET_SIZE.
Update all users.
* tree-ssa-alias.c (struct alias_map_d): Document fields.
Add fields total_alias_vops, grouped_p and may_aliases.
(struct alias_info): Change fields addressable_vars and
pointers to malloc'd arrays. Update all users.
Add fields num_references and total_alias_vops.
(compute_may_aliases): Add more comments.
(init_alias_info): Initialize new fields in struct alias_info.
(delete_alias_info): Corresponding changes.
(compute_points_to_and_addr_escape): Count references to
potentially aliased variables and pointer dereferences.
(compute_flow_insensitive_aliasing): Remove old grouping
Count the number of virtual operands induced by all the alias
sets created and call group_aliases if the number exceeds the
threshold set by --param max-aliased-vops.
(total_alias_vops_cmp): New.
(group_aliases_into): New.
(group_aliases): New.
* tree-ssa-operands.c (get_expr_operands): Change dump file
message when no flow-sensitive alias information is available.
(add_stmt_operand): Reformat comment.
* tree-ssa.c (init_tree_ssa): Don't call bitmap_clear.
* tree-simple.c (get_base_decl): Fix typo in comment.
* tree-pretty-print.c (print_call_name): Handle matrices of
function pointers.
2004-02-20 Zdenek Dvorak <>
* (tree-ssa-loop.o): Add tree-inline.h dependency.
* basic-block.h (struct reorder_block_def): Moved from cfglayout.h.
(alloc_rbi_pool, initialize_bb_rbi, free_rbi_pool): New.
* bb-reorder.c (copy_bb): Use cfghooks for bb duplication.
* cfg.c (rbi_pool): New variable.
(alloc_rbi_pool, free_rbi_pool, initialize_bb_rbi): New functions.
* cfghooks.c (can_duplicate_block_p, duplicate_block): New functions.
* cfghooks.h (struct cfg_hooks): Add can_duplicate_block_p and
duplicate_block hooks.
(can_duplicate_block_p, duplicate_block): Declare.
* cfglayout.c (cfg_layout_pool, cfg_layout_initialize_rbi): Removed.
(fixup_reorder_chain): Use initialize_bb_rbi.
(cfg_layout_can_duplicate_bb_p, cfg_layout_duplicate_bb): Hookized.
(cfg_layout_initialize): Use cfg.c rbi pool manipulation functions.
(can_copy_bbs_p, copy_bbs): Use cfghooks for bb duplication.
* cfglayout.h (typedef struct reorder_block_def): Moved to
(cfg_layout_can_duplicate_bb_p, cfg_layout_duplicate_bb): Declaration
* cfgrtl.c (cfg_layout_create_basic_block): Use initialize_bb_rbi.
(rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Fill in can_duplicate_block_p
and duplicate_block fields.
* common.opt (ftree-ch): Add.
* flags.h (flag_tree_ch): Declare.
* jump.c (next_nonnote_insn_in_loop, duplicate_loop_exit_test,
copy_loop_headers): Removed.
* loop-unswitch.c (unswitch_loop): Use cfghooks for bb duplication.
* opts.c (decode_options): Enable flag_tree_ch at -O1.
(common_handle_option): Handle -ftree_ch.
* rtl.h (copy_loop_headers): Declaration removed.
* timevar.def (TV_TREE_CH): New.
* toplev.c (flag_tree_ch): New.
(rest_of_compilation): Do not call copy_loop_headers.
* tracer.c (tail_duplicate): Use cfghooks for bb duplication.
* tree-cfg.c (build_tree_cfg): Call alloc_rbi_pool.
(create_bb): Call initialize_bb_rbi.
(delete_tree_cfg): Call free_rbi_pool.
(tree_duplicate_bb): Hookize.
(tree_can_duplicate_bb_p): New.
(tree_cfg_hooks): Fill in can_duplicate_block_p and duplicate_block
* tree-flow.h (tree_duplicate_bb): Declaration removed.
* tree-optimize.c (init_tree_optimization_passes): Add pass_ch.
* tree-pass.h (pass_ch): Declare.
* tree-ssa-loop.c: Include tree-inline.h.
(call_expr_p, should_duplicate_loop_header_p, mark_defs_for_rewrite,
duplicate_blocks, copy_loop_headers, gate_ch): New functions.
(pass_ch): New.
* doc/invoke.texi (-fdump-tree-ch, -ftree-ch): Document.
2004-02-19 David Edelsohn <>
* config/rs6000/aix.h (MFWRAP_SPEC): Define.
(MFLIB_SPEC): Define.
2004-02-19 Jeff Law <>
* tree-ssa-phiopt.c (tree_ssa_phiopt): TRUTH_NOT_EXPR is valid
gimple code.
2004-02-19 Steven Bosscher <>
* tree-cfg.c (cleanup_dead_labels): New function to remove
redundant labels.
Remove the RTL inliner.
* calls.c (try_to_integrate): Remove.
(expand_call): Do not try to expand calls inline.
* dbxout.c (dbxout_symbol_location): Don't mention integrate.c
in comments.
* expmed.c (extract_fixed_bit_field): Always propagate the
target for the shift if it is a REG.
* expr.c (emit_move_insn_1): Don't generate inline warnings.
(expand_expr_real_1): Don't look at inline_function_decl.
Don't output inlined functions here.
* expr.h (expand_inline_function): Remove prototype.
* emit-rtl.c (copy_most_rtx): Don't copy the integrated flag.
Copy the new return_val flag.
* final.c (final): Don't look at RTX_INTEGRATED_P.
* cfgrtl.c (create_basic_block_structure): Likewise.
* haifa-sched.c (priority): Likewise.
(restore_line_notes): Likewise.
* function.c (inline_function_decl): Remove.
(put_var_into_stack): Don't use it.
(fix_lexical_addr): Likewise.
* function.c (inline_function_decl): Remove extern declaration.
* genattrtab.c (ATTR_PERMANENT_P): Use the return_val flag
instead of the integrated flag.
* integrate.c (INTEGRATE_THRESHOLD): Remove.
(setup_initial_hard_reg_value_integration): Likewise.
(initialize_for_inline): Likewise.
(note_modified_parmregs): Likewise.
(integrate_parm_decls): Likewise.
(process_reg_param): Likewise.
(save_parm_insns): Likewise.
(copy_insn_list): Likewise.
(copy_insn_notes): Likewise.
(compare_blocks): Likewise.
(find_block): Likewise.
(inlining): Likewise.
(function_cannot_inline_p): Likewise.
(parmdecl_map): Likewise.
(in_nonparam_insns): Likewise.
(save_for_inline): Likewise.
(FIXED_BASE_PLUS): Likewise.
(expand_inline_function): Likewise.
(copy_rtx_and_substitute): Don't look at map->integrating,
map->inline_target, and inlining, since we are never copying
for integrating.
Don't abort on RTX_INTEGRATED_P.
(old_fun): Remove.
(output_inline_function): Remove.
* integrate.h (struct inline_map): Remove fields integrating,
block_map, leaf_reg_map, inline_target, and local_return_label.
* print-rtl.c (print_rtx): Don't print the integrated flag.
Print the return_val flag.
* rtl.h (struct rtx_def): Replace the integrated flag with the
return_val flag.
(notice_rtl_inlining_of_deferred_constant): Remove prototype.
* stmt.c (force_label_rtx): Don't look at inline_function_decl.
* toplev.c (rest_of_handle_inlining): Remove.
(rest_of_compilation): Don't call it, and never jump to exit.
Call convert_from_eh_region_ranges.
(wrapup_global_declarations): Don't output nested inlined functions.
* tree.h (function_cannot_inline_p): Remove prototype.
(save_for_inline): Ditto.
(output_inline_function): Ditto.
* unroll.c (unroll_loop): Don't clear map->inline_target.
* varasm.c (notice_rtl_inlining_of_deferred_constant): Remove.
* system.h: Poison INTEGRATE_THRESHOLD.
* config/avr/avr.h: Remove define.
* config/ip2k/ip2k.h: Likewise.
* unwind-sjlj.c (uw_install_context): Make a proper static inline
* doc/rtl.texi: Remove references to the integrated flag.
* doc/tm.texi: Remove documentation of INTEGRATE_THRESHOLD.
2004-02-17 Andrew Macleod <>
* tree-ssa-live.c (coalesce_tpa_members): Don't coalesce partitions
which are not in the same TPA group.
* tree-ssa.c (rewrite_out_of_ssa): Coalesce via list first.
2004-02-17 Brian Booth <>
* tree-ssa-ccp.c (substitute_and_fold): Update stmt after
calling fold_stmt.
2004-02-16 Andrew Pinski <>
* config/rs6000/rs6000.c (output_function_profiler): Check
cfun->static_chain_decl instead of current_function_needs_context.
2004-02-16 Jeff Law <>
* tree-ssa.dse.c (dse_optimize_stmt): Dump info when we delete
* tree-ssa-dse.c: Update comments.
* (OBJS-common): Add tree-ssa-dse.o
(tree-ssa-dse.o): Add dependencies.
* common.opt (ftree-dse): New option.
* flags.h (flag_tree_dse): New.
(flag_tree_dom): Fix comments.
* opts.c (decode_options): Turn on flag_tree_dse.
(common_handle_option): Handle OPT_ftree_dse.
* timevar.def (TV_TREE_PHIOPT): Update text.
(TV_TREE_DSE): New timevar.
* toplev.c (flag_tree_dse): New.
(flag_tree_dom): Fix comments.
(lang_independent_options): Add -ftree-dse.
* tree-dfa.c (redirect_immediate_use): New function.
(redirect_immediate_uses): New function.
* tree-flow.h (stmt_ann_d): Add UID field.
(redirect_immediate_uses): Declare.
* tree-optimize.c (init_tree_optimization_passes): Link in DSE pass.
* tree-pass.h (pass_dse): Declare.
* tree-ssa-dse.c: New file implementing DSE.
* doc/invoke.texi: Document new option.
2004-02-16 Richard Henderson <>
* tree-nested.c: New file.
* (OBJS-common, GTFILES, tree-nested.o): Add it.
* builtin-types.def (BT_FN_VOID_PTR_PTR, BT_FN_VOID_PTR_PTR_PTR): New.
* builtins.c (expand_builtin_nonlocal_goto): New.
(expand_builtin_apply): Fix prepare_call_address args.
(round_trampoline_addr): Move from function.c.
(expand_builtin_init_trampoline): New.
(expand_builtin_adjust_trampoline): New.
(expand_builtin): Invoke them.
(build_function_call_expr): Add CALL_EXPR chain operand.
* c-decl.c (finish_function): Call lower_nested_functions.
(c_expand_decl): Don't declare_nonlocal_label.
* calls.c (prepare_call_address): Replace fndecl arg with a
precomputed static chain value.
(expand_call): Precompute the static chain value. Use
* cgraph.c (cgraph_mark_reachable_node): Don't force nested
functions to be reachable.
(cgraph_clone_node): Don't abort cloning functions containing
nested functions.
* cgraphunit.c (cgraph_assemble_pending_functions): Don't do
anything special for nested functions.
(cgraph_mark_functions_to_output): Likewise.
(cgraph_estimate_growth, cgraph_clone_inlined_nodes): Likewise.
(cgraph_optimize): Likewise.
(cgraph_finalize_function): Don't zap DECL_SAVED_INSNS.
(cgraph_expand_function): Allow functions to not be emitted.
* defaults.h (TRAMPOLINE_ALIGNMENT): Move from function.c.
* dwarf2out.c (gen_subprogram_die): Generate DW_AT_static_link.
* emit-rtl.c (maybe_set_first_label_num): New.
* explow.c (update_nonlocal_goto_save_area): New.
(allocate_dynamic_stack_space): Use it.
* expr.c (expand_expr_real_1) <LABEL_DECL>: Don't force_label_rtx.
<COND_EXPR>: Ignore the possibility of non-local labels.
<ADDR_EXPR>: Don't do trampoline_address.
* expr.h (lookup_static_chain): Remove.
(prepare_call_address): Update 2nd arg.
(update_nonlocal_goto_save_area): Declare.
* final.c (profile_function): Update static chain test.
* function.c (TRAMPOLINE_ALIGNMENT): Move to defaults.h.
(trampolines_created): Move to varasm.c.
(free_after_compilation): Update for removed fields.
(allocate_struct_function): Likewise.
(delete_handlers, lookup_static_chain): Remove.
(fix_lexical_addr): Don't consider non-local variable refs.
(trampoline_address): Remove.
(round_trampoline_addr): Move to builtins.c.
(adjust_trampoline_addr): Remove.
(expand_function_start): Update for changes to static chain
and nonlocal goto handling.
(initial_trampoline): Move to varasm.c.
(expand_function_end): Don't build trampolines or kill
unreferenced nonlocal goto labels.
* function.h (struct function): Remove x_nonlocal_labels,
x_nonlocal_goto_handler_slots, x_nonlocal_goto_stack_level,
x_context_display, x_trampoline_list, needs_context.
Add static_chain_decl, nonlocal_goto_save_area.
* gimple-low.c (record_vars): Don't record functions.
* gimplify.c (declare_tmp_vars): Export.
(create_artificial_label): Set type.
(gimplify_expr): Don't consider nonlocal gotos.
* integrate.c (expand_inline_function): Kill lookup_static_chain ref.
* jump.c (any_uncondjump_p): Reject nonlocal goto.
* rtl.h (maybe_set_first_label_num): Declare.
* stmt.c (label_rtx): Set LABEL_PRESERVE_P appropriately.
(expand_label): Handle DECL_NONLOCAL and FORCED_LABEL.
(declare_nonlocal_label): Remove.
(expand_goto): Don't handle nonlocal gotos.
(expand_nl_handler_label): Remove.
(expand_nl_goto_receivers): Remove.
(expand_end_bindings): Don't expand_nl_goto_receivers. Use
* tree-cfg.c (make_edges): Handle abnormal edges out of block
falling through to EXIT.
(make_ctrl_stmt_edges): Don't check GOTO_EXPR for nonlocal goto.
Handle computed goto with no destinations.
(tree_can_merge_blocks_p): Don't merge blocks with nonlocal labels.
(remove_useless_stmts_label, stmt_starts_bb_p): Likewise.
(tree_forwarder_block_p): Likewise.
(nonlocal_goto_p): Remove.
(tree_verify_flow_info): Update to match.
* tree-dump.c (dump_files): Add tree-nested.
* tree-flow.h (nonlocal_goto_p): Remove.
* tree-inline.c (setup_one_parameter): Split out from ...
(initialize_inlined_parameters): ... here. Handle static chain.
(inline_forbidden_p_1): Update nonlocal goto check.
(expand_call_inline): Disable mysterious cgraph abort.
* tree-optimize.c (tree_rest_of_compilation): Save DECL_SAVED_INSNS.
* tree-pretty-print.c (dump_generic_node): Print static chain
and nonlocal label.
* tree-simple.h (declare_tmp_vars): Declare.
(lower_nested_functions): Declare.
* tree-ssa-dom.c (propagate_value): Avoid sharing problems.
* tree-ssa-operands.c (get_expr_operands): Walk static chain
field of call_expr.
* tree.def (CALL_EXPR): Add static chain operand.
* tree.h (NONLOCAL_LABEL): Remove.
(TDI_nested): New.
* varasm.c (TRAMPOLINE_ALIGNMENT): Remove.
(initial_trampoline): Move from function.c.
(assemble_trampoline_template): Set and return it.
(trampolines_created): Move from function.c.
2004-02-16 Steven Bosscher <>
* tree-flow.h (cleanup_control_expr_graph): Don't declare here.
* tree-cfg.c (cleanup_control_expr_graph): Make static.
(find_edge_taken_cond_expr): Return an edge if the true and false
edges of a branch lead to the same basic block.
2004-02-13 Diego Novillo <>
* tree-phinodes.c (resize_phi_node): Do not use ggc_realloc to
allocate a new PHI node.
2004-02-12 Diego Novillo <>
* tree-flow.h (kill_redundant_phi_nodes): Remove declaration.
* tree-optimize.c (init_tree_optimization_passes): Add
pass_redundant_phi after DOM and CCP.
(execute_todo): Do not call kill_redundant_phi_nodes.
* tree-pass.h (TODO_redundant_phi): Remove.
Update all users.
Adjust values for all the other TODO_* entries.
(pass_redundant_phi): Declare.
* tree-ssa.c (replace_immediate_uses): Call mark_new_vars_to_rename
if a pointer was replaced.
(kill_redundant_phi_nodes): Make static.
(pass_redundant_phi): Define.
2004-02-12 Dale Johannesen <>
* (OBJS-common): Add rtl-profile.o, tree-profile.o.
(profile.o): Add tree-flow.h dependency.
(rtl-profile.o): New rule.
(tree-profile.o): New rule.
(GTFILES): Add tree-profile.c, rtl-profile.c.
* basic-block.h (flow_call_edges_add): Remove.
* cfganal.c (need_fake_edge_p): Move to cfgrtl.c.
(flow_call_edges_add): Move to cfgrtl.c.
* cfghooks.c: (block_ends_with_call_p): New.
(block_ends_with_condjump_p): New.
(flow_call_edges_add): New.
* cfghooks.h: (struct cfg_hooks): add block_ends_with_call_p,
block_ends_with_condjump_p, flow_call_edges_add.
(block_ends_with_call_p): New declaration.
(block_ends_with_condjump_p): New declaration.
(flow_call_edges_add): New declaration.
* cfgrtl.c (rtl_block_ends_with_call_p): New.
(rtl_block_ends_with_condjump_p): New.
(need_fake_edge_p): Moved from cfganal.c.
(rtl_flow_call_edges_add): Moved from cfganal.c (flow_call_edges_add).
(rtl_cfg_hooks): Add rtl_block_ends_with_call_p,
rtl_block_ends_with_condjump_p, rtl_flow_call_edges_add.
(cfg_layout_rtl_cfg_hooks): Ditto.
* common.opt (ftree-based-profiling): New.
* coverage.c (tree_ctr_tables): New.
(coverage_counter_alloc): Use it.
(build_ctr_info_value): Ditto.
(coverage_counter_ref): Ditto. Rename to rtl_coverage_counter_ref.
(tree_coverage_counter_ref): New.
* coverage.h (coverage_counter_ref): Remove declaration.
(rtl_coverage_counter_ref): New declaration.
(tree_coverage_counter_ref): New declaration.
* opts.c (OPT_ftree_based_profiling): New.
* profile.c: Include cfghooks.h, tree-flow.h.
(profile_hooks): New.
(profile_dump_file): New.
(instrument_edges): Use hooks instead of RTL-specific code.
(instrument_values): Ditto.
(get_exec_counts): Ditto.
(compute_branch_probabilities): Ditto.
(compute_value_histograms): Ditto.
(branch_prob): Ditto.
(find_spanning_tree): Ditto.
(end_branch_prob): Ditto.
(gen_edge_profiler): Move to rtl-profile.c (rtl_gen_edge_profiler).
(gen_interval_profiler): Ditto (rtl_gen_interval_profiler).
(gen_pow2_profiler): Ditto (rtl_gen_pow2_profiler).
(gen_one_value_profiler): Ditto (rtl_gen_one_value_profiler).
(tree_register_profile_hooks): New.
(rtl_register_profile_hooks): New.
* rtl-profile.c: New file.
* rtl.h (init_branch_prob): Move declaration to value-prof.h.
(end_branch_prob): Ditto.
(branch_prob): Ditto.
* toplev.c (flag_tree_based_profiling): New.
(f_options): Add -ftree-based-profiling.
(compile_file): Register rtl-based CFG and profiling hooks.
(rest_of_compilation): Do rtl-based profiling only when
!flag_tree_based_profiling. Register rtl-based profiling hooks.
(process_options): Sorry for -ftree-based-profiling plus
-ftest-coverage or -fprofile-values.
* toplev.h (flag_tree_based_profiling): New.
* tree-cfg.c (tree_block_ends_with_call_p): New.
(tree_block_ends_with_condjump_p): New.
(need_fake_edge_p): New.
(tree_flow_call_edges_add): New (largely from flow_call_edges_add
in cfganal.c).
(tree_cfg_hooks): Add tree_block_ends_with_call_p,
tree_block_ends_with_condjump_p, tree_flow_call_edges_add.
* tree-optimize.c (init_tree_optimization_passes):
Add pass_tree_profile.
* tree-pass.h: Ditto.
* tree-profile.c: New file.
* value-prof.c (value_prof_hooks): New.
(find_values_to_profile): Rename to rtl_find_values_to_profile.
Move rtl-specific bits in from branch_prob.
(value_profile_transformations): Rename to
(struct value_prof_hooks): New.
(rtl_value_prof_hooks): New.
(rtl_register_value_prof_hooks): New.
(tree_find_values_to_profile): New stub.
(tree_value_profile_transformations): New stub.
(tree_value_prof_hooks): New stub.
(tree_register_value_prof_hooks): New stub.
(find_values_to_profile): New.
(value_profile_transformations): New.
* value-prof.h: Add multiple inclusion guard.
(struct histogram_value): Change rtx fields to void *.
(rtl_register_value_prof_hooks): New declaration.
(tree_register_value_prof_hooks): New declaration.
(find_values_to_profile): New declaration.
(free_profiled_values): New declaration.
(value_profile_transformations): New declaration.
(struct profile_hooks): New declaration.
(init_branch_prob): Declaration moved from rtl.h.
(branch_prob): Declaration moved from rtl.h.
(end_branch_prob): Declaration mooved from rtl.h.
(tree_register_profile_hooks): New declaration.
(rtl_register_profile_hooks): New declaration.
(tree_profile_hooks): New declaration.
(rtl_profile_hooks): New declaration.
* doc/invoke.texi: Document -ftree-based-profiling.
2004-02-12 Jeff Law <>
* domwalk.c (walk_dominator_tree): Move statement walking from
clients into here. Walk statements in forward or backward order
as requested by the client. Walk either the dominator tree or
the post-dominator tree as requested by the client.
* domwalk.h (dom_walk_data): Add two fields to control direction of
statement walk and dominator vs post-dominator tree walk. Add
BSI argument to the per-statement callbacks.
* tree-ssa-dom.c (optimize_stmt): Update prototype so that it can
be directly used as a callback for the dominator tree walker.
Update stmts_to_rescan here.
(tree_ssa_dominator_optimize): Initialize new fields in the dominator
walker structure. Use optimize_stmt instead of dom_opt_walk_stmts
for statement callback.
(dom_opt_walk_stmts): Kill. No longer used.
* tree-ssa.c (mark_def_sites): Update prototype so that it can be
called as the per-statement callback. No longer walk statements here.
(mark_def_sites_initialize_block): New.
(rewrite_stmt): Update prototype so that it can be called as the
per-statement callback.
(rewrite_walk_stmts): Kill. No longer used.
(rewrite_into_ssa): Initialize new fields in the dominator walker
structure. Use rewrite_stmt instead of rewrite_walk_stmts. Add
mark_def_sites_initialize_block callback.
2004-02-12 Steven Bosscher <>
* doc/cfg.texi: New file.
* doc/ggcint.texi: Include it. Add a new chapter.
2004-02-11 Jeff Law <>
* (OBJS-common): Add tree-ssa-forwprop.o
(tree-ssa-forwprop.o): Add dependencies.
* timevar.def (TV_TREE_FORWPROP): New timevar.
* tree-optimize.c (init_tree_optimization_passes): Link in
the forward propagation pass.
* tree-pass.h (pass_forwprop): Declare.
* tree-ssa-forwprop.c: New file with forward propagation pass.
* doc/invoke.texi: Document dump for forward propagation pass.
2004-02-11 Andrew MacLeod <>
* tree-ssa.c (rewrite_out_of_ssa): Don't use coalesce list until new
bug resolved.
2004-02-11 Andrew MacLeod <>
* tree-ssa-live.c (compare_pairs): New. Coalesce list cost function.
(sort_coalesce_list): Use qsort() to sort list by cost.
(coalesce_tpa_members): Use correct partition representatives. Add more
debug information. Allow coalesce by list, root_var, or both.
(tpa_dump): Show partition index.
* tree-ssa-live.h (SSANORM_COALESCE_PARTITIONS): New flag.
* tree-ssa.c (create_temp): Don't mark as used when created.
(coalesce_ssa_name): Create coalesce list if requested. Add more
debug output.
(assign_vars): Add additional debug info.
(remove_ssa_form): Perform TER after assign_vars().
(rewrite_vars_out_of_ssa): Pass coalesce partitions flag to
(rewrite_out_of_ssa): Add coalesce list flag to remove_ssa_form call.
2004-02-10 Jeff Law <>
* (OBJS-common): Add tree-ssa-phiopt.o
(tree-ssa-phiopt.o): Add dependencies.
* timevar.def (TV_TREE_PHIOPT): New timevar.
* tree-cfg.c (extract_true_false_edges_from_block): Moved here from
(tree_verify_flow_info): Use extract_true_false_edges_from_block.
* tree-flow.h (extract_true_false_edges_from_block): Declare.
* tree-ssa-dom.c (extract_true_false_edges_from_block): Moved into
(get_eq_expr_value): Improve type check.
* tree-optimize.c (init_tree_optimization_passes): Link in
phiopt pass.
* tree-pass.h (pass_phiopt): Declare.
* tree-ssa-phiopt.c: New file with PHI node optimization pass.
* doc/invoke.texi: Document dump for PHI node optimization.
2004-02-10 Richard Henderson <>
* tree-sra.c (lookup_scalar): Handle unnamed fields.
2004-02-10 Diego Novillo <>
* (OBJS-common): Add tree-ssa-alias.o.
(tree-ssa-alias.o): New rule.
(tree-ssa-operands.o): Add dependency on $(TIMEVAR_H) and tree-pass.h
(gt-tree-dfa.h): Remove.
* timevar.def (TV_TREE_OPS): Rename from unused entry TV_TREE_DFA.
* tree-ssa-alias.c: New file.
* tree-dfa.c (struct alias_stats_d, alias_stats, dump_alias_stats,
may_alias_p, add_may_alias, global_var, aliases_computed_p,
compute_may_aliases): Move to tree-ssa-alias.c.
(struct walk_state): Remove fields 'is_asm_expr' and 'num_calls'.
Update all users.
(compute_alias_sets, create_memory_tags, may_access_global_mem_p,
get_memory_tag_for, promote_call_clobbered_vars,
find_addressable_vars): Remove.
(call_clobbered_vars): Move to tree-ssa-alias.c and convert to
(find_referenced_vars): Move logic to create .GLOBAL_VAR to
(create_ssa_name_ann): New.
(dump_variable): Rearrange.
(dump_dfa_stats): Do not show the number of call clobbered
(find_vars_r): Do not try to determine if an assignment my access
global memory.
(add_referenced_var): Remove hacks to establish global memory
If the variable needs to live in memory mark it call-clobbered.
* tree-flow-inline.h (ssa_name_ann): New.
(get_ssa_name_ann): New.
(set_may_alias_global_mem): Remove.
(may_alias_global_mem_p): Remove.
(set_may_point_to_global_mem): Remove.
(may_point_to_global_mem_p): Remove.
(is_call_clobbered): New
(mark_call_clobbered): New
(mark_non_addressable): New
* tree-flow.h (enum tree_ann_type): Add SSA_NAME_ANN.
(enum mem_tag_kind): Declare.
(struct var_ann_d): Remove fields 'is_call_clobbered',
'may_alias_global_mem' and 'may_point_to_global_mem'.
Replace bitfield 'mem_tag' with enum bitfield 'mem_tag_kind'.
Rename field 'mem_tag' to 'type_mem_tag'.
(struct stmt_ann_d): Change type of field 'addresses_taken' to a
bitmap. Update all users.
(struct ssa_name_ann_d): Declare.
(union tree_ann_d): Add field 'ssa_name'.
(ssa_name_ann_t): New type.
(struct bb_ann_d): Add field 'has_escape_site'.
(num_call_clobbered_vars): Remove.
(call_clobbered_var): Remove.
(call_clobbered_vars): Change to bitmap.
(dump_points_to_info): Declare.
(debug_points_to_info): Declare.
(walk_use_def_chains_fn): New type.
(walk_use_def_chains): Declare.
(is_call_clobbered): Declare.
(mark_call_clobbered): Declare.
* tree-simple.c (needs_to_live_in_memory): Move to tree.c.
(is_gimple_non_addressable): Update comment.
(is_gimple_call_clobbered): Remove.
(get_call_expr_in): New.
(get_base_var): Rename from get_base_symbol. Update all callers.
Don't strip SSA_NAME wrappers.
(get_base_decl): New.
(get_base_address): New.
* tree-simple.h (is_gimple_call_clobbered): Remove.
(needs_to_live_in_memory): Remove.
(get_base_decl): Declare.
(get_base_var): Declare.
(get_base_address): Declare.
* tree-ssa-dce.c (need_to_preserve_store): Reduce to calling
* tree-ssa-operands.c: Include tree-pass.h and timevar.h
(get_stmt_operands): Push/pop TV_TREE_OPS time var.
Call mark_call_clobbered for asms that store to memory.
(get_expr_operands): When adding operands for INDIRECT_REF
expressions, use flow-sensitive aliasing, if available.
Assume that malloc-like function calls won't clobber.
* tree-ssa.c (rewrite_into_ssa): If any variable in vars_to_rename
is a pointer, invalidate all name memory tags.
(create_temp): Call is_call_clobbered and mark_call_clobbered.
(walk_use_def_chains_1): New.
(walk_use_def_chains): New.
* tree.c (needs_to_live_in_memory): New.
(struct tree_decl): Add bitfield 'needs_to_live_in_memory'.
Update unused bits comment.
(needs_to_live_in_memory): Declare.
* tree-simple.h (get_call_expr_in): Declare.
* tree-sra.c (scalarize_stmt): Call get_call_expr_in when handling
function calls.
* tree-ssa-ccp.c (likely_value): Likewise.
Update all users.
* params.h (MAX_CALLS_FOR_GLOBAL_VAR): Remove.
2004-02-09 Richard Henderson <>
* langhooks.h (lang_hooks_for_functions): Add missing_noreturn_ok_p.
* langhooks-def.h, c-lang.c, objc/objc-lang.c
* c-objc-common.c (c_missing_noreturn_ok_p): Return bool.
(c_objc_common_init): Don't set lang_missing_noreturn_ok_p.
* c-tree.h (c_missing_noreturn_ok_p): Update decl.
* flow.c (lang_missing_noreturn_ok_p): Remove.
* flow.c (check_function_return_warnings): Move to tree-cfg.c.
* toplev.c (rest_of_compilation): Don't call it.
* tree-cfg.c (execute_warn_function_return): Move from flow.c,
rename, update for tree vs rtl.
(pass_warn_function_return): New.
* tree-pass.h (pass_warn_function_return): Declare it.
* tree-optimize.c (init_tree_optimization_passes): Run it.
* function.h (struct function): Remove x_clobber_return_insn.
* function.c (free_after_compilation): Don't set it.
(expand_function_end): Likewise.
2004-02-09 Richard Henderson <>
2004-02-06 Richard Henderson <>
* tree-ssa-dom.c (record_equivalences_from_phis): Use
(record_equivalences_from_stmt): Likewise. Replace
block_avail_exprs_p and block_nonzero_vars_p args with bd.
2004-02-09 Jeff Law <>
* tree-ssa-dom.c (get_eq_expr_value): Improve handling of boolean
* domwalk.c (walk_dominator_tree): Completely lose PARENT argument.
Callers updated. No longer pass PARENT to callbacks.
* domwalk.h (struct dom_walk_data): Corresponding changes.
* tree-ssa-dom.c: Likewise.
* tree-ssa.c: Likewise.
* domwalk.c (walk_dominator_tree): Change last argument to be the
parent block in the dominator tree rather than the last statement
in the parent block in the dominator tree. Similarly in all the
* domwalk.h (struct dom_walk_data): Update callback prototypes.
* tree-ssa-dom.c: Corresponding changes.
* tree-ssa.c: Likewise.
* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Break out
of tree_ssa_dominator_optimize. If the out-of-ssa pass creates
new variables, then invalidate some requested jump threads.
2004-02-08 Richard Henderson <>
* flow.c (regno_uninitialized): Remove.
* output.h (regno_uninitialized): Remove.
* function.c (setjmp_vars_warning): Rename from
uninitialized_vars_warning, remove uninitialized vars warning.
* toplev.c (rest_of_handle_life): Update to match.
* tree.h (setjmp_vars_warning): Likewise.
* tree-sra.c (lookup_scalar): Set DECL_NAME to something descriptive.
* tree-ssa.c (warn_uninit): New.
(warn_uninitialized_var, warn_uninitialized_phi): New.
(execute_early_warn_uninitialized): New.
(execute_late_warn_uninitialized): New.
(gate_warn_uninitialized): New.
(pass_early_warn_uninitialized): New.
(pass_late_warn_uninitialized): New.
* tree-pass.h (pass_early_warn_uninitialized): New.
(pass_late_warn_uninitialized): New.
* tree-optimize.c (init_tree_optimization_passes): Add them.
2004-02-08 Richard Henderson <>
* cppexp.c (append_digit): Rearrange unsignedp/overflow setting.
(eval_token, num_binary_op, num_part_mul, num_div_op): Likewise.
* ra-rewrite.c (rewrite_program2): Zero info.
* reload.c (decompose): Zero val.
* tree-ssa-ccp.c (visit_phi_node): Zero phi_val.const_val.
2004-02-07 Jan Hubicka <>
* tree-inline.c (save_body): Clone the parm decl correctly.
* cgraph.c: Add introductionary comment.
(cgraph_remove_node): Release DECL_SAVED_INSNS too.
* cgraphunit.c: Likewise.
(cgraph_finalize_function): Release DECL_SAVED_INSNS of external function.
(decl_expand_function): Release DECL_SAVED_INSNS/body/tree.
(cgraph_remove_unreachable_nodes): Likewise; guard cgraph verification.
2004-02-06 Richard Henderson <>
* common.opt (fdisable-tree-ssa): Remove.
* flags.h (flag_disable_tree_ssa): Remove.
* toplev.c (flag_disable_tree_ssa): Remove.
(f_options): Don't set it.
* opts.c (common_handle_option): Likewise.
* doc/invoke.texi (fdisable-tree-ssa): Remove.
2004-02-06 Richard Henderson <>
* tree-ssa-dom.c (record_equivalences_from_phis): Use
(record_equivalences_from_stmt): Likewise. Replace
block_avail_exprs_p and block_nonzero_vars_p args with bd.
2004-02-06 Andrew Pinski <>
PR middle-end/13127
* tree-inline.c (declare_return_variable): Set the no warning bit
on the variable created for the return value.
2004-02-06 Richard Henderson <>
* tree-pretty-print.c (dump_generic_node): Render NON_LVALUE_EXPR.
* tree-ssa-dom.c (local_fold): New.
(thread_across_edge, simplify_rhs_and_lookup_avail_expr,
find_equivalent_equality_comparison): Use it.
2004-02-06 Andrew Pinski <>
PR c/13863
* c-common.c (c_decl_uninit_1): Remove.
(c_decl_uninit): Remove.
* c-common.h (c_decl_uninit): Remove prototype.
* c-lang.c (LANG_HOOKS_DECL_UNINIT): Delete.
* objc/objc-lang.c (LANG_HOOKS_DECL_UNINIT): Delete.
* c-simplify.c (gimplify_decl_stmt): Set TREE_NO_WARNING
on the decl where the initial is itself.
* function.c (uninitialized_vars_warning): Remove old comment
and check for DECL_INITIAL, replace with a check of TREE_NO_WARNING
and do not call the langhook.
* langhooks-def.h (LANG_HOOKS_DECL_UNINIT): Remove.
* langhooks.c (lhd_decl_uninit): Remove.
* langhooks.h (lhd_decl_uninit): Remove prototype.
2004-02-05 Richard Henderson <>
* tree-ssa-dom.c (record_const_or_copy_1): New.
(record_const_or_copy): New.
(thread_across_edge): Use it.
(dom_opt_finalize_block): Likewise. Tidy.
(record_equality): Split out from ...
(record_equivalences_from_incoming_edge): ... here.
2004-02-05 Richard Henderson <>
* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Allow
mixing PLUS and MINUS when folding operations.
2004-02-05 Andrew Macleod <>
* tree-pretty-print.c (dump_bb_header): Allow TDF_SLIM printing.
(dump_bb_end): Allow TDF_SLIM printing.
(dump_generic_bb_buff): Add flags parameter to dump_bb_end.
2004-02-05 Jan Hubicka <>
* alias.c (find_base_term, get_addr): Do not dereference NULL
pointer when all VALUE's locations has been invalidated.
(rtx_equal_for_memref_p): Simplify checking of VALUEs.
2004-02-04 Daniel Berlin <>
* tree-alias-ander.c (andersen_init): Reorder/Redo code so that we
actually free the memory in intraprocedural mode.
(andersen_cleanup): Ditto.
2004-02-04 Richard Henderson <>
* tree-ssa-ccp.c (get_value, visit_phi_node,
visit_assignment, dump_lattice_value): Tidy.
(evaluate_stmt): Don't do debug dump here.
(def_to_undefined): Merge into set_lattice_value.
(def_to_varying): Likewise, but retain as a wrapper.
(set_lattice_value): Tidy. Emit correct debug info.
(replace_uses_in): Remove strlen hacks.
(execute_fold_all_builtins): Fix DECL_BUILT_IN comparison.
Force folding of BUILT_IN_CONSTANT_P.
2004-02-04 Richard Henderson <>
* builtins.c (fold_builtin_expect): New.
(fold_builtin_1): Call it.
2004-02-04 Jeff Law <>
* jump.c (duplicate_loop_exit_test): Allow copying of the loop
exit test even if we do not find the LOOP_END note.
* domwalk.c: Update comments.
2004-02-04 Brian Booth <>
PR opt/13755
* tree-dfa.c (compute_alias_sets): set rename flag for variables
aliased by GLOBAL_VAR.
2004-02-04 Richard Henderson <>
* tree-ssa-dom.c (simplify_switch_and_lookup_avail_expr): New.
(eliminate_redundant_computations): Call it.
2004-02-03 Richard Henderson <>
PR opt/13869
* tree-cfg.c (cfg_remove_useless_stmts_bb): Correct handling of
boolean variables in COND_EXPR_COND.
2004-02-03 Richard Henderson <>
PR middle-end/13325
* builtins.c (fold_builtin_1): Rename from fold_builtin.
(fold_builtin): New.
* c-simplify.c (gimplify_expr_stmt): Check TREE_NO_WARNING.
* stmt.c (expand_expr_stmt_value): Likewise.
* tree.h (struct tree_common): Add nowarning_flag.
* c-typeck.c (build_unary_op): Use TREE_NO_WARNING instead.
* stmt.c (warn_if_unused_value): Likewise.
2004-02-03 Steven Bosscher <>
* tree-ssa-dce.c: Partial rewrite. The old DCE is now called
`conservative'. The more aggressive algorithm uses control
dependence and is called `aggressive' or cd-dce.
* timevar.def (TV_TREE_DCE): Rename.
* tree-pass.h: Declare extern pass_cd_dce.
* tree-optimize.c (init_tree_optimization_passes): Replace
the final DCE pass with a CD-DCE pass.
2004-02-01 Jan Hubicka <>
* cgraphunit.c (cgraph_mark_inline_edge): Fix insertion to
2004-01-30 Frank Ch. Eigler <>
* common.opt: Add support for -fmudflapth, -fmudflapir.
* invoke.texi: Document them.
* opts.c: Ditto.
* flags.h: Add new flags flag_mudflap_threads, _ignore_reads.
* toplev.c: Initialize new flags. Remove redundant code from
* tree-mudflap.c (*): Support new flag_mudflap_threads encoding.
(mf_xform_derefs_1): Support flag_mudflap_ignore_reads option.
* c-mudflap.c (mflang_flush_calls): Mark static ctor TREE_USED.
2004-01-30 Ian Lance Taylor <>
* gengtype-yacc.y (bitfieldlen): Add empty action.
2004-01-30 Diego Novillo <>
* Move configuration for libbanshee and
libgmp from
2004-01-30 Richard Henderson <>
PR opt/13524
* gengtype-yacc.y (struct_fields): Accept unnamed bitfields.
(bitfieldlen): Split from ...
(bitfieldopt): ... here.
* gimplify.c (mark_not_gimple): Remove.
(gimplify_call_expr): Don't ignore BUILT_IN_MD.
* tree-dfa.c (struct walk_state): Remove is_not_gimple.
(find_referenced_vars): Don't look for TREE_NOT_GIMPLE.
(find_vars_r, add_referenced_var): Likewise.
* tree-ssa-operands.c (get_stmt_operands, get_expr_operands): Likewise.
* tree-simple.h (mark_not_gimple): Remove.
* tree.h (struct tree_common): Remove not_gimple_flag.
2004-01-29 Jason Merrill <>
PR c++/13865
* c-simplify.c (gimplify_for_stmt): Reorganize to fix cleanups.
2004-01-29 Richard Henderson <>
PR c++/13543
* tree-inline.c (initialize_inlined_parameters): Register the
substitute reference also.
2004-01-29 Richard Henderson <>
* tree-inline.c (gimple_expand_calls_inline): Look inside
* tree-pretty-print.c (dump_generic_node): If TDF_DETAILS, dump
both name and uid.
2004-01-29 Zdenek Dvorak <>
* cfg.c (unlink_block): Reset prev_bb and next_bb.
2004-01-29 Jeff Law <>
Andrew MacLeod <>
* tree-ssa-live.h (tpa_next_partition): Correctly handle compressed
* tree-ssa.c (coalesce_ssa_name): New argument, flags. Callers
updated. Test SSANORM_COMBINE_TEMPS in flags rather than
(coalesce_vars): Either operand of a copy might not have a
partition when rewriting a subset of the variables out of SSA form.
(rewrite_vars_out_of_ssa): Honor -ftree-combine-temps by passing
in SSANORM_COMBINE_TEMPS in flags argument to remove_sas_form..
2004-01-29 Dale Johannesen <>
* (OBJS-common): Move tree-nomudflap.o...
(OBJS-archive): here, and remove duplicate tree-optimize.o.
2004-01-28 Richard Henderson <>
PR middle-end/13898
* gimplify.c (gimplify_init_constructor): Invoke
lhd_set_decl_assembler_name on the now-static variable.
2004-01-28 Richard Henderson <>
PR opt/13798
* expr.c (is_zeros_p): Remove. Change all callers to use
(categorize_ctor_elements_1, categorize_ctor_elements): New.
(count_type_elements): New.
(mostly_zeros_p): Use them.
* gimplify.c (tmp_var_id_num): Split out from create_tmp_var_raw.
(create_tmp_var_name): Likewise.
(gimplify_init_constructor): Drop constructors to readonly memory
as indicated by categorize_ctor_elements and can_move_by_pieces.
* tree.c (initializer_zerop): Handle VECTOR_CST. Don't check
* tree.h (categorize_ctor_elements): Declare.
(count_type_elements): Declare.
* (gimplify.o): Update dependencies.
(GTFILES): Add gimplify.c.
2004-01-27 Frank Ch. Eigler <>
* tree-mudflap.c (mx_register_decls): Support VLAs.
(mf_xform_derefs_1): Disable checking shortcut for VLAs.
* c-simplify.c (gimplify_decl_stmt): Add mudflap xref comment.
* gimplify.c (gimplify_bind_expr): Ditto.
2004-01-27 Daniel Berlin <>
* tree-ssa-pre.c: Add more comments describing SSAPRE and
the various functions.
(generate_expr_as_of_bb): Use PRED, a basic block argument, instead of
j, the index of that bb.
(generate_vops_as_of_bb): Ditto.
(insert_occ_in_preorder_dt_order): Rename to
2004-01-27 Daniel Berlin <>
* tree-ssa-pre.c (rename_1): Add some more comments.
2004-01-25 Andrew Pinski <>
PR c/13748
* c-decl.c (finish_function): Do not pass
the function on to optimizers if there was an error.
2004-01-23 Richard Henderson <>
PR opt/12941
* combine.c (SHIFT_COUNT_TRUNCATED): Provide default value.
(simplify_comparison): Don't simplify (eq (zero_extract c 1 r) 0)
2004-01-21 Richard Henderson <>
PR c/11267
* c-decl.c (c_finalize): New.
(finish_function): Use it. Genericize and finalize only non-nested
functions. Register nested functions with cgraph.
* c-simplify.c: Include cgraph.h.
(c_genericize): Genericize nested functions.
* gimplify.c (gimplify_expr): Use DECL_SAVED_INSNS to access
the struct function for the context.
* (c-simplify.o): Update dependencies.
2004-01-21 Steven Bosscher <>
PR opt/13767
* tree-cfg.c (simple_goto_p): Remove NONLOCAL_LABEL check.
2004-01-21 Dale Johannesen <>
* tree-dfa.c: Fix comment.
2004-01-21 Richard Henderson <>
PR opt/13681
* tree-ssa-operands.c (get_expr_operands): Handle (&x + c).
* tree-ssa-ccp.c (maybe_fold_offset_to_component_ref): Handle
flexible array members and lookalikes.
2004-01-21 Dale Johannesen <>
* tree-ssa-dom.c (cprop_into_stmt): Add convert call
to prevent type mismatches.
2004-01-21 Daniel Berlin <>
* tree-ssa-pre.c (load_modified_phi_result): PARM_DECL is okay
to not have a defbb.
(rename_1): Add a comment.
2004-01-21 Jeff Law <>
* tree-ssa-dom.c (find_equivalent_equality_comparison): Treat
(record_equivalences_from_stmt): Similarly.
(thread_across_edge): Fix formatting goof.
* tree-ssa-dom.c (thread_across_edge): Remove bogus restriction
which prevents threading around to the top of a loop.
* tree-ssa-dom.c (thread_across_edge): Handle SWITCH_EXPRs in the
target block in addition to COND_EXPRs.
* tree-ssa-dom.c (thread_across_edge): Create equivalences for
PHIs before looking at the statements in the destination
2004-01-20 Roger Sayle <>
* fold-const.c (fold_convert): Rename to fold_convert_const.
(fold_convert_const): Change arguments to take a tree_code,
a type and the operand/expression to be converted. Return
NULL_TREE if no simplification is possible. Add support for
(fold): Handle FIX_CEIL_EXPR and FIX_FLOOR_EXPR.
Adjust call to fold_convert to match new fold_convert_const.
Avoid modifying the tree passed to fold in-place.
(nondestructive_fold_unary_to_constant): Likewise, simplify
call to fold_convert to match new fold_convert_const.
2004-01-20 Daniel Berlin <>
* tree-alias-ander.c (andersen_op_assign): Update
prototype. Make this handle &x in the operands using
the addrargs parameter.
(andersen_init): Turn off ip_partial until variables
aliasing variables in other functions is resolved.
(andersen_add_var): Use newly renamed alias_var_new_with_aterm.
Fix comment.
(andersen_add_var_same): Ditto.
(andersen_function_call): Use ip_partial, not flag_unit_at_a_time.
* tree-alias-common.c (get_values_from_constructor): Add bitmap
and int * arguments. Used to mark operands that we are taking
address of.
(get_alias_var_decl): We should never see FIELD_DECL's right now.
(intra_function_call): Reverse ordering for slightly faster
projection merging.
(find_op_of_decl): New function.
(find_func_aliases): Use it.
Comment x = foo.y case.
Move get_alias_var_decl of arguments so we only call it if
Handle address of arguments in operations.
(create_fun_alias_var): tvar->var.
Set context of fakeargs.
Set context of fakedecls.
(create_fun_alias_var_ptf): tvar->var.
Set context of fakedecls.
(create_alias_vars): Only create alias vars for globals
* tree-alias-common.h (struct tree_alias_ops):
Update op_assign arguments.
(may_alias): Fix comment.
(same_points_to_set): Ditto.
(empty_points_to_set): Ditto.
* tree-alias-type.h: Rename alias_tvar_new_with_aterm
-> alias_var_new_with_aterm.
* tree-alias-type.c: Ditto.
2004-01-20 Richard Henderson <>
* tree-sra.c (get_scalar_for_field): Validate field.
(create_scalar_copies): Iterate over rhs fields too.
2004-01-19 Dale Johannesen <>
* params.def: Add PARAM_MAX_CALLS_GLOBAL_VAR and
params.h: Ditto.
tree-dfa.c: Use them.
doc/invoke.texi: Document them.
2004-01-19 Jeff Law <>
* tree-ssa.c (insert_phi_nodes_for): Always use fully pruned
SSA form.
* tree-flow.h: Update copyright dates.
(register_new_def): Declare.
* tree-ssa-dom.c: Update copyright dates.
Add tracking of current definition of each program variable just
like we do when rewriting into SSA form.
(get_value_for, set_value_for): Handle either an SSA_NAME or
regular variable.
(tree_ssa_dominator_optimize): Initialize and update CURRDEFS.
If we thread through a block with real statements, the destination
of those statements must be rewritten too.
(thread_across_edge): Skip nop statements at the start of a
(dom_opt_initialize_block_local_data): Clear block_defs
(record_equivalences_from_phis): Accept walk_data structure.
Call register_new_def appropriately.
(optimize_stmt): Call register_new_defs_for_stmt.
(dom_opt_finalize_block): Restore CURRDEFS appropriately.
(register_new_definitions_for_stmt): New.
* tree-ssa.c: Update copyright dates.
(register_new_def): No longer static. Accept additional argument
for the table to hold the new definition. Callers updated.
* gimplify.c: Update copyright dates.
* tree-cfg.c: Likewise.
* tree.h: Likewise.
* tree-iterator.c, tree-iterator.c: Use GCC rather than GNU CC.
* tree-ssa-pre.c, tree-ssa-live.h: Likewise.
2004-01-19 Daniel Berlin <>
* timevar.def (TV_TREE_SPLIT_EDGES): New timevar.
* tree-ssa-pre.c (split_critical_edges): Move from here
(pass_pre): Add PROP_no_crit_edges as required.
* tree-cfg.c (split_critical_edges): to here.
(pass_split_crit_edges): New pass.
* tree-optimize.c (tree_optimization_passes): Add NEXT_PASS
* tree-pass.h: Add PROP_no_crit_edges.
(pass_split_crit_edges): Declared.
2004-01-19 Frank Ch. Eigler <>
* tree-mudflap.c (mf_build_check_statement_for): Tolerate
incoming locus NULL pointer.
2004-01-18 Richard Henderson <>
* builtins.c (simplify_builtin_strcpy): Export. Take strlen argument.
(simplify_builtin_strncpy, simplify_builtin_strcmp): Similarly.
(simplify_builtin_strncmp): Similarly.
(simplify_builtin): Update to match.
* expr.h (simplify_builtin_strcmp, simplify_builtin_strncmp,
simplify_builtin_strcpy, simplify_builtin_strncpy): Declare.
* tree-pass.h (pass_fold_builtins): New.
* tree-optimize.c (init_tree_optimization_passes): Add it.
* tree-ssa-ccp.c (ccp_fold_builtin): Handle BUILT_IN_STRCPY,
(get_strlen): Don't cast to size_t.
(execute_fold_all_builtins, pass_fold_builtins): New.
2004-01-19 Jan Hubicka <>
PR opt/13729
* cgraphunit.c (cgraph_finalize_compilation_unit): Fix memory leak.
(cgraph_remove_unreachable_nodes): Do not mix analyzed and
2004-01-18 Richard Henderson <>
* tree-sra.c (REALPART_INDEX, IMAGPART_INDEX): Remove.
(sra_candidates, needs_copy_in): Use a bitmap. Update all users.
(struct sra_elt, sra_elt_hash, sra_elt_eq): New.
(sra_map_size): Remove.
(sra_map): Use a htab_t.
(lookup_scalar): Update to match.
(get_scalar_for_field, get_scalar_for_complex_part): Likewise.
(scalarize_structure_assignment): Use annotate_all_with_locus.
(csc_build_component_ref): Remove index argument.
(csc_build_complex_part): Take tree_code, not index.
(create_scalar_copies): Don't collect indicies.
(emit_scalar_copies): New.
(scalarize_modify_expr, scalarize_tree_list): Use it.
(scalarize_return_expr): Likewise.
(scalarize_structures): Simplify needs_copy_in iteration.
(scalarize_call_expr): Use annotate_all_with_locus.
(dump_sra_map_trav): Split from ...
(dump_sra_map): ... here. Update for hash table.
(tree_sra): Update for new datastructures.
2004-01-18 Richard Henderson <>
* tree-cfg.c (dump_function_to_file): Move ";; Function" header ...
* tree-optimize.c (execute_one_pass): ... here.
2004-01-17 Daniel Berlin <>
* tree-alias-common.c: s@_typevar@_var@g, s@_TVAR@_VAR@g,
* tree-alias-common.h: Ditto
* tree.h: Ditto
* tree-alias-ander.c: Ditto
* tree-alias-type.c: Ditto
* tree-alias-type.h: Ditto
2004-01-17 Richard Henderson <>
* tree-complex.c (gimplify_val): Copy TREE_BLOCK.
* tree-complex.c (gimplify_val): New.
(extract_component, do_binop, do_unop): Use it.
2004-01-17 Richard Henderson <>
* tree-complex.c (expand_complex_operations_1): Fix RETURN_EXPR
thinko in last change.
2004-01-18 Zdenek Dvorak <>
* cfghooks.c (split_block): Don't redirect edges.
* cfgrtl.c (rtl_split_block): Do it here.
* tree-cfg.c (tree_split_block): Ditto.
2004-01-17 Richard Henderson <>
* tree-cfg.c (verify_expr): Tidy. Check COND_EXPR for boolean
2004-01-17 Jan Hubicka <>
PR optimization/11761
* Remove tree-simple.c from GTYized files.
* tree-dfa.c (find_addressable_vars): Parse nontrivial ADDR_EXPRs.
(discover_nonconstant_array_refs_r): New static function.
(discover_nonconstant_array_refs): New global function.
* tree-flow.h (discover_nonconstant_array_refs): Declare.
* tree-simple.c (types_checked, types_in_memory): Kill.
(struct_needs_to_live_in_memory): Kill.
(needs_to_live_in_memory): aggregates are safe.
* tree-ssa.c (rewrite_out_of_ssa): Call the new function.
2004-01-17 Richard Henderson <>
PR opt/13718
* tree-complex.c (expand_complex_comparison): Handle COND_EXPR.
(expand_complex_operations_1): Likewise.
2004-01-17 Richard Henderson <>
* tree-sra.c (scalarize_tree_list): Take bitmap argument to
avoid emitting duplicates. Update all callers.
2004-01-17 Richard Henderson <>
PR opt/13718
* tree-complex.c (expand_complex_comparison): New.
(expand_complex_operations_1): Handle EQ_EXPR and NE_EXPR.
2004-01-16 Daniel Berlin <>
* tree-alias-common.c (get_alias_var): Handle BIT_FIELD_REF.
(find_func_aliases): Ditto.
Update for fact that basic component_refs are no longer
(create_fun_alias_var): Set DECL_CONTEXT on our faked declarations.
(pass_del_pta): PTA dumps info on delete, so it needs a name.
2004-01-16 Steven Bosscher <>
* tree-optimize.c (init_tree_optimization_passes): Run DCE
before the first dominator optimization pass.
2004-01-15 Brian Booth <>
Richard Henderson <>
(sra_map_size): New.
(make_temp): New.
(mark_all_vdefs): New.
(is_sra_candidate_decl): New.
(is_sra_candidate_ref): New.
(lookup_scalar): Use sra_map_size, make_temp.
(get_scalar_for_field): Rename from get_scalar_for.
(get_scalar_for_complex_part): New.
(can_be_scalarized_p): Handle COMPLEX_TYPE.
(scalarize_component_ref): Handle REAL/IMAGPART_EXPR.
(scalarize_structure_assignment): Tidy.
(find_candidates_for_sra): Handle COMPLEX_TYPE, return bool.
(csc_assign, csc_build_component_ref): Split out from ...
(create_scalar_copies): ... here. Handle COMPLEX_TYPE.
(csc_build_complex_part): New.
(scalarize_modify_expr): Use is_sra_candidate_foo.
(scalarize_tree_list): Likewise.
(scalarize_return_expr): Likewise.
(dump_sra_map): Split out from ...
(tree_sra): ... here. Tidy.
2004-01-15 Frank Ch. Eigler <>
* tree-mudflap.c (mf_xform_derefs): Accept void return statements.
2004-01-15 Andrew MacLeod <>
Jeff Law <>
* tree-ssa-dom.c (remove_local_expressions_from_table): New function
extracted from dom_opt_finalize_block.
(restore_vars_to_originalvalue): Likewise.
(extract_true_false_edges_from_block): Likewise.
(thread_across_edge): Handle if (cond) too.
(dom_opt_finalize_block): Use new functions. Handle if (cond).
* tree-ssa-dom.c (thread_across_edge): Accept dom_walk argument.
Record temporary equivalences created by PHIs and temporarily
const/copy propagate into conditionals.
(dom_opt_finalize_block): Thread across an edge to a dominated block
if the dominated block has PHIs. Remove temporary equivalenecs
created by PHIs in thread_across_edge. Update code to restore the
various hash tables to use the actual varray rather than a local
copy of the varray.
(simplify_rhs_and_lookup_avail_expr): Set the condition's code
before settings its operands.
* tree-ssa.c (create_temp): Use add_referenced_var rather than
an incomplete inline of its behavior. Also make sure to
set is_dereferenced_{load,store}, is_call_clobbered and is_stored.
* tree-ssa-live.c (build_tree_conflict_graph): Correctly handle
case where the result of a PHI is unused.
2004-01-15 Diego Novillo <>
* cfghooks.c (predicted_by_p): Add missing return.
2004-01-15 Richard Henderson <>
* tree-ssa-dom.c (optimize_stmt): Dump new statement if
folding succeeded.
2004-01-15 Kazu Hirata <>
* tree-cfg.c: Fix comment typos.
* tree-eh.c: Likewise.
* tree-inline.c: Likewise.
* tree-optimize.c: Likewise.
* tree-ssa.c: Likewise.
* tree-ssa-dom.c: Likewise.
* tree-ssa-operands.c: Likewise.
* tree-ssa-pre.c: Likewise.
* tree-tailcall.c: Likewise.
2004-01-14 Jan Hubicka <>
* basic-block.h: Include predict.h
(tree_predicted_by_p, rtl_predicted_by_p, rtl_predict_edge,
predict_edge_def): Declare.
* cfghooks.h (cfg_hooks): add predict_edge and predicted_by_p
(predict_edge, predicted_by_p): Declare.
* cfghooks.c (predict_edge, predicted_by_p): Declare.
* cfgrtl (rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Add new hooks.
* cse.c (struct cse_basic_block_data): Rename enum values to not
conflict with profile.h; update all uses.
* predict.c: Include tree-flow.h, ggc.h, tree-dump.h
(predicted_by_p): Rename to ...
(rtl_predicted_by_p): .. this one; make global
(tree_predicted_by_p): New.
(dump_prediction): Add FILE argument.
(predict_edge): Rename to ...
(rtl_predict_edge): .. this one.
(tree_predict_edge): New.
(combine_predictions_for_insn): Update calls of predict_edge.
(predict_loops): Break out from ...
(estimate_probability): ... here; update comments; move updating
of unknown probabilities from ...
(estimate_bb_frequencies): ... here.
(combine_predictions_for_bb): New.
(tree_predict_by_opcode): New.
(tree_estimate_probability): New.
* predict.h: Add include guard.
(predict_edge, predict_edge_def): Move prototypes to basic_block.h
* tree-cfg.c (tree_cfg_hooks): Add prediction hooks.
* tree-dump.c (dump_files): Add profile.
* tree-flow.h (struct edge_prediction): New structure.
(struct bb_ann_d): Add field predictions.
(tree_estimate_probability): Declare.
* tree-optimize.c (optimize_function_tree): Call tree_estimate_probability.
* tree.h (tree_dump_index): Add TDI_profile.
* tree-pass.h (pass_profile): Declare.
2004-01-14 Zdenek Dvorak <>
* basic-block.h (find_basic_blocks, cleanup_cfg,
delete_unreachable_blocks, merge_seq_blocks): Declare.
* cfgcleanup.c (merge_seq_blocks): New.
* output.h (find_basic_blocks, cleanup_cfg, delete_unreachable_blocks):
Declarations moved to basic-block.h.
* tree-cfg.c (tree_merge_blocks, tree_can_merge_blocks_p): New.
(cleanup_tree_cfg): Call merge_seq_blocks.
(tree_cfg_hooks): Add tree_can_merge_blocks_p and tree_merge_blocks.
2004-01-14 Zdenek Dvorak <>
* tree-cfg.c (tree_make_forwarder_block): Fix.
2004-01-14 Richard Henderson <>
* tree-complex.c: New file.
* (OBJS-common): Add it.
* tree-pass.h (pass_lower_complex): New.
* tree-optimize.c (init_tree_optimization_passes): Add it.
2004-01-14 Zdenek Dvorak <>
* (tree-ssa-loop.o): Add cfgloop.h dependency.
(cfghooks.o): Add TIMEVAR_H and toplev.h dependency.
* basic-block.h (struct edge_def): Use ir_type instead testing of
cfg_hooks directly.
(tidy_fallthru_edge, tidy_fallthru_edges, dump_bb, verify_flow_info):
Declaration removed.
* cfg.c (verify_flow_info, dump_bb): Moved to cfghooks.c.
* cfgcleanup.c (try_simplify_condjump): Changed due to change of
* cfghooks.c: Include timevar.h and toplev.h.
(cfg_hooks): Made static.
(tree_register_cfg_hooks, ir_type): New.
(verify_flow_info, dump_bb): Moved from cfg.c.
(redirect_edge_and_branch, redirect_edge_and_branch_force,
split_block, split_block_after_labels, move_block_after,
delete_basic_block, split_edge, create_basic_block,
create_empty_bb, can_merge_blocks_p, merge_blocks,
make_forwarder_block, tidy_fallthru_edge, tidy_fallthru_edges): New.
* cfghooks.h (struct cfg_hooks): Modified.
(redirect_edge_and_branch, redirect_edge_and_branch_force, split_block,
delete_basic_block, split_edge, create_basic_block, can_merge_blocks_p,
merge_blocks, make_forwarder_block): Changed into functions.
(loop_optimizer_init, loop_optimizer_finalize): Removed.
(HEADER_BLOCK, LATCH_EDGE): Moved into cfgloop.c.
(tidy_fallthru_edge, tidy_fallthru_edges, create_empty_bb,
verify_flow_info, dump_bb, ir_type): Declare.
(cfg_layout_rtl_cfg_hooks): Declare.
* cfglayout.c (copy_bbs): Don't call add_to_dominance_info.
* cfgloop.c (HEADER_BLOCK, LATCH_EDGE): Moved from cfghooks.h.
(update_latch_info, mfb_keep_just, mfb_keep_nonlatch): New functions.
(canonicalize_loop_headers): Use new semantics of make_forwarder_block.
* cfgloop.h (rtl_loop_optimizer_init, rtl_loop_optimizer_finalize):
(loop_optimizer_init, loop_optimizer_finalize): Declare.
* cfgloopmanip.c (split_loop_bb): Don't update dominators.
(remove_bbs): Don't call remove_bbs.
(create_preheader): Use make_forwarder_block.
(mfb_keep_just, mfb_update_loops): New static functions.
* cfgrtl.c (cfg_layout_split_block, rtl_split_block,
rtl_make_forwarder_block, rtl_create_basic_block,
rtl_delete_block, rtl_split_block, rtl_merge_blocks,
tidy_fallthru_edge, rtl_split_edge, cfg_layout_merge_blocks,
cfg_layout_split_edge): Parts not specific to rtl moved to cfghooks.c
(tidy_fallthru_edges): Moved to cfghooks.c.
(rtl_move_block_after): New.
(redirect_edge_with_latch_update, update_cfg_after_block_merging):
(rtl_cfg_hooks, cfg_layout_rtl_cfg_hooks): Modified.
* ifcvt.c (merge_if_block, find_cond_trap, find_if_case_1,
find_if_case_2): Don't update dominators.
* loop-init.c (rtl_loop_optimizer_init, rtl_loop_optimizer_finalize):
Replaced by rtl_loop_optimizer_init and rtl_loop_optimizer_finalize.
* loop-unswitch.c (unswitch_loop): Don't call add_to_dominance_info.
* toplev.c (rest_of_handle_loop2): Enter cfglayout mode here.
* tree-cfg.c (create_bb): Modified to suit create_basic_block hook.
(tree_redirect_edge_and_branch_1): Merged into
(create_blocks_annotations): Removed.
(tree_loop_optimizer_init, tree_loop_optimizer_finalize): Removed.
(tree_make_forwarder_block, remove_bb, tree_split_edge,
tree_redirect_edge_and_branch, tree_split_block,
tree_move_block_after): Partially moved to cfghooks.c.
(tree_duplicate_bb): New.
(PENDING_STMT): Moved to tree-flow.h.
(tree_register_cfg_hooks): Moved to cfghooks.c.
(build_tree_cfg): Don't call create_blocks_annotations.
(factor_computed_gotos, make_blocks): Use create_empty_bb.
(cleanup_tree_cfg): Use delete_unreachable_blocks.
(remove_unreachable_blocks, insert_bb_before): Removed.
(remove_phi_nodes_and_edges_for_unreachable_block): Modified.
(tree_find_edge_insert_loc, thread_jumps): Use cfg hooks.
(bsi_commit_edge_inserts): Update_annotations argument removed.
(tree_cfg_hooks): Modified.
* tree-flow.h (PENDING_STMT): Moved from tree-cfg.c.
(insert_bb_before, remove_unreachable_blocks,
remove_phi_nodes_and_edges_for_unreachable_block, tree_split_edge):
Declaration removed.
(bsi_commit_edge_inserts): Declaration changed.
(tree_duplicate_bb): Declare.
* tree-sra.c (scalarize_structures): Changed due to
bsi_commit_edge_inserts change.
* tree-ssa-dom.c (tree_ssa_dominator_optimize): Use
* tree-ssa-loop.c: Include cfgloop.h.
* tree-ssa-pre.c (split_critical_edges, tree_perform_ssapre): Use cfg
* tree-ssa.c (rewrite_trees, rewrite_vars_out_of_ssa): Changed due to
bsi_commit_edge_inserts change.
(ssa_redirect_edge): Record the phi arguments on the redirected edge.
* tree-tailcall.c (eliminate_tail_call): Clean stored phi arguments.
2004-01-13 Richard Henderson <>
* gimplify.c (gimplify_lhs_complex_part_expr): Remove.
(gimplify_modify_expr): Don't call it.
* tree-alias-common.c (HAVE_BANSHEE): Make sure it's defined.
(pass_build_pta): Set name.
2004-01-13 Zdenek Dvorak <>
* tree-tailcall.c (eliminate_tail_call): Add phi nodes for the call
(find_tail_calls): Ignore returns with virtual operands.
2004-01-12 Richard Henderson <>
* tree-pass.h: New file.
* gimple-low.c: Include tree-pass.h.
(lower_function_body): Make static, take no arguments. Set
dont_emit_block_notes and call reset_block_changes here.
(pass_lower_cf): New.
* toplev.c (general_init): Call init_tree_optimization_passes.
* toplev.h (init_tree_optimization_passes): Declare.
* tree-alias-ander.c: Include tree-pass.h.
(tree_dump_file, tree_dump_flags): Remove.
(andersen_init): Don't dump_begin.
(andersen_cleanup): Don't dump_end.
* tree-alias-common.c: Include tree-pass.h, timevar.h.
(currptadecl): Remove.
(create_alias_vars): Make static, take no args. Tidy ifdefs.
(delete_alias_vars): Likewise. Protect vs PTA_ANDERSEN.
(pass_build_pta, pass_del_pta): New.
* tree-alias-common.h (create_alias_vars): Delete decl.
(delete_alias_vars): Likewise.
* tree-cfg.c: Include tree-pass.h.
(tree_dump_file, tree_dump_flags): Remove.
(build_tree_cfg): Don't timevar, do init_flow. Ensure one bb.
Don't dump the function here.
(execute_build_cfg, pass_build_cfg): New.
(remove_useless_stmts): Make static, take no arguments.
(pass_remove_useless_stmts): New.
(remove_bb): Don't open the dump file.
* tree-dfa.c: Include tree-pass.h.
(tree_dump_file, tree_dump_flags): Remove.
(find_referenced_vars): Make static, take no args. Do init_tree_ssa.
(compute_may_aliases): Similarly. Don't timevar or open dump file.
Don't delete_alias_vars here.
(pass_referenced_vars, pass_may_alias): New.
* tree-dump.c (dump_files): Remove optimization dumps.
(extra_dump_files, extra_dump_files_in_use): New.
(extra_dump_files_alloced): New.
(dump_register): New.
(get_dump_file_info): New.
(dump_begin, dump_enabled_p, dump_flag_name): Use it.
(dump_enable_all): Handle extra_dump_files.
(dump_switch_p_1): Split out from dump_switch_p.
(dump_switch_p): Handle extra_dump_files.
* tree-dump.h (dump_register): Declare.
* tree-eh.c: Include tree-pass.h
(lower_eh_constructs): Make static, take no args. Don't timevar,
don't dump function.
(pass_lower_eh): New.
* tree-flow.h (remove_useless_stmts, find_referenced_vars,
compute_may_aliases, lower_function_body, rewrite_out_of_ssa,
tree_ssa_ccp, tree_ssa_dominator_optimize, tree_ssa_dce,
tree_ssa_loop_opt, lower_eh_constructs, tree_sra): Remove.
(rewrite_into_ssa): Update decl.
* tree-mudflap.c: Include tree-pass.h.
(mudflap_function_decls): Make static, take no args, don't process
functions with mf_marked_p.
(mudflap_function_ops): Likewise.
(gate_mudflap, pass_mudflap_1, pass_mudflap_2): New.
(mudflap_enqueue_decl): Don't open dump file.
(mudflap_enqueue_constant): Likewise.
* tree-nomudflap.c: Include tree-pass.h.
(mudflap_c_function_decls, mudflap_c_function_ops): Remove.
(pass_mudflap_1, pass_mudflap_2): New.
* tree-optimize.c: Include tree-pass.h.
(optimize_function_tree): Remove.
(tree_dump_file, tree_dump_flags, vars_to_rename): New.
(all_passes): New.
(execute_gimple, pass_gimple): New.
(execute_rebuild_bind, pass_rebuild_bind): New.
(gate_all_optimizations, pass_all_optimizations): New.
(execute_del_cfg, pass_del_cfg): New.
(register_one_dump_file, register_dump_files): New.
(dup_pass_1, init_tree_optimization_passes): New.
(current_properties, last_verified): New.
(execute_todo, execute_one_pass, execute_pass_list): New.
(tree_rest_of_compilation): Remove -O0 passes.
* tree-sra.c: Include tree-pass.h, flags.h.
(tree_dump_file, tree_dump_flags, vars_to_rename): Remove.
(tree_sra): Make static, take no args. Don't timevar or dump file.
(gate_sra, pass_sra): New.
* tree-ssa-ccp.c: Include tree-pass.h, flags.h.
(tree_dump_file, tree_dump_flags): New.
(tree_ssa_ccp): Make static, take no args. Don't timevar or dump file.
(gate_ccp, pass_ccp): New.
(substitute_and_fold): Take no args.
* tree-ssa-dce.c: Include tree-pass.h, flags.h.
(tree_dump_file, tree_dump_flags): New.
(tree_ssa_dce): Make static, take no args. Don't open dump file.
(gate_dce, pass_dce): New.
* tree-ssa-dom.c: Include tree-pass.h, flags.h.
(tree_dump_file, tree_dump_flags, vars_to_rename): Remove.
(tree_ssa_dominator_optimize): Make static, take no args, don't
timevar, don't dump file.
(gate_dominator, pass_dominator): New.
* tree-ssa-loop.c: Include tree-pass.h, flags.h.
(tree_dump_file, tree_dump_flags): Remove.
(tree_ssa_loop_opt): Make static, take no args, don't open dump file.
(gate_loop, pass_loop): New.
* tree-ssa-pre.c: Include tree-pass.h, flags.h.
(tree_dump_file, tree_dump_flags): Remove.
(execute_pre): Rename from tree_perform_ssapre, make static,
take no args, don't timevar, don't open dump file, don't allocate
(gate_pre, pass_pre): New.
* tree-ssa.c: Include tree-pass.h.
(tree_dump_file, tree_dump_flags, vars_to_rename): Remove.
(rewrite_into_ssa): Take no arguments, don't open dump file.
(rewrite_out_of_ssa): Make static, take no args, don't timevar,
don't open dump file. Disable TER if mudflap.
(pass_build_ssa, pass_del_ssa): New.
* tree-tailcall.c: Include tree-pass.h, flags.h.
(tree_dump_file, tree_dump_flags): Remove.
(tree_optimize_tail_calls_1): Rename from tree_optimize_tail_calls.
Make static, take only opt_tailcalls, don't dump file.
(execute_tail_recursion, gate_tail_calls, execute_tail_calls): New.
(pass_tail_recursion, pass_tail_calls): New.
* tree.h (enum tree_dump_index): Remove optimization dumps.
* (tree-alias-ander.o, tree-alias-common.o, tree-ssa.o,
tree-ssa-dom.o, tree-ssa-pre.o, tree-cfg.o, tree-tailcall.o,
tree-dfa.o, tree-eh.o, tree-ssa-loop.o, tree-optimize.o, gimple-low.o,
tree-mudflap.o, tree-ssa-dce.o, tree-ssa-ccp.o, tree-sra.o: Update
2004-01-12 Frank Ch. Eigler <>
* tree-mudflap.c (mf_xform_derefs): Restore instrumentation of
2004-01-11 Jan Hubicka <>
* tree-cfg.c (remove_usless_stmts_cond): Fold statement.
(remove_useless_stmts_1): Fold trees we know how to fold.
2004-01-09 Richard Henderson <>
* gimplify.c (gimplify_constructor): Merge into ...
(gimplify_init_constructor): ... here. Handle COMPLEX_TYPE and
(gimplify_lhs_complex_part_expr): New.
(gimplify_modify_expr): Call it.
* tree-simple.c (is_gimple_rhs): Accept COMPLEX_EXPR.
* c-pretty-print.c (pp_c_initializer): Accept any type CONSTRUCTOR.
(pp_c_initializer_list): Fix code expectations for VECTOR_TYPE and
2004-01-09 Steven Bosscher <>
PR optimization/13599
* tree-cfg.c (remove_useless_stmts_cond): Clear last-goto
before returning.
2004-01-09 Richard Henderson <>
* gimplify.c (gimplify_asm_expr): Fix ordering of ASM_INPUTS.
2004-01-09 Jan Hubicka <>
* cgraph.h (cgraph_clone_inlined_nodes): Declare.
* cgraphunit.c (cgrpah_clone_inlined_nodes): Make global.
(cgraph_mark_inline_edge): Sanity check that size is positive.
(cgraph_decide_inlining): Fix typo.
* tree-optimize.c (tree_rest_of_compilation): Fix node duplication
2004-01-09 Jan Hubicka <>
* tree-inline.c (estimate_num_insns_1): Fix.
2004-01-09 Richard Henderson <>
* tree-alias-ander.c, tree-cfg.c, tree-dfa.c, tree-mudflap.c,
tree-sra.c, tree-ssa-ccp.c, tree-ssa-dce.c, tree-ssa-dom.c,
tree-ssa-loop.c, tree-ssa-pre.c, tree-ssa.c, tree-tailcall.c: Rename
dump_file and dump_flags to tree_dump_file/flags.
2004-01-08 Frank Ch. Eigler <>
* tree-mudflap.c (mf_build_string): Properly mf_mark string.
(mf_varname_tree): Remove redundant marking.
* tree-optimize.c (tree_rest_of_compilation): Skip mudflap processing
of mf_marked functions.
* c-mudflap.c (mflang_flush_calls): mf_mark synthetic function.
2004-01-07 Diego Novillo <>
* (OBJS-common): Remove tree-must-alias.o
(tree-must-alias.o): Remove.
* common.opt (ftree-must-alias): Remove.
* flags.h (flag_tree_must_alias): Remove. Update all users.
* timevar.def (TV_TREE_MUST_ALIAS): Remove.
* toplev.c (f_options): Remove entry for -ftree-must-alias.
* tree-alias-common.c (local_alias_vars): Add GTY marker.
(local_alias_varnums): Likewise.
* tree-dfa.c (aliases_computed_p): Declare.
(dump_variable): Show variable UID and dereferenced bits.
(compute_may_aliases): Add arguments 'vars_to_rename' and 'phase'.
Do not call create_alias_vars.
Call promote_call_clobbered_vars
Do debugging dumps.
Set 'aliases_computed_p' to true before returning.
(create_memory_tags): Call may_be_aliased.
Mark new memory tags for renaming.
(compute_alias_sets): Don't do debugging dumps.
(find_variable_in): Move from tree-must-alias.c
(remove_element_from): Likewise.
(find_addressable_vars): Likewise
(promote_call_clobbered_vars): New.
(get_memory_tag_for): Mark the tag volatile if the pointed-to type
is volatile.
* tree-dump.c (dump_files): Remove entry for tree-mustalias.
Add entries for tree-ssa7, tree-dom3 and tree-dce3.
* tree-flow-inline.h (may_be_aliased): New.
* tree-flow.h (may_be_aliased): Declare.
(aliases_computed_p): Declare.
(tree_compute_must_alias): Remove.
* tree-must-alias.c: Remove.
* tree-optimize.c: Include tree-alias-common.h.
(optimize_function_tree): Call create_alias_vars before going into
SSA form.
Do not compute aliases until after the first DOM and DCE passes.
Run DOM and DCE once more after computing may-aliases.
* tree-ssa-dom.c (propagate_copy): Merge the dereferenced bit flags
when copy propagating pointers.
* tree-ssa-operands.c (get_stmt_operands): Assume that the
statement has no volatile operands.
(get_expr_operands): When processing an INDIRECT_REF expressions,
mark the statement as having volatile operands if aliases have not
been computed.
(add_stmt_operand): If the variable may be aliased and aliasing has
not been computed yet, mark the statement as having volatile
* tree-ssa.c (init_tree_ssa): Set aliases_computed_p to false.
(delete_tree_ssa): Likewise.
* tree.h (tree_dump_index): Remove TDI_mustalias.
Add TDI_dom_3, TDI_ssa_7 and TDI_dce_3.
* doc/invoke.texi: Remove must-alias documentation.
2004-01-07 Jeff Law <>
* tree-ssa-dce.c (find_useful_stmts): Do not consider PHIs for
virtual operands inherently necessary.
2004-01-07 Zdenek Dvorak <>
* tree-dfa.c (free_df_for_stmt, free_df): New functions.
(compute_immediate_uses_for_stmt): Record uses in VDEFs.
* tree-flow.h (free_df, kill_redundant_phi_nodes): Declare.
* tree-optimize.c (optimize_function_tree): Call
* tree-ssa-ccp.c (finalize): Call free_df.
* tree-ssa.c (replace_immediate_uses, raise_value,
kill_redundant_phi_nodes): New functions.
2004-01-06 Jeff Law <>
* tree-cfg.c (make_exit_edges, is_ctrl_altering_stmt): Use
current_function_has_nonlocal_label instead of
* gimplify.c (gimplify_expr): Set has_nonlocal_label in the
appropriate function's struct function rather than setting
a bit in the FUNCTION_DECL.
2004-01-06 Jan Hubicka <>
* expr.c (string_constant): Recognize array_ref.
2004-01-06 Richard Henderson <>
* builtins.c (builtin_save_expr): New.
(expand_builtin_mathfn, expand_builtin_mathfn_2,
expand_builtin_strcmp, expand_builtin_strncmp,
expand_builtin_strcat, fold_builtin_cabs): Use it.
2004-01-06 Jan Hubicka <>
* fold-const.c (fold): Do not rebuild comparison when nothing
2004-01-05 Jan Hubicka <>
* tree-ssa-ccp.c (ccp_fold_builtin): Return early for builtins
taking no arugment.
2004-01-05 Steven Bosscher <>
* tree-ssa-dce.c: Clean up whitespace.
* tree-cfg.c (tree_verify_flow_info): Fix complaint about
missing or wrong labels in the targets of a conditional branch.
2004-01-05 Richard Henderson <>
* tree-ssa-dom.c (record_equivalences_from_incoming_edge): Check
for signed zeros before recording value.
* (tree-ssa-dom.o): Depend on real.h.
2004-01-05 Jeff Law <>
* tree-ssa-dom.c (cprop_into_stmt): Remove hack which prevented
copy propagation into statements with virtual operands, but no
real operands.
* tree-ssa-dom.c (tree_ssa_dominator_optimize): Correctly handle
the case where an edge we wish to redirect is split by the out of SSA
2004-01-05 Richard Henderson <>
* c-tree.h (struct lang_type): Add enum_min, enum_max.
* c-decl.c (finish_enum): Set them. Set TYPE_MIN/MAX_VALUE to
the limits of the compatible type, not to the enumerators.
(check_bitfield_type_and_width): Use them.
(finish_struct): Clear allocated struct lang_type.
* gimplify.c (gimplify_switch_expr): Remove special handling of
outer cast in a switch.
* tree-ssa-dom.c (record_equivalences_from_incoming_edge): Likewise.
2004-01-05 Daniel Berlin <>
* tree-ssa-pre.c (added_phis): Removed.
Remove gt-tree-ssa-pre.h.
(process_left_occs_and_kills): ASM_EXPR's block load pre.
* (GTFILES): Don't process tree-ssa-pre.c.
gt-tree-ssa-pre.h isn't a gtfile anymore.
2004-01-05 Andrew Pinski <>
* config.gcc (powerpc-*-darwin*): Make libbanshee rebuild
on PPC darwin.
2004-01-05 Richard Henderson <>
* gimplify.c (gimplify_expr): Move check for error_mark inside
the main loop.
2004-01-04 Jan Hubicka <>
* (cgraph.o, cgraphunit.o): Add intl.h dependency.
* cgraph.c (create_edge, dump_cgraph): Update to use inline_failed
* cgraph.h (cgraph_edge): Replace inline_call by inline_failed
(cgraph_inline_p): Add extra argument reason.
* cgraphunit.c: Minor formating fixes.
cgraph_first_inlined_callee): New functions.
(record_call_1): Record builtins too.
(cgraph_analyze_function): Update inline_failed messages.
(cgraph_mark_functions_to_output, cgraph_expand_function, cgraph_inlined_into,
cgraph_inlined_callees, cgraph_estimate_growth): Update to use inline_failed.
(cgraph_check_inline_limits): Likewise; Add argument reason.
(cgraph_set_inline_failed): New static function.
(cgraph_decide_inlining_of_small_function, cgraph_decide_inlining): Set
(cgraph_inline_p): Add new argument reason.
* tree-inline.c (expand_call_inline): Update warning.
2004-01-04 Andreas Jaeger <>
* common.opt: Re-order some options in ASCII collating orders.
2004-01-03 Richard Henderson <>
* toplev.c (rest_of_compilation): Fixup merge error wrt
* tree.h (FUNCTION_RECEIVES_NONLOCAL_GOTO): Use unsigned_flag.
2004-01-02 Jan Hubicka <>
* c-decl.c (duplicate_decls): Output DIE of extern inline function
only when it can be inlined.
* c-objc-common.c (c_disregard_inline_limits): When not inlining
extern inline functions do not disregard.
* cgraphunit.c (cgraph_analyze_function): When not inlining do not set
(cgraph_decide_inlining): Limit work done when not inlining.
(cgrpah_decide_inlining_incrementally): Likewise.
* tree-optimize.c (tree_rest_of_compilation): Do not call
when there is nothing to inline.
2004-01-01 Richard Henderson <>
* c-common.c (c_expand_expr): Don't handle STMT_EXPR.
* c-objc-common.c (c_objc_common_finish_file): Use expand_expr.
* c-semantics.c (lang_expand_stmt, lang_expand_decl_stmt,
expand_cond, genrtl_do_pushlevel, genrtl_goto_stmt, genrtl_expr_stmt,
genrtl_expr_stmt_value, genrtl_decl_stmt, genrtl_if_stmt,
genrtl_while_stmt, genrtl_do_stmt_1, genrtl_do_stmt,
genrtl_return_stmt, genrtl_for_stmt, genrtl_break_stmt,
genrtl_continue_stmt, genrtl_scope_stmt, genrtl_switch_stmt,
genrtl_case_label, genrtl_compound_stmt, genrtl_asm_stmt,
genrtl_cleanup_stmt, expand_stmt, find_reachable_label,
find_reachable_label_1, expand_unreachable_if_stmt,
expand_unreachable_stmt): Remove.
* c-common.h: Update.
2003-12-31 Richard Henderson <>
* c-mudflap.c (mflang_register_call): Remove.
(mflang_flush_calls): Use start_function/finish_function.
* tree-mudflap.c (mf_init_extern_trees): Tidy.
(mf_decl_cache_locals): Fix chaining for empty body.
(deferred_static_decl_labels): Remove.
(deferred_static_decls_init): Remove.
(mudflap_register_call): New.
(mudflap_enqueue_decl): Use it. Remove label argument.
(mudflap_enqueue_constant): Likewise.
(mudflap_finish_file): Update to match.
* tree-mudflap.h (mudflap_enqueue_decl): Remove label argument.
(mudflap_enqueue_constant): Likewise.
(mflang_register_call): Remove.
* tree-nomudflap.c (mudflap_enqueue_decl): Remove label argument.
(mudflap_enqueue_constant): Likewise.
* tree-optimize.c (tree_ssa_finish): Don't create NULL bodies.
* varasm.c (make_decl_rtl): Update mudflap_enqueue_decl call.
(output_constant_def_contents): Similarly for mudflap_enqueue_constant.
2003-12-26 Sebastian Pop <>
* tree-cfg.c (print_loop, print_pred_bbs, print_succ_bbs,
debug_loop_ir, print_loop_ir): New.
* tree-flow.h (debug_loop_ir, print_loop_ir): Declare.
2003-12-23 Jeff Law <>
* tree-cfg.c (tree_find_edge_insert_loc): Do not use the target
block as an insertion location if the target block has PHI nodes.
2003-12-23 Jan Hubicka <>
* cgraphunit.c (cgraph_mark_inline): Accept argument edge; return
next edge not redirected.
(cgraph_recursive_inlining_p): Simplify.
(cgraph_decide_inlining*): Update calls of cgraph_mark_inline.
2003-12-22 Toon Moene <>
* tree-alias-common.c (find_func_aliases): Do not call
intra_function_call for languages assuring no aliasing between
arguments (by themselves) and global memory.
2003-12-21 Jan Hubicka <>
* tree-ssa-ccp.c (fold_stmt): Return when there is no RHS
(get_rhs): Return for RETURN_EXPR with no operand.
2003-12-21 Zdenek Dvorak <>
* tree-cfg.c (tree_make_forwarder_block): Use split_block.
(tree_split_block): New.
(tree_cfg_hooks): Add tree_split_block.
(tree_loop_optimizer_init): Enable force_single_succ_latches.
* cfgloopmanip.c (loop_split_edge_with): Don't update dominators.
* cfgrtl.c (rtl_split_edge, cfg_layout_split_edge): Update dominators.
2003-12-19 Daniel Berlin <>
* tree-dfa.c (alias_stats_d): New structure.
(alias_stats): New variable.
(create_memory_tags): Zero out alias_stats.
(dump_alias_stats): New function.
(compute_alias_sets): Call it if TDF_STATS is set.
(may_alias_p): Collect the various statistics.
2003-12-19 Diego Novillo <>
* gimple-low.c (expand_var_p): Always expand volatiles.
* tree-dfa.c (find_referenced_vars): Move up in the file.
(create_memory_tags): New local function.
(compute_may_aliases): Call it.
(add_referenced_var): Move code to create memory tags and create
aliasing arrays to create_memory_tags.
(get_memory_tag_for): Don't mark memory tags volatile. Mark them
* tree-flow.h (var_ann_d): Add bitfields is_dereferenced_store and
(add_call_clobbered_var): Remove.
* tree-ssa-operands.c (check_optype_freelist): Mark arguments
(add_optype_freelist): Likewise.
(add_stmt_operand): Don't add operands for volatile variables.
2003-12-19 Kazu Hirata <>
* dominance.c: Fix comment typos.
* et-forest.c: Likewise.
* et-forest.h: Likewise.
* tree-cfg.c: Likewise.
* tree-eh.c: Likewise.
* tree-mudflap.c: Likewise.
* tree-optimize.c: Likewise.
* tree-pretty-print.c: Likewise.
* tree-ssa-ccp.c: Likewise.
* tree-ssa-dom.c: Likewise.
* tree-ssa.c: Likewise.
* tree-tailcall.c: Likewise.
* tree.def: Likewise.
* tree.h: Likewise.
2003-12-18 Jason Merrill <>
PR c++/12453
* c-simplify.c (stmt_expr_last_stmt): Split out from...
(gimplify_stmt_expr): Here.
* c-common.h: Declare it.
2003-12-18 Zdenek Dvorak <>
* et-forest.h (et_forest_create, et_forest_delete,
et_forest_add_node, et_forest_add_edge, et_forest_remove_node,
et_forest_remove_edge, et_forest_parent,
et_forest_common_ancestor, et_forest_node_value,
et_forest_enumerate_sons): Declarations removed.
(struct et_node): New.
(et_new_tree, et_free_tree, et_set_father, et_split, et_nca,
et_below): Declare.
* et-forest.c (struct et_forest_occurrence, struct et_forest,
struct et_forest_node): Removed.
(et_forest_create, et_forest_delete,
et_forest_add_node, et_forest_add_edge, et_forest_remove_node,
et_forest_remove_edge, et_forest_parent,
et_forest_common_ancestor, et_forest_node_value,
et_forest_enumerate_sons, splay, remove_all_occurrences,
find_leftmost_node, find_rightmost_node, calculate_value): Removed.
(struct et_occ): New.
(et_nodes, et_occurences): New.
(set_depth, set_depth_add, set_prev, set_next, et_recomp_min,
et_check_occ_sanity, et_check_sanity, et_check_tree_sanity,
record_path_before_1, record_path_before, check_path_after_1,
check_path_after, et_splay, et_new_occ, et_new_tree,
et_free_tree, et_set_father, et_split, et_nca, et_below): New.
* basic-block.h (struct basic_block_def): New field dom.
(struct dominance_info): Type removed.
(calculate_dominance_info, free_dominance_info,
nearest_common_dominator, set_immediate_dominator,
get_immediate_dominator, dominated_by_p, get_dominated_by,
add_to_dominance_info, delete_from_dominance_info,
recount_dominator, redirect_immediate_dominators,
iterate_fix_dominators, verify_dominators): Declarations
(enum dom_state): New.
(dom_computed): New variable.
(first_dom_son, next_dom_son): Declare.
* dominance.c (struct dominance_info): Removed.
(BB_NODE, SET_BB_NODE): Removed.
(calculate_dominance_info, free_dominance_info,
nearest_common_dominator, set_immediate_dominator,
get_immediate_dominator, dominated_by_p, get_dominated_by,
add_to_dominance_info, delete_from_dominance_info,
recount_dominator, redirect_immediate_dominators,
iterate_fix_dominators, verify_dominators,
debug_dominance_info): Work over new datastructure. Access
dominance datastructures through CFG.
(assign_dfs_numbers, compute_dom_fast_query, first_dom_son,
next_dom_son): New.
* tree-cfg.c (pdom_info): Variable removed.
(create_bb): Add the block to the dominance information.
(cleanup_tree_cfg): Let updating of the dominance on the
individual passes.
(remove_bb): Don't handle pdom.
(cleanup_control_expr_graph, tree_make_forwarder_block,
thread_jumps): Invalidate the dominators.
(tree_split_edge): Update the dominators.
(compute_dominance_frontiers_1, compute_dominance_frontiers,
tree_verify_flow_info, tree_loop_optimizer_init): Use the new
interface to dominators.
* domwalk.c (walk_dominator_tree): Do not use dom_children.
* tree-flow-inline.h (add_dom_child, remove_dom_child,
clear_dom_children, dom_children): Removed.
* tree-flow.h (struct bb_ann_d): Dom_children field removed.
(add_dom_child, dom_children, build_dominator_tree): Declaration
(compute_dominance_frontiers): Declaration changed.
* tree-optimize.c (optimize_function_tree): Free dominance
information in the end.
* tree-ssa-dom.c (tree_ssa_dominator_optimize,
dom_opt_finalize_block): Do not use dom_children.
* tree-ssa-pre.c (fast_a_dominates_b, build_dfs_id_array_1,
build_dfs_id_array): Removed.
(pre_idom, dfs_id, dfs_id_last): Variables removed.
(build_dfn_array): Do not use dom_children.
(eref_compare, load_modified_phi_result, rename_1, reaching_def,
finalize_1, collect_expressions, tree_perform_ssapre): Use the
new interface to the dominance information.
* tree-ssa.c (struct mark_def_sites_global_data): Idom field
(set_livein_block, verify_use, verify_phi_args,
rewrite_into_ssa, mark_def_sites, verify_ssa): Use the new
interface to the dominance information.
(build_dominator_tree): Removed.
* tree-tailcall.c (tree_optimize_tail_calls): Invalidate
dominance information.
* bt-load.c (dom): Variable removed.
(augment_live_range, combine_btr_defs, migrate_btr_def,
migrate_btr_defs, branch_target_load_optimize): Updated for the
new interface for dominance information.
* cfglayout.c (copy_bbs): Removed loops argument. Updated for
the new interface for dominance information.
* cfglayout.h (copy_bbs): Declaration changed.
* cfgloop.c (flow_loop_pre_header_find, flow_loops_cfg_dump,
flow_loop_scan, canonicalize_loop_headers, flow_loops_find): Updated
for the new interface for dominance information.
(flow_loop_scan): Loops argument removed.
(flow_loops_free): Don't release dominators.
* cfgloop.h (struct cfg): Dom field removed.
(flow_loop_scan, loop_split_edge_with, simple_loop_p,
just_once_each_iteration_p, split_loop_bb): Declaration changed.
* cfgloopanal.c (simple_loop_exit_p, simple_increment,
just_once_each_iteration_p, simple_loop_p): Remove loops argument.
Updated for the new interface for dominance information.
* cfgloopmanip.c (remove_bbs, find_path, create_preheader,
split_loop_bb, loopify, duplicate_loop_to_header_edge,
force_single_succ_latches, loop_split_edge_with): Ditto.
(create_loop_notes): Free the dominators.
* gcse.c (dominators): Variable removed.
(free_code_hoist_mem, compute_code_hoist_data, hoist_code):
Updated for the new interface for dominance information.
* ifcvt.c (post_dominators): Variable removed.
(mark_loop_exit_edges, merge_if_block, find_if_header,
find_cond_trap, find_if_case_1, find_if_case_2, if_convert):
Updated for the new interface for dominance information.
* loop-init.c (rtl_loop_optimizer_init,
rtl_loop_optimizer_finalize): Ditto.
* loop-unroll.c (decide_peel_simple, decide_peel_once_rolling,
decide_peel_completely, decide_unroll_stupid,
decide_unroll_runtime_iterations): Loops argument removed.
Updated for the new interface for dominance information.
(unroll_and_peel_loops, peel_loops_completely,
unroll_loop_runtime_iterations): Updated for the new interface for
dominance information.
* loop-unswitch.c (may_unswitch_on_p, unswitch_loops,
unswitch_single_loop, unswitch_loop): Updated for the new
interface for dominance information.
* predict.c (process_note_predictions, process_note_prediction,
estimate_probability, note_prediction_to_br_prob): Ditto.
* sched-rgn.c (find_rgns, init_regions): Ditto.
* toplev.c (rest_of_handle_branch_prob): Free the dominators.
2003-12-18 Jeff Law <>
* tree-ssa-dom.c (edges_to_redirect, redirection_targets): Merged
into a single varray "redirection_edges".
(tree_ssa_dominator_optimize): Twiddle initialization, finalization
and accessors to redirection information based on combining varrays.
Get the threading destination from the saved edge rather than from a
saved block. Mark variables appearing in PHIs at the jump thread
destination to be taken out of SSA form.
(thread_across_edge): Save the edge into the destination block
rather than the destination block itself. Twiddle based on
combining varrays of jump threading information.
* tree-flow.h (tree_block_forwards_to): Returns an edge rather than
a block.
* tree-cfg.c (tree_block_forwards_to): Return the edge leading to
the target block rather than the target block itself.
2003-12-18 Daniel Berlin <>
* tree-dfa.c (get_memory_tag_for): Don't put things with different
points-to sets in the same memory tag.
2003-12-18 Jan Hubicka <>
* c-common.c (handle_nonnull_attribute, check_function_nonnull):
Initialize arg_num.
* c-format.c (handle_format_attribute): Initialize format_num.
* rtlanal.c (get_related_value): Initialize get_jump_table_offset
2003-12-18 Zdenek Dvorak <>
* stmt.c (expand_start_loop, expand_loop_continue_here,
expand_end_loop): Don't create loop notes.
2003-12-18 Zdenek Dvorak <>
Jeff Law <>
* tree-cfg.c (tree_node_shared_p): Explicitly allow sharing of
CST nodes.
* tree-simple.c (is_gimple_rhs): Allow CST nodes.
(is_gimple_min_invariant): Reject constants with TREE_OVERFLOW set.
* tree-ssa-ccp (visit_assignment): Test is_gimple_min_invariant
after munging bitfields.
* tree-ssa-dom.c (record_equivalences_from_stmt): Similarly.
2003-12-17 Jan Hubicka <>
Based on patch by Dale Johannesen
* expr.c (MOVE_RATIO, CLEAR_RATIO): Move to ...
* expr.h (MOVE_RATIO, CLEAR_RATIO): ... here
2003-12-17 Jan Hubicka <>
* (sibcall.o): Kill.
(tree-tailcall.o): Add except.h dependency
* sibcall.c: Kill.
(purge_reg_equiv_notes, purge_mem_unchanging_flag): Move to ...
* calls.c (purge_reg_equiv_notes, purge_mem_unchanging_flag) ... here.
(expand_call): Do not produce placeholders; do not deal with tail
recursion; set tail_call_emit.
(fixup_tail_calls): New.
* expr.h (fixup_tail_calls): Declare.
* toplev.c (rest_of_handle_sibling_calls): Kill.
(rest_of_compialtion): Do not use rest_of_handle_sibling_calls;
call fixup_tail_calls.
* tree-dump.c (dump_files): Add tail2
* tree-flow.h (tree_optimize_tail_calls): Update prototype.
* tree-optimize.c (optimize_function_tree): Do tail optimization twice.
* tree-tailcall.c: Inlucde except.h
(suitable_for_tail_call_opt_p): New.
(optimize_tail_call): Add opt_tailcalls argument; optimize tailcalls.
(tree_optimize_tail_calls): Add opt_tailcalls/pass arguments.
* tree.h (CALL_EXPR_TAILCALL): New.
(tree_dump_index): Add tail2
* function.h (struct function): Add tail_call_emit field.
2003-12-17 Jan Hubicka <>
* tree-inline.c (estimate_num_insns_1): Check that all nodes are
known; add missing nodes; fix MODIFY_EXPR
2003-12-16 Jason Merrill <>
PR middle-end/12920
* stor-layout.c (layout_type): Just return if type is
* c-decl.c (grokdeclarator): Immediately layout an
ARRAY_TYPE used in a pointer-to-array declarator.
2003-12-16 Diego Novillo <>
* tree-dfa.c (may_alias_p): If VAR and PTR are pointers with the
same alias set, return false.
(get_memory_tag_for): Group based on alias set classes, not on
conflicting alias sets.
* tree-must-alias.c (promote_var): Don't bring aliases over when
all the may-aliases of a non-promotable variable are promoted.
2003-12-16 Andrew MacLeod <>
* tree-flow-inline.h (free_vuse, free_vdefs): Moved to
(get_def_ops, get_use_ops, get_vdef_ops, get_vuse_ops): Use the new
more direct structure pointer.
(get_use_op_ptr, get_def_op_ptr): Cast is no longer necessary.
* tree-flow.h (struct stmt_ann_d): Replace operands and voperands
pointers with pointers directly to the operand types.
* tree-ssa-dom.c (cprop_into_stmt): Use new stmt based interface to
free virtual operands. Check virtual bases of both VUSE and VDEF.
* tree-ssa-operands.c (struct voperands_d): Declare here, used only
for previous_vops during stmt operand construction.
(struct vecmanage_d, vecmanage_add_segmen, vecmanage_add_special,
vecmanage_init, vecmanage_tree_ptr_init, vecmanage_fini, check_free,
vecmanage_new_vector, vecmanage_new_tree_ptr_vector,
vecmanage_free_vector): Remove.
(allocate_ssa_op_vec, free_ssa_op_vec, allocate_ssa_virtual_op_vec,
allocate_operands_t, allocate_voperands_t): Remove.
(finalize_new_ssa_operands, inalize_new_ssa_virtual_operand): Remove.
(struct freelist_d): New. List of free operand structures.
(check_optype_freelist): New. Choose memory from freelist, if available.
(add_optype_freelist): New. Add structure to freelist, if appropriate.
(allocate_def_optype): New. Allocate a def operand list from GC.
(allocate_use_optype): New. Allocate a useoperand list from GC.
(allocate_vdef_optype): New. Allocate a vdef operand list from GC.
(allocate_vuse_optype): New. Allocate a vuse operand list from GC.
(free_uses, free_defs, free_vuses, free_vdefs): Use GC and the freelist.
(remove_vuses, remove_vdefs): New. External interface to remove virtual
(init_ssa_operands, fini_ssa_operands): Ensure the free list is empty.
(finalize_ssa_defs, finalize_ssa_use, finalize_ssa_vdefs,
finalize_ssa_vuses): Use new direct pointers from the stmt annotation.
(append_vdef, append_vuse): No need to hack prev_vops pointer now.
(get_stmt_operands): use new freeing interface, keep previous vops in
their own local structure for now, passing its address around.
* tree-ssa-operands.h (struct def_optype_d, struct use_optype_d,
struct vdef_optype_d, struct vuse_optype_d): Implement as a single
dynamically allocated structure.
(struct operands_d, struct operands_d): Remove.
* tree-ssa-pre.c (subst_phis): Remove virtual operands using new funcs.
2003-12-16 Jan Hubicka <>
* tree-cfg.c (verify_addr_expr): Rename to ....
(verify_expr): ... this one; check that no SSA names are on
(verify_stmt, verify_stmts): Update calls of verify_addr_expr.
Revert until initializers are made language independent:
* cgraphunit.c (record_call_1): Do not call analyze_expr hook
* langhooks-def.h (LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR): Kill.
* longhooks.h (lang_hooks_for_callgraph): Kill analyze_expr.
2003-12-16 Zdenek Dvorak <>
* tree-pretty-print.c (dump_bb_header): Show block number when
there is no label.
(pp_cfg_jump): Show labels in addition to block numbers.
(dump_generic_bb_buff): Always call dump_bb_header.
2003-12-16 Jan Hubicka <>
* cgraphunit.c (cgraph_remove_unreachable_nodes): Fix typo;
improve comments; cleanup linked list mantenance.
2003-12-15 Diego Novillo <>
* tree-sra.c (can_be_scalarized_p): Reject volatile variables.
* sibcall.c (skip_copy_to_return_value): Initialize 'hardret' and
2003-12-16 Jan Hubicka <>
* cgraph.c (cgraph_remove_node): Ignore DECL_EXTERNAL clones.
* cgraphunit.c (verify_cgraph_node): Do not insist on unemmited extern
inline functions to be valid.
(cgraph_finalize_compilation_unit): Fix ordering.
(cgraph_mark_functions_to_output): Do not insist on DECL_EXTERNAL
nodes to be reclaimed.
(cgraph_remove_unreachable_nodes): New function.
(cgraph_decide_inlining): use it.
2003-12-15 Andrew MacLeod <>
* (TREE_FLOW_H): Add dependence on tree-ssa-operands.h
(OBJS-common): Add tree-ssa-operands.o
(tree-ssa-operands.o): Add dependencies.
(GTFILES): Add tree-ssa-operands.[ch].
* tree-dfa.c (get_stmt_operands, get_expr_operands, add_stmt_operand,
note_addressable, add_def, add_use, add_vde, add_vuse,
add_call_clobber_ops, add_call_read_ops): Moved to tree-ssa-operands.c.
(compute_immediate_uses_for_stmt): Use new optypes interface.
(cleanup_operand_arrays): Delete.
(collect_dfa_stats_r): Use new optypes interface.
(get_call_flags): Moved to tree-ssa-operands.c.
(vdefs_disappeared_p, mark_new_vars_to_rename): Use optypes interface.
* tree-flow-inline.h (def_ops, use_ops, vdef_ops, vuse_ops): Use new
(free_vuses): New. Clear and release vuses.
(free_vdefs): New. Clear and release vdefs.
(get_use_ops_ptr): New. Get address of a use op.
(get_def_ops_ptr): New. Get address of a use op.
(get_vdef_result_ptr): New. Get address of a use op.
(get_vdef_op_ptr): New. Get address of a use op.
(get_vuse_op_ptr): New. Get address of a use op.
(start_ssa_stmt_operands): New. Entry point to start processing stmt
* tree-flow.h (struct operands_d, struct voperands_d): Move to
(struct stmt_ann_d): Add GTY markers to operands.
* tree-pretty-print.c (dump_vops): Use optypes interface.
* tree-sra.c (create_scalar_copies): Use optypes interface.
(scalarize_structures, scalarize_modify_exp): Use optypes interface.
* tree-ssa-ccp.c (visit_stmt, ccp_fold, initialize, replace_uses_in,
likely_value, set_rhs): Use optypes interface.
* tree-ssa-dce.c (find_useful_stmts, stmt_useful_p, process_worklist):
Use optypes interface.
* tree-ssa-dom.c (thread_across_edge, thread_jumps_walk_stmts): Use
optypes interface.
(cprop_into_stmt): Rewrite using new interface.
(eliminate_redundant_computations, record_equivalences_from_stmt,
optimize_stmt, avail_expr_hash, avail_expr_eq): Use optypes interface.
* tree-ssa-live.c (create_ssa_var_map, calculate_live_on_entry,
build_tree_conflict_graph,register_ssa_partitions_for_vars): Use
optypes interface.
* tree-ssa-pre.c (names_match_p, maybe_find_rhs_use_for_var,
expr_phi_insertion, same_e_version_real_occ_real_occ, opnum_of_phi,
generate_expr_as_of_bb, generate_vops_as_of_bb, subst_phis,
load_modified_real_occ_real_occ, same_e_version_phi_result, can_insert,
get_default_def, reaching_def, process_left_occs_and_kills,
collect_expressions): Use optypes interface.
* tree-ssa.c (mark_def_sites, check_replaceable, find_replaceable_in_bb,
dump_replaceable_exprs, rewrite_trees, verify_ssa, rewrite_stmt): Use
optypes interface.
(init_tree_ssa): Initialize new operand data structures.
(delete_tree_ssa): Free new operand structures.
* tree.h (VDEF_RESULT, VDEF_OP, NUM_VDEFS): Move to tree-ssa-operands.h.
* tree-ssa-operands.h: New file.
(struct def_optype_d): New. Structure for stmt defs.
(struct use_optype_d): New. Structure for stmt uses.
(struct vdef_optype_d): New. Structure for stmt vdefs.
(struct vuse_optype_d): New. Structure for stmt vuses.
access stmt uses.
access stmt defs.
VDEF_OP_PTR, VDEF_OP): Macros to access stmt vdefs.
access stmt vuses.
(struct operands_d, struct voperands_d): moved from tree-dfa.c.
* tree-ssa-operands.c: New file.
(build_defs, build_uses, build_vdefs, build_vuses): New static varrays.
(struct vecmanage_d): New. Struct to manage non-GC vectors.
(vecmanage_add_segment): New. Add a new segment to a vector manager.
(vecmanage_add_special): New. Add a large vector to the special list.
(vecmanage_init): Initialize a vector manager.
(vecmanage_tree_ptr_init): New. Initialize a vector manager for tree *.
(vecmanage_fini): New. Release vector manager memory.
(check_free): New. Look for free memory in the vector maanger.
(vecmanage_new_vector): New. Allocate a vector.
(vecmanage_new_tree_ptr_vector): New. Allocate a vector of 'tree *'.
(vecmanage_free_vector): New. Free a vector.
(free_ssa_op_vec): New. Free an ssa operand's memory.
(allocate_ssa_op_vec): New. Allocate a vector for use/defs.
(allocate_ssa_virtual_op_vec): New. Allocate a vector for vuse/vdefs.
(allocate_operands_t): New. Allocate an operand structure.
(allocate_voperands_t): New. Allocate a virtual operand structure.
(free_uses): New. Clear and release uses.
(free_defs): New. Clear and release defs.
(init_ssa_operands): New. Initialize ssa operand management.
(fini_ssa_operands): New. Cleanup ssa operand management.
(finalize_new_ssa_operands): New. Commit current operands.
(finalize_new_ssa_virtual_operands): New. Commit current virtual ops.
(finalize_ssa_defs): New. Commit and verify stmt definitions.
(finalize_ssa_uses): New. Commit and verify stmt uses.
(finalize_ssa_vdefs): New. Commit and verify stmt virtual definitions.
(finalize_ssa_vuses): New. Commit and verify stmt virtual uses.
(finalize_ssa_stmt_operands): New. Commit all stmt operands.
(verify_start_operands): New. Verify build mechanism is ready for a new
(append_def): Renamed from add_def, and moved from tree-dfa.c.
(append_use): Renamed from add_def, and moved from tree-dfa.c.
(append_vdef): Renamed from add_def, and moved from tree-dfa.c.
(append_vuse): Renamed from add_def, and moved from tree-dfa.c.
(add_vuse): New. Entry point to add a vuse to a stmt.
(get_call_flags): Moved from tree-dfa.c
(get_stmt_operands, get_expr_operands, add_stmt_operand): Moved from
tree-dfa.c, and use new optype interface.
(note_addressabe, add_call_clobber_ops, add_call_read_ops): Moved from
2003-12-15 Diego Novillo <>
* tree-optimize.c (optimize_function_tree): Call BITMAP_XFREE.
2003-12-15 Diego Novillo <>
PR optimization/12747
* tree-cfg.c (verify_addr_expr): Simplify predicates.
* tree-must-alias.c (addresses_needed): Declare as file local.
(can_be_promoted): New.
(tree_compute_must_alias): Call it.
Remove promoted variables from call_clobbered_vars.
(find_addressable_vars): Update comment.
Remove argument. Update callers.
(promote_var): Always clear TREE_ADDRESSABLE.
Don't remove promoted variables from call_clobbered_vars.
If the promoted variable is in the may-alias set of a
non-promotable variable, copy its alias set into the alias set of
the non-promotable variable.
(find_variable_in): Update comment.
* tree-sra.c (can_be_scalarized_p): Reject structures with
__complex__ fields in them.
2003-12-15 Diego Novillo <>
Jason Merrill <>
PR optimization/12747
* (tree-simple.o): Add dependency on bitmap.h and
(GTFILES): Add tree-simple.c.
* tree-simple.c: Include ggc.h and bitmap.h.
(is_gimple_non_addressable_1): Remove. Update all callers.
(types_checked): New local variable.
(types_in_memory): New local variable.
(struct_needs_to_live_in_memory): New.
(needs_to_live_in_memory): New.
(is_gimple_reg): Call it.
(is_gimple_non_addressable): Call it.
(is_gimple_call_clobbered): Call it.
* tree-simple.h (needs_to_live_in_memory): Declare.
2003-12-14 Andreas Jaeger <>
* config/rs6000/rs6000.c (rs6000_output_function_epilogue): Handle
GNU F95.
2003-12-14 Jan Hubicka <>
* cgraphunit.c (cgraph_expand_function): Release function body when no
longer needed.
(lookup_recursive_calls): New function.
(cgraph_decide_recursive_inlining): Likewise.
(cgraph_decide_inlining_of_small_functions): Do recursive inlining.
* tree-inline.c: Include function.h
(copy_body): Choose saved body for recursive inlining.
(initialize_inlined_parameters): Likewise.
(expand_call_inline): Do not verify nodes when recursivly inlining,
insert ret_label into decl map.
* invoke.texi (max-inline-insns-recursive, max-inline-recursive-depth):
* (tree-inline.o): Include function.h.
2003-12-14 Jan Hubicka <>
* cgraphunit.c (record_call_1): Do not call analyze_expr hook
* langhooks-def.h (LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR): Kill.
* longhooks.h (lang_hooks_for_callgraph): Kill analyze_expr.
2003-12-13 Jan Hubicka <>
New timers.
* tree-cfg.c (verify_stmts): Push/pop timevar.
* cfg.c: Include timevar.h
(verify_flow_info): Push/pop timevar.
* (cfg.o): Add dependnecy on TIMEVARS
* cgraph.c (cgraph_create_edge): Sanity check for duplicates;
initialize aux.
(cgraph_remove_node): Decrease cgraph_n_nodes; do not clear
DECL_SAVED_TREE when dumping.
(cgraph_dump_node): Break out from ...; print more information.
(cgraph_dump): ... here.
* cgraph.h (cgraph_node): Add aux field.
(dump_cgraph_node, verify_cgraph, verify_cgraph_node): Declare.
(cgraph_mark_inline_edge): Declare
* cgraphunit.c (error_found): New static variable.
(verify_cgraph_node_1): New static function.
(verify_cgraph_node, verify_cgraph): New global function.
(cgraph_expand_function): More sanity checks.
(cgraph_clone_inline_nodes): Destructivly clone DECL_EXTERNAL nodes.
(cgraph_mark_inline_edge): Make global.
(cgraph_decide_inlining): Remove extern inline functions never inlined.
(cgraph_decide_inlining_incrementally): Verify that function body is
still present.
(expand_all_functions): Verify that all nodes are reachable.
(cgraph_optimize): Verify cgraph and memory management.
* tree-inline.c (copy_body_r): All edges must be present.
(expand_call_inline): Sanity check newly created edges and nodes
being inlined.
(optimize_inline_calls): Sanity check that we've inlined everything.
* tree-optimize.c (tree_rest_of_compilation): Clone functions inlined
into cloned node.
2003-12-13 Jan Hubicka <>
* tree-flow.h (tree_ssa_useless_type_conversion_1): Declare.
* tree-flow.c (tree_ssa_useless_type_conversion_1): Break out from
from...; allow complex types whose subtypes match.
(tree_ssa_useless_type_conversion): ... here.
2003-12-12 Jeff Law <>
* tree-ssa-dom.c (optimize_stmt): Don't call cleanup_control_expr
here. Instead just note that we need to cleanup the cfg (which
will DTRT).
* timevar.def (TV_TREE_SSA_THREAD_JUMPS): Kill.
* tree-dump.c (dump_files): Kill .thread dump.
* tree.h (TDI_thread_jumps): Kill.
* tree-flow.h (tree_ssa_dominator_thread_jumps): Kill prototype.
* tree-optimize.c (optimize_function_tree): Kill call to
* tree-ssa-dom.c (thread_through_phis): Kill. We no longer need
to restrict threading through PHIs.
(tree_ssa_dominator_thread_jumps): Kill.
(tree_ssa_domiantor_optimize_1): Fold back into
(tree_ssa_dominator_optimize): Mark back edges in the flow graph.
Kill code which conditionalized the walk_tree callbacks based
on thread_through_phis. When threading jumps, reorganize code
so that we can take the affected variables out of SSA form.
Mark new variables created by out-of-ssa code as needing to be
(thread_across_edge): Always allow threading through phis.
(thread_jumps_walk_stmts): Kill.
* tree-ssa.c (create_temp): When we create a new temporary, make
sure to put it into referenced_vars, give it an ID number and
a suitable mem_tag.
(eliminate_build): If we encounter a PHI argument which is an
SSA_VAR we are not rewriting out of SSA form, then just treat
it like a constant.
(rewrite_vars_out_of_ssa): New function.
* tree-flow.h (rewrite_vars_out_of_ssa): Prototype.
* tree-ssa-live.c (register_ssa_partitions_for_vars): New function.
* tree-ssa-live.h (register_ssa_partitions_for_vars): Prototype.
2003-12-12 Jan Hubicka <>
* tree-inline.c (remap_decl): Avoid invalid sharing.
* cp-tree.h (optimize_function): Kill.
* optimize.c (optimize_function): Kill.
* semantics.c (expand_body): Do not call optimize_function.
2003-12-12 Jan Hubicka <>
* cgraphunit.c (cgraph_optimize): Do not decide inlining when not
2003-12-11 Jan Hubicka <>
* tree-inline.c (initialize_inlined_parameters): Disable
constant propagation for non-gimple-min-invariant when
preserving gimple form.
2003-12-11 Jeff Law <>
* tree-ssa-ccp.c (widen_bitfield): Clear out unwanted high bits
even if the field's type is unsigned.
* tree-ssa-dom.c (record_equivalences_from_stmt): When creating
equivalences from stores, be more careful about non-constant
stores to bitfields.
2003-12-11 Diego Novillo <>
* opts.c (decode_options): Do not enable the tree loop optimizer by
* tree-ssa-loop.c (tree_ssa_loop_opt): Remove ENABLE_CHECKING
2003-12-10 Richard Henderson <>
* builtins.c (expand_builtin_profile_func): New.
(expand_builtin): Use it.
* builtins.def (BUILT_IN_PROFILE_FUNC_ENTER): New.
* function.c (expand_function_start, expand_function_end): Don't
do function instrumentation here.
* gimplify.c (gimplify_function_tree): Do it here.
* c-opts.c (c_common_post_options): Don't ever use rtl inlining.
2003-12-10 Diego Novillo <>
* ifcvt.c (dead_or_predicable): Initialize local variable
* tree-cfg.c (verify_stmt): Fix typo.
* tree-ssa-dom.c (propagate_value): New local function.
(cprop_into_stmt): Call it.
(cprop_into_phis): Call it.
(eliminate_redundant_computations): Call it.
2003-12-10 Dale Johannesen <>
* tree-dfa.c (compute_alias_sets): Don't try to make
GLOBAL_VAR alias itself.
2003-12-08 Steven Bosscher <>
* tree-must-alias.c (tree_compute_must_alias): Use
num_call_clobbered_vars and call_clobbered_var() instead of
poking in the call_clobbered_vars varray directly.
2003-12-11 Jan Hubicka <>
* cgraph.c (cgraph_function_possibly_inlined_p): Fix syntax error on
2003-12-10 Diego Novillo <>
2003-12-07 Richard Henderson <>
* c-common.c (c_address_looks_like_offsetof): New.
* c-common.h (c_address_looks_like_offsetof): Declare.
* c-typeck.c (build_unary_op) <ADDR_EXPR>: Use it. Don't lower
address references not destined for offsetof.
(c_expand_return): Only look inside ARRAY_REF and COMPONENT_REF
when looking for returning address of local variable.
* expr.c (expand_expr_1): Don't dereference size
of unbounded arrays.
* gimplify.c (gimplify_addr_expr): Only fold
address of variable size array elements.
* tree-simple.c (is_gimple_min_invariant): Also check
is_gimple_variable before disallowing offset address for type.
* tree-ssa-ccp.c (maybe_fold_offset_to_aggregate_ref): New.
(maybe_fold_offset_to_component_ref): Use it.
(maybe_fold_stmt_indirect, maybe_fold_stmt_plus): Likewise.
(maybe_fold_offset_to_array_ref): Likewise.
Don't fail for division remainder non-zero.
* varasm.c (initializer_constant_valid_p) <ADDR_EXPR>: Use
handled_component_p and look inside references.
<MINUS_EXPR>: Always look past widening casts.
2003-12-09 Jan Hubicka <>
* cgraph.c (cgraph_inline_hash): New global variable.
(cgraph_create_node): Break out of ....
(cgraph_node): ... this one.
(cgraph_redirect_edge_callee): New function.
(cgraph_remove_node): Aggressively elliminate dead nodes;
remove node out of clone list.
(dump_cgraph): Dump inlined_to field; dump uid numbers.
(cgraph_clone_edge): Return edge created.
(cgraph_clone_node): New.
(cgraph_function_possibly_inlined_p): Re-implement using hashtable.
* cgraph.h: Include hashtab.h
(struct cgraph_global_info): Kill inline_once, will be output and
cloned_times fields. Add inlined_to field.
(cgraph_node): Add next_clone.
(cgraph_inline_hash): Declare.
(cgraph_clone_edge): Update prototype.
(cgraph_clone_node, cgraph_redirect_callee): Declare.
* cgraphunit.c (cgraph_optimize_function): Kill.
(cgraph_assemble_function): Kill next_needed to avoid GGC corruption.
(cgraph_analyze_function): Do not intialize cloned_times and
(cgraph_finalize_compilation_unit): Clear next_needed.
(cgraph_optimize_function): Kill.
(cgraph_expand_function): Do not use cgraph_optimize_function.
(cgraph_estimate_growth, cgraph_mark_inline,
cgraph_check_inline_limits, cgraph_recursive_inlining_p,
cgraph_preserve_function_body_p): Update for explicit clones.
(INLINED_TIMES, SET_INLINED_TIMES, cgraph_inlined_into,
cgraph_inlined_callees, struct cgraph_inline_context,
cgraph_create_inline_context, cgraph_free_inline_context,
cgraph_inline_context_set_caller, cgraph_inline_context_clear_caller,
cgraph_inline_context_set_callee, cgraph_inline_context_clear_callee,
update_callee_keys): Kill.
(cgraph_clone_inlined_nodes, cgraph_mark_inline_edge): New.
(cgraph_decide_inlining_of_small_functions, (cgraph_decide_inlining,
cgraph_decide_inlining_incrementally): Simplify.
* tree-inline.c (typedef struct_inline_data): New field saving_p.
(copy_body_r): Update all clones.
(expand_call_inline): Remove inlined cgraph node.
(save_body): Inicialize id.node and id.saving_p.
* tree-optimize.c (tree_rest_of_compilation): Maintain clone up-to-date
in no-unit-at-a-time mode.
2003-12-08 Steven Bosscher <>
* tree-optimize.c (opti