aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
AgeCommit message (Collapse)AuthorFilesLines
2007-06-03cfgloopmanip.c (remove_path, [...]): Change dom_bbs to vector.Zdenek Dvorak1-9/+7
* cfgloopmanip.c (remove_path, loopify, duplicate_loop_to_header_edge): Change dom_bbs to vector. Add argument to iterate_fix_dominators call. * loop-unroll.c (unroll_loop_runtime_iterations): Ditto. * tree-cfg.c (tree_duplicate_sese_region): Change doms to vector. Add argument to iterate_fix_dominators call. (remove_edge_and_dominated_blocks): Pass vector to bbs_to_fix_dom. * gcse.c (hoist_code): Change domby to vector. * cfghooks.c (make_forwarder_block): Change doms_to_fix to vector. Add argument to iterate_fix_dominators call. * loop-doloop.c (doloop_modify): Changed recount_dominator to recompute_dominator. * lambda-code.c (perfect_nestify): Ditto. * cfgloopanal.c: Include graphds.h. (struct edge, struct vertex, struct graph, dump_graph, new_graph, add_edge, dfs, for_each_edge, free_graph): Moved to graphds.c. (mark_irreducible_loops): Use graphds_scc. Remove argument from add_edge call. * graphds.c: New file. * graphds.h: New file. * dominance.c: Include vecprim.h, pointer-set.h and graphds.h. (get_dominated_by, get_dominated_by_region): Change return type to vector. (verify_dominators): Recompute all dominators and compare the results. (recount_dominator): Renamed to ... (recompute_dominator): ... this. Do not check that the block is dominated by entry. (iterate_fix_dominators): Reimplemented. (prune_bbs_to_update_dominators, root_of_dom_tree, determine_dominators_for_sons): New functions. * et-forest.c (et_root): New function. * et-forest.h (et_root): Declare. * Makefile.in (graphds.o): Add. (cfgloopanal.o): Add graphds.h dependency. (dominance.o): Add graphds.h, vecprim.h and pointer-set.h dependency. * basic-block.h (get_dominated_by, get_dominated_by_region, iterate_fix_dominators): Declaration changed. (recount_dominator): Renamed to ... (recompute_dominator): ... this. * tree-ssa-threadupdate.c (thread_block): Free dominance info. (thread_through_all_blocks): Do not free dominance info. From-SVN: r125297
2007-05-30tree-scalar-evolution.c (scev_const_prop): Do not create labels.Zdenek Dvorak1-4/+8
* tree-scalar-evolution.c (scev_const_prop): Do not create labels. * tree-ssa-sink.c (statement_sink_location): Return basic block and bsi of the location where statements should be inserted. (sink_code_in_bb): Take bsi from statement_sink_location. * lambda-code.c (lambda_loopnest_to_gcc_loopnest): Use bsi_after_labels instead of bsi_start. * tree-profile.c (tree_gen_ic_func_profiler): Pass BSI_NEW_STMT to bsi_insert_after. * tree-cfg.c (bsi_move_after): Pass BSI_NEW_STMT to bsi_insert_after. (bsi_move_before): Document inconsistency with bsi_move_after. (tree_redirect_edge_and_branch): Do not create labels if not necessary. From-SVN: r125181
2007-05-24re PR middle-end/32018 (ICE on optimization)Zdenek Dvorak1-2/+2
PR middle-end/32018 * tree-ssa-threadupdate.c (thread_through_loop_header): Use set_loop_copy. (thread_through_all_blocks): Call initialize_original_copy_tables and free_original_copy_tables. * cfgloopmanip.c (duplicate_loop, duplicate_loop_to_header_edge): Use set_loop_copy. * tree-cfg.c (tree_duplicate_sese_region): Ditto. * cfghooks.c (duplicate_block): Use get_loop_copy. * cfg.c: Include cfgloop.h. (loop_copy): New hash table. (initialize_original_copy_tables): Initialize loop_copy table. (free_original_copy_tables): Free loop_copy table. (copy_original_table_clear, copy_original_table_set, set_loop_copy, get_loop_copy): New functions. (set_bb_original, set_bb_copy): Use copy_original_table_set. * cfgloop.h (struct loop): Remove copy field. * Makefile.in (cfg.o): Add CFGLOOP_H dependency. * basic-block.h (set_loop_copy, get_loop_copy): Declare. From-SVN: r125024
2007-05-11tree-loop-linear.c (gather_interchange_stats, [...]): Use loop_depth and ↵Zdenek Dvorak1-1/+1
loop_outer accessor functions. * tree-loop-linear.c (gather_interchange_stats, try_interchange_loops): Use loop_depth and loop_outer accessor functions. * tree-ssa-loop-im.c (outermost_invariant_loop, set_level, determine_invariantness_stmt, move_computations_stmt): Ditto. * cfgloopmanip.c (fix_bb_placement, fix_loop_placement, remove_path, add_loop, loopify, unloop, fix_loop_structure): Ditto. * tree-ssa-loop-manip.c (find_uses_to_rename_use): Ditto. * tree-scalar-evolution.c (interpret_loop_phi, compute_scalar_evolution_in_loop, analyze_scalar_evolution_in_loop, instantiate_parameters_1, scev_const_prop): Ditto. * cfghooks.c (make_forwarder_block): Ditto. * cfgloopanal.c (mark_irreducible_loops, mark_loop_exit_edges): Ditto. * modulo-sched.c (loop_canon_p): Ditto. * tree-vectorizer.c (slpeel_tree_duplicate_loop_to_edge_cfg, slpeel_can_duplicate_loop_p): Ditto. * lambda-code.c (invariant_in_loop_and_outer_loops): Ditto. * tree-cfg.c (tree_duplicate_sese_region): Ditto. * cfgloop.c (flow_loop_dump, flow_loop_nodes_find, rescan_loop_exit, cancel_loop, verify_loop_structure): Ditto. (flow_loop_nested_p, superloop_at_depth, flow_loop_free, add_bb_to_loop, remove_bb_from_loops, find_common_loop): Use the superloops vector instead of "pred" array. (establish_preds): Take father loop as an argument. Initialize the superloops vector. (flow_loop_tree_node_add): Pass father loop to establish_preds. Do not initialize loop->outer. (flow_loop_tree_node_remove): Truncate the superloops vector. * cfgloop.h (struct loop): Removed field "outer", fields "depth" and "pred" merged to "superloops" vector. (loop_depth, loop_outer): New. (fel_init): Use loop_outer. From-SVN: r124619
2007-05-04basic-block.h (cdi_direction): Assign values to all enumeration constants.Josh Conner1-2/+2
2007-05-04 Josh Conner <jconner@apple.com> * basic-block.h (cdi_direction): Assign values to all enumeration constants. (dom_computed): Remove. (dom_info_state): New. (set_dom_info_availability): New. * tree-ssa-loop-im.c (determine_invariantness): Initialize walk_data.dom_direction. * cfghooks.c (delete_basic_block): Use dom_info_available_p() instead of dom_computed[]. (split_edge): Likewise. (create_basic_block): Likewise. (merge_blocks): Likewise. * ifcvt.c (find_if_header): Likewise. * tree-cfgcleanup.c (cleanup_tree_cfg): Likewise. * tree-ssa-dce.c (remove_dead_stmt): Likewise. * tree-ssa.c (verify_ssa): Likewise. * tree-cfg.c (tree_verify_flow_info): Likewise. (remove_edge_and_dominated_blocks): Likewise. * dominance.c (dom_computed): Make static. (calc_dfs_tree_nonrec): Change third param to a bool. (calc_dfs_tree): Change second param to a bool. (calc_idioms): Change second param to a bool. Use dom_convert_dir_to_idx. (init_dom_info): Validate dir before using. (dom_convert_dir_to_idx): New. (calculate_dominance_info): Use dom_convert_dir_to_idx. New variable 'reverse' used for calling calc_dfs_tree and calc_idoms. (free_dominance_info): Use dom_convert_dir_to_idx. (get_immediate_dominator): Likewise. (set_immediate_dominator): Likewise. (get_dominated_by): Likewise. (redirect_immediate_dominators): Likewise. (nearest_common_denominator): Likewise. (dominated_by_p): Likewise. (bb_dom_dfs_in): Likewise. (bb_dom_dfs_out): Likewise. (recount_dominator): Likewise. (iterate_fix_dominators): Likewise. (add_to_dominance_info): Likewise. (delete_from_dominance_info): Likewise. (first_dom_son): Likewise. (next_dom_son): Likewise. (dom_info_available_p): Likewise. (dom_info_state): New. (set_dom_info_availability): New. From-SVN: r124439
2007-05-02re PR rtl-optimization/31771 (g++.dg/gomp/pr26913.C ICEs)Zdenek Dvorak1-1/+1
PR tree-optimization/31771 * tree-cfg.c (move_block_to_fn): Assign bb to the correct index. From-SVN: r124362
2007-05-01tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Use bsi_after_labels.Zdenek Dvorak1-15/+35
* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Use bsi_after_labels. Always insert statements before bsi. * tree-vect-transform.c (vect_create_epilog_for_reduction): Ditto. * predict.c (apply_return_prediction): Check for empty blocks. * cfgexpand.c (lab_rtx_for_bb): New variable. (label_rtx_for_bb): Do not create new tree labels. (expand_gimple_basic_block): Add labels recorded in lab_rtx_for_bb. (tree_expand_cfg): Initialize lab_rtx_for_bb. * tree-cfg.c (build_tree_cfg): Call cleanup_dead_labels after creating edges. (label_for_bb): Add field used. (update_eh_label, main_block_label): Mark the label used. (cleanup_dead_labels): Remove unused labels. From-SVN: r124322
2007-04-28tree-cfg.c (move_block_to_fn): Release bb from dominance info.Zdenek Dvorak1-2/+5
* tree-cfg.c (move_block_to_fn): Release bb from dominance info. Update last_basic_block correctly. From-SVN: r124257
2007-04-27tree-ssa-loop-im.c (determine_invariantness_stmt): Attempt to transform only ↵Zdenek Dvorak1-136/+21
GIMPLE_MODIFY_STMTs. * tree-ssa-loop-im.c (determine_invariantness_stmt): Attempt to transform only GIMPLE_MODIFY_STMTs. * tree-complex.c (expand_complex_operations_1): Ditto. (expand_complex_div_wide): Do not create gotos in COND_EXPR branches. * tree-ssa-loop-manip.c (build_if_stmt): Removed. (tree_transform_and_unroll_loop): Do not create gotos in COND_EXPR branches. * value-prof.c (tree_divmod_fixed_value, tree_mod_pow2, tree_mod_subtract, tree_ic, tree_stringop_fixed_value): Ditto. * omp-low.c (expand_parallel_call, expand_omp_for_generic, expand_omp_for_static_chunk, expand_omp_for_static_nochunk): Ditto. * tree-vectorizer.c (slpeel_make_loop_iterate_ntimes, slpeel_add_loop_guard): Ditto. * tree-mudflap.c (mf_build_check_statement_for): Ditto. * lambda-code.c (perfect_nestify): Ditto. * tree-iterator.c (tsi_split_statement_list_before): Fix splitting before the first statement. * tree-optimize.c (execute_free_datastructures): Fix comments. (execute_free_cfg_annotations): Do not call disband_implicit_edges. * tree-flow.h (disband_implicit_edges): Declaration removed. * tree-cfg.c (make_cond_expr_edges): Remove gotos from COND_EXPR branches. (cleanup_dead_labels, tree_redirect_edge_and_branch): Handle COND_EXPRs without gotos. (disband_implicit_edges, has_label_p): Removed. (tree_verify_flow_info): Verify that COND_EXPR branches are empty. (tree_lv_add_condition_to_bb): Do not create gotos in COND_EXPR branches. * tree.c (build3_stat): Mark COND_EXPRs used as statements as having side effects. * tree-pretty-print.c (dump_implicit_edges): Dump implicit edges also for COND_EXPRs. * cfgexpand.c (label_rtx_for_bb): New function. (expand_gimple_cond_expr): Do not expect gotos in COND_EXPR branches. Use label_rtx_for_bb to find the labels. (expand_gimple_basic_block): Remove RETURN_EXPR at the end of the last block. Detect fallthru edges. From-SVN: r124214
2007-04-26tree-cfgcleanup.c (cfgcleanup_altered_bbs): New global variable.Zdenek Dvorak1-21/+144
* tree-cfgcleanup.c (cfgcleanup_altered_bbs): New global variable. (remove_fallthru_edge): Use remove_edge_and_dominated_blocks. (cleanup_control_expr_graph): Do not invalidate dominance info. Record altered blocks. (cleanup_control_flow, cleanup_forwarder_blocks): Removed. (cleanup_control_flow_bb, split_bbs_on_noreturn_calls, cleanup_tree_cfg_bb): New functions. (remove_forwarder_block): Do not maintain the worklist of blocks. Record altered blocks. (cleanup_tree_cfg_1): Iterate over cfgcleanup_altered_bbs, not over whole cfg. (cleanup_tree_cfg): Do not iterate cleanup_tree_cfg_1. Only call delete_unreachable_blocks if dominators are not available. * tree-inline.c (optimize_inline_calls): Free dominance information earlier. * tree-flow.h (remove_edge_and_dominated_blocks, cfgcleanup_altered_bbs): Altered. * tree-cfg.c (replace_uses_by, tree_merge_blocks): Record altered blocks. (get_all_dominated_blocks, remove_edge_and_dominated_blocks): New functions. (tree_purge_dead_eh_edges): Use remove_edge_and_dominated_blocks, do not invalidate dominators. From-SVN: r124203
2007-04-24re PR tree-optimization/31602 (Overflow warning causes GDB -Werror build ↵Ian Lance Taylor1-1/+3
failure) ./: PR tree-optimization/31602 * tree-ssa-loop-ch.c (copy_loop_headers): Set TREE_NO_WARNING for conditionals in the copied loop header. * tree-cfg.c (fold_cond_expr_cond): Don't issue undefined overflow warnings if TREE_NO_WARNING is set. * doc/invoke.texi (Warning Options): Clarify that -Wstrict-overflow does not warn about loops. testsuite/: PR tree-optimization/31602 * gcc.dg/Wstrict-overflow-11.c: We no longer issue a warning. From-SVN: r124120
2007-04-23tree-phinodes.c (reserve_phi_args_for_new_edge, [...]): Use phi_nodes_ptr.Zdenek Dvorak1-53/+59
* tree-phinodes.c (reserve_phi_args_for_new_edge, remove_phi_node): Use phi_nodes_ptr. (create_phi_node): Use set_phi_nodes. * omp-low.c (expand_omp_parallel): Use bb_stmt_list. * tree-if-conv.c (process_phi_nodes): Use set_phi_nodes. (combine_blocks): Use bb_stmt_list and set_bb_stmt_list. * tree-flow-inline.h (phi_nodes, set_phi_nodes, (bsi_start, bsi_last): Use bb_stmt_list. (phi_nodes_ptr, bb_stmt_list, set_bb_stmt_list): New functions. * cfgexpand.c (expand_gimple_basic_block): Use bb_stmt_list. Traverse the statements using tsi iterator. * basic-block.h (struct basic_block_def): Fields stmt_list and phi_nodes moved to ... (struct tree_bb_info): ... new structure. * tree-cfg.c (create_bb): Allocate il.tree. Use set_bb_stmt_list. (tree_merge_blocks): Use bb_stmt_list and set_bb_stmt_list. (remove_bb): Handle blocks with NULL stmt list. Clear il.tree field. (tree_verify_flow_info): Verify that il.tree is not set for entry and exit block. (tree_split_block): Use set_bb_stmt_list. From-SVN: r124086
2007-04-09cfgloopmanip.c (create_preheader): Do not use loop_preheader_edge.Zdenek Dvorak1-1/+1
* cfgloopmanip.c (create_preheader): Do not use loop_preheader_edge. (create_preheaders): Check that loops are available. (fix_loop_structure): Clean up, improve comments. * tree-ssa-loop-manip.c (rewrite_into_loop_closed_ssa): Check that loops are available. Set LOOP_CLOSED_SSA to the loops state flags. * tree-scalar-evolution.c (scev_finalize): Clear scalar_evolution_info. * predict.c (tree_estimate_probability): Do not call calculate_dominance_info. Call create_preheaders. * tree-cfgcleanup.c (cleanup_tree_cfg_loop): Only call rewrite_into_loop_closed_ssa if LOOP_CLOSED_SSA is set in loops state flags. * cfgloop.c (loop_preheader_edge): Assert that loops have preheaders. * cfgloop.h (LOOP_CLOSED_SSA): New constant. * tree-cfg.c (tree_split_edge): Make an assert more precise. * tree-ssa-threadedge.c (thread_across_edge): Comment the function arguments. From-SVN: r123670
2007-03-19re PR tree-optimization/30984 (ICE with computed goto and constants)Jeff Law1-1/+12
* tree-cfg.c (find_taken_edge): Tighten conditions for optimizing computed gotos. * PR tree-optimization/30984 * gcc.c-torture/pr30984.c: New test. From-SVN: r123067
2007-02-25extend.texi: Document optional priority argument to constructors and ↵Mark Mitchell1-2/+2
destructors. * doc/extend.texi: Document optional priority argument to constructors and destructors. * tree.c (init_priority_for_decl): Adjust GTY markers. (init_ttree): Use priority-info hash functions for init_priority_for_decl. (tree_map_eq): Rename to ... (tree_map_base_eq): ... this. (tree_map_marked_p): Rename to ... (tree_map_base_marked_p): ... this. (tree_map_base_hash): New function. (decl_init_priority_lookup): Rework. (decl_fini_priority_lookup): New function. (decl_priority_info): New function. (decl_init_priority_insert): Use it. (decl_fini_priority_insert): Likewise. (decl_restrict_base_lookup): Adjust for refactoring of tree_map hierarchy. (decl_restrict_base_insert): Likewise. (decl_debug_expr_insert): Likewise. (decl_value_expr_lookup): Likewise. (decl_value_expr_insert): Likewise. * tree.h (priority_type): New type. (decl_init_priority_lookup): Use priority_type. (decl_fini_priority_lookup): New function. (decl_init_priority_insert): Use priority_type. (decl_fini_priority_insert): New function. (DECL_HAS_INIT_PRIORITY): Tweak comments. (DECL_INIT_PRIORITY): Likewise. (SET_DECL_INIT_PRIORITY): Add comment. (DECL_FINI_PRIORITY): New macro. (SET_DECL_FINI_PRIORITY): Likewise. (DEFAULT_INIT_PRIORITY): Document. (MAX_INIT_PRIORITY): Likewise. (MAX_RESERVED_INIT_PRIORITY): Likewise. (tree_map_base): New type. (tree_map_base_eq): New function. (tree_map_base_hash): Likewise. (tree_map_base_marked_p): Likewise. (tree_map): Inherit from tree_map_base. (tree_map_eq): Make it a macro. (tree_map_marked_p): Likewise. (tree_int_map): Inherit from tree_map_base. (tree_int_map_eq): Make it a macro. (tree_int_map_hash): Likewise. (tree_int_map_marked_p): Likewise. (tree_priority_map): New type. (tree_priority_map_eq): New macro. (tree_priority_map_hash): Likewise. (tree_priority_map_marked_p): Likewise. * varasm.c (emults_decl): Adjust for refactoring of tree_map hierarchy. (emutls_common_1): Likewise. * lambda-code.c (replace_uses_equiv_to_x_with_y): Likewise. * tree-ssa-structalias.c (heapvar_lookup): Adjust for refactoring of tree_map hierarchy. * tree-cfg.c (move_stmt_r): Likewise. (new_label_mapper): Likewise. * c-tree.h (c_expand_body): Move to ... * c-common.h (c_expand_body): ... here. * c-decl.c (c_expand_body): Move to ... * c-common.c (c_expand_body): ... here. (c_common_attribute_table): Allow 1 argument for the constructor and destructor attributes. (get_priority): New function. (handle_constructor_attribute): Set DECL_INIT_PRIORITY. (handle_destructor_attribute): Set DECL_FINI_PRIORITY. * cp-tree.h (static_ctors): Remove. * cp-tree.h (static_dtors): Likewise. * cp-objcp-common.c (decl_shadowed_for_var_lookup): Adjust for refactoring of tree_map hierarchy. (decl_shadowed_for_var_insert): Likewise. * semantics.c (expand_body): Use c_expand_body. (expand_or_defer_fn): Don't update static_ctors or static_dtors. * decl2.c (static_ctors): Remove. (static_dtors): Likewise. (generate_ctor_or_dtor_function): Pass NULL_TREE to objc_generate_static_init_call. Do not call static_[cd]tors. (generate_ctor_and_dtor_functions_for_priority): Do not check for static_[cd]tors. (cp_write_global_declarations): Likewise. * decl.c (annotate_value): Adjust for refactoring of tree_map hierarchy. * gcc.dg/initpri1.c: New test. * gcc.dg/initpri2.c: Likewise. * g++.dg/special/initpri1.C: New test. * g++.dg/special/initpri2.C: Likewise. * g++.dg/special/conpr-1.C: Use init_priority effective target. * g++.dg/special/conpr-2.C: Likewise. * g++.dg/special/conpr-3.C: Likewise. * g++.dg/special/conpr-4.C: Likewise. * g++.dg/special/initp1.C: Likewise. * g++.dg/special/ecos.exp: Remove code to detect availability of constructor priorities. * lib/target-support.exp (target_init_priority): New function. From-SVN: r122315
2007-02-19tree-cfg.c (dump_function_to_file): Be prepared for functions without ↵Eric Botcazou1-2/+5
DECL_STRUCT_FUNCTION initialized. * tree-cfg.c (dump_function_to_file): Be prepared for functions without DECL_STRUCT_FUNCTION initialized. From-SVN: r122135
2007-02-16tree-flow-inline.h (single_imm_use_p): Remove.Richard Guenther1-1/+1
2007-02-16 Richard Guenther <rguenther@suse.de> * tree-flow-inline.h (single_imm_use_p): Remove. (zero_imm_uses_p): Likewise. * tree-ssa-coalesce.c (create_outofssa_var_map): Use has_single_use instead of single_imm_use_p. * tree-cfg.c (replace_uses_by): Use has_zero_use instead of zero_imm_uses_p. From-SVN: r122036
2007-02-16re PR middle-end/30391 (ICE at -O1 with conditional expressions and ↵Roger Sayle1-4/+4
GIMPLE_MODIFY_STMT) PR middle-end/30391 * tree.c (expr_align): Handle MODIFY_EXPR. GIMPLE_MODIFY_STMT should be unreachable. (build2_stat): Allow construction of MODIFY_EXPR at any time. For the time being redirect GIMPLE_MODIFY_STMT to the new (renamed) build_gimple_modify_stmt_stat. (build2_gimple_stat): Rename to... (build_gimple_modify_stmt_stat): Now longer take a CODE argument. Always build a GIMPLE_MODIFY_STMT node. * tree.h (build2_gimple, build2_gimple_stat): Delete. (build_gimple_modify_stmt, build_gimple_modify_stmt_stat): New declarations. * tree-cfg.c (factor_computed_gotos, tree_merge_blocks, gimplify_val): Use build_gimple_modify_stmt instead of build2_gimple. * tree-complex.c (set_component_ssa_name, expand_complex_move, expand_complex_div_wide): Likewise. * tree-ssa-dom.c (record_equivalences_from_stmt): Likewise. * tree-ssa-loop-im.c (schedule_sm): Likewise. * tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Likewise. * tree-ssa-loop-manip.c (create_iv): Likewise. * tree-ssa-phiopt.c (conditional_replacement, minmax_replacement, abs_replacement): Likewise. * tree-ssa-pre.c (create_expression_by_pieces, poolify_modify_stmt, realify_fake_stores): Likewise. * builtins.c (std_expand_builtin_va_start): Build a MODIFY_EXPR node rather than a GIMPLE_MODIFY_STMT node. (std_gimpify_va_arg_expr, expand_builtin_va_copy, fold_builtin_memset, fold_builtin_memory_op, do_mpfr_sincos): Likewise. (integer_valued_real_p): Handle MODIFY_EXPR, not GIMPLE_MODIFY_STMT. * expr.c (expand_expr_real_1): Handle both MODIFY_EXPR and GIMPLE_MODIFY_STMT. * gfortran.dg/pr30391-1.f90: New test case. From-SVN: r122030
2007-02-13common.opt: Add Wstrict-overflow and Wstrict-overflow=.Ian Lance Taylor1-3/+11
./: * common.opt: Add Wstrict-overflow and Wstrict-overflow=. * flags.h (warn_strict_overflow): Declare. (enum warn_strict_overflow_code): Define. (issue_strict_overflow_warning): New static inline function. * opts.c (warn_strict_overflow): New variable. (common_handle_option): Handle OPT_Wstrict_overflow and OPT_Wstrict_overflow_. * c-opts.c (c_common_handle_option): Set warn_strict_overflow for OPT_Wall. * fold-const.c: Include intl.h. (fold_deferring_overflow_warnings): New static variable. (fold_deferred_overflow_warning): New static variable. (fold_deferred_overflow_code): New static variable. (fold_defer_overflow_warnings): New function. (fold_undefer_overflow_warnings): New function. (fold_undefer_and_ignore_overflow_warnings): New function. (fold_deferring_overflow_warnings_p): New function. (fold_overflow_warning): New static function. (make_range): Add strict_overflow_p parameter. Change all callers. (extract_muldiv, extract_muldiv_1): Likewise. (fold_unary) [ABS_EXPR]: Check ABS_EXPR before calling tree_expr_nonnegative_p. (fold_negate_expr): Call fold_overflow_warning. (fold_range_test): Likewise. (fold_comparison): Likewise. (fold_binary): Likewise. Call tree_expr_nonnegative_warnv_p instead of tree_expr_nonnegative_p. (tree_expr_nonnegative_warnv_p): Rename from tree_expr_nonnegative_p, add strict_overflow_p parameter. (tree_expr_nonnegative_p): New function. (tree_expr_nonzero_warnv_p): Rename from tree_expr_nonzero_p, add strict_overflow_p parameter. (tree_expr_nonzero_p): New function. * passes.c (verify_interpass_invariants): New static function. (execute_one_pass): Call it. * tree-ssa-loop-niter.c (expand_simple_operations): Ignore fold warnings. (number_of_iterations_exit, loop_niter_by_eval): Likewise. (estimate_numbers_of_iterations): Likewise. (scev_probably_wraps_p): Likewise. * tree-ssa-ccp.c: Include "toplev.h". (evaluate_stmt): Defer fold overflow warnings until we know we are going to optimize. (struct fold_stmt_r_data): Add stmt field. (fold_stmt_r): Defer fold overflow warnings until we know we optimized. (fold_stmt): Initialize stmt field of fold_stmt_r_data. (fold_stmt_inplace): Likewise. * tree-cfgcleanup.c: Include "toplev.h" rather than "errors.h". (cleanup_control_expr_graph): Defer fold overflow warnings until we know we are going to optimize. * tree-cfg.c (fold_cond_expr_cond): Likewise. * tree-ssa-threadedge.c (simplify_control_stmt_condition): Likewise. * tree-vrp.c (vrp_expr_computes_nonnegative): Call tree_expr_nonnegative_warnv_p instead of tree_expr_nonnegative_p. * tree-ssa-loop-manip.c (create_iv): Likewise. * c-typeck.c (build_conditional_expr): Likewise. (build_binary_op): Likewise. * tree-vrp.c (vrp_expr_computes_nonzero): Call tree_expr_nonzero_warnv_p instead of tree_expr_nonzero_p. (extract_range_from_unary_expr): Likewise. * simplify-rtx.c (simplify_const_relational_operation): Warn when assuming that signed overflow does not occur. * c-common.c (pointer_int_sum): Ignore fold overflow warnings. * tree.h (tree_expr_nonnegative_warnv_p): Declare. (fold_defer_overflow_warnings): Declare. (fold_undefer_overflow_warnings): Declare. (fold_undefer_and_ignore_overflow_warnings): Declare. (fold_deferring_overflow_warnings_p): Declare. (tree_expr_nonzero_warnv_p): Declare. * doc/invoke.texi (Option Summary): Add -Wstrict-overflow to list of warning options. (Warning Options): Document -Wstrict-overflow. * Makefile.in (tree-ssa-threadedge.o): Depend on toplev.h. (tree-ssa-ccp.o): Likewise. (tree-cfgcleanup.o): Change errors.h dependency to toplev.h. (fold-const.o): Depend on intl.h. testsuite/: * gcc.dg/Wstrict-overflow-1.c: New test. * gcc.dg/Wstrict-overflow-2.c: New test. * gcc.dg/Wstrict-overflow-3.c: New test. * gcc.dg/Wstrict-overflow-4.c: New test. * gcc.dg/Wstrict-overflow-5.c: New test. * gcc.dg/Wstrict-overflow-6.c: New test. * gcc.dg/Wstrict-overflow-7.c: New test. * gcc.dg/Wstrict-overflow-8.c: New test. * gcc.dg/Wstrict-overflow-9.c: New test. * gcc.dg/Wstrict-overflow-10.c: New test. From-SVN: r121895
2007-02-08tree-cfg.c (bsi_replace): Shortcut when replacing the statement with the ↵Jan Hubicka1-2/+4
same one; always update histograms. * tree-cfg.c (bsi_replace): Shortcut when replacing the statement with the same one; always update histograms. From-SVN: r121724
2007-02-06Makefile.in (tree-ssa-loop-ivopts.o): Add pointer-set.h dependency.Paolo Bonzini1-96/+24
2006-02-06 Paolo Bonzini <bonzini@gnu.org> * Makefile.in (tree-ssa-loop-ivopts.o): Add pointer-set.h dependency. (tree-ssa-reassoc.o): Add pointer-set.h dependency. (tree-cfg.o): Remove hashtab.h dependency. * tree-ssa-loop-ivopts.c: Include pointer-set.h. (struct ivopts_data): Change niters to pointer_map_t. (struct nfe_cache_elt, nfe_hash, nfe_eq): Delete. (niter_for_exit): Create pointer_map on demand. Change for pointer_map API. (tree_ssa_iv_optimize_init): Initialize data->niters to NULL. (free_loop_data): Destroy data->niters if created and reset field. (tree_ssa_iv_optimize_finalize): Don't delete data->niters here. (tree_ssa_iv_optimize_loop): Check for presence of stale data. * tree-ssa-reassoc.c: Include pointer-set.h. (bb_rank): Change to long *. (operand_rank): Change to pointer_map_t. (find_operand_rank): Return long, -1 if not found. Declare as inline. (insert_operand_rank): Accept long. (operand_entry_hash, operand_entry_eq): Remove. (get_rank): Return long. Adjust for changes above. (init_reassoc): Change rank type to long. Adjust creation of bb_rank and operand_rank. (fini_reassoc): Delete operand_rank with pointer_map_destroy. * tree-ssa-structalias.c (vi_for_tree): Change to pointer_map. (struct tree_vi, tree_vi_t, tree_vi_hash, tree_vi_eq): Delete. (insert_vi_for_tree): Rewrite for pointer_map API. Assert argument is not NULL. (lookup_vi_for_tree): Rewrite for pointer_map API. Return varinfo_t directly since it cannot be NULL. (get_vi_for_tree): Rewrite for pointer_map API. (find_what_p_points_to): Adjust for change to lookup_vi_for_tree. (init_alias_vars): Create vi_for_tree as pointer_map. (delete_points_to_sets): Delete vi_for_tree using pointer_map_destroy. * tree-cfg.c: Don't include hashtab.h. (edge_to_cases): Declare as pointer_map. (struct edge_to_cases_elt, edge_to_cases_hash, edge_to_cases_eq): Delete. (edge_to_cases_cleanup): Rewrite as pointer_map_traverse callback. (start_recording_case_labels): Create edge_to_cases as pointer_map. (end_recoding_case_labels): Cleanup edge_to_cases manually before destroying it. (record_switch_edge): Delete. (get_cases_for_edge): Adjust for pointer_map API, inline record_switch_edge (rewritten for new API), remove goto. From-SVN: r121648
2007-02-04cfgloopmanip.c (loop_delete_branch_edge): Removed.Zdenek Dvorak1-0/+12
* cfgloopmanip.c (loop_delete_branch_edge): Removed. (remove_path): Use can_remove_branch_p and remove_branch instead of loop_delete_branch_edge. * tree-ssa-loop-manip.c (scale_dominated_blocks_in_loop): New function. (tree_transform_and_unroll_loop): Remove dead branches immediately. Update profile using scale_dominated_blocks_in_loop. * cfghooks.c (can_remove_branch_p, remove_branch): New functions. * cfghooks.h (struct cfg_hooks): Add can_remove_branch_p. (can_remove_branch_p, remove_branch): Declare. * tree-cfg.c (tree_can_remove_branch_p): New function. (tree_cfg_hooks): Add tree_can_remove_branch_p. * cfgrtl.c (rtl_can_remove_branch_p): New function. (rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Add rtl_can_remove_branch_p. From-SVN: r121583
2007-01-18tree-vrp.c (finalize_jump_threads): Do not call cleanup_cfg by hand.Jan Hubicka1-4/+1
* tree-vrp.c (finalize_jump_threads): Do not call cleanup_cfg by hand. * tree-tailcall (add_virtual_phis): Likewise. (optimize_tail_call): Return TODOs. (execute_tail_calls): Return TODOs. * tree-ssa-ccp (execute_fold_all_builtins): Do cleanup_cfg via TODO. * tree-cfgcleanup.c (cleanup_tree_cfg_loop): Return if something changed. * tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_value): Cleanup cfg using TODO. * tree-flow.h (cleanup_tree_cfg_loop): Update prototype. * passes.c (execute_function_todo): When cleanup did something, remove unused locals. * tree-cfg.c (pass_build_cfg): Add cleanup_cfg TODO. (make_edges): Don't cleanup_cfg. From-SVN: r120900
2007-01-14tree-eh.c (add_stmt_to_eh_region_fn): Do not add call_exprs separately.Jan Hubicka1-12/+35
* tree-eh.c (add_stmt_to_eh_region_fn): Do not add call_exprs separately. (remove_stmt_from_eh_region_fn): Do not remove call_exprs. (verify_eh_throw_stmt_node, verify_eh_throw_table_statements): Kill. * except.h (verify_eh_throw_table_statements): Kill prototype. * cfgexpand.c (expand_gimple_basic_block): Propagate Eh regions into call exrepssions. * tree-optimize.c (execute_free_cfg_annotatiosn): Do not call eh trhow verifier. * tree-cfg.c: Include pointer-set.h. (verify_node_sharing): Work on pointer set. (verify_eh_throw_stmt_node): New. (verify_stmts): Use pointers sets, verify throw_stmt. From-SVN: r120766
2007-01-04cgraph.c (cgraph_release_function_body): New function.Jan Hubicka1-0/+11
* cgraph.c (cgraph_release_function_body): New function. (cgraph_remove_node): Use it. * cgraph.h (cgraph_release_function_body): Declare. * cgraphunit.c (cgraph_expand_function): Use it. * ipa.c (cgraph_remove_unreahchable_nodes): Use it. * tree-ssa.c (delete_tree_ssa): Allow to be called before aliasing is initialized and while compilation of other function is running. * tree-optimize.c (execute_free_cfg_annotations): Move code to clear statement CFG annotations from here to ... * tree-cfg.c (delete_tree_cfg_annotations): ... here. From-SVN: r120437
2007-01-04tree-cfg.c (tree_merge_blocks): Release SSA_NAME phi results whose ↵Robert Kennedy1-4/+6
definitions are deleted due to basic block... * tree-cfg.c (tree_merge_blocks): Release SSA_NAME phi results whose definitions are deleted due to basic block merging. From-SVN: r120423
2007-01-03alias.c (init_alias_analysis): Use VEC_safe_grow_cleared.Kazu Hirata1-34/+12
* alias.c (init_alias_analysis): Use VEC_safe_grow_cleared. * cfgbuild.c (find_basic_blocks): Likewise. * cfgrtl.c (rtl_create_basic_block): Likewise. * function.c (temp_slots_at_level): Likewise. * reg-stack.c (stack_regs_mentioned): Likewise. * regclass.c (allocate_reg_info): Likewise. * tree-cfg.c (init_empty_tree_cfg, build_tree_cfg, create_bb, set_bb_for_stmt, move_block_to_fn): Likewise. * tree-complex.c (tree_lower_complex): Likewise. * vec.h (VEC_safe_grow_cleared): New. From-SVN: r120386
2007-01-02tree-mudflap.c (mf_decl_cache_locals, [...]): Do not add referenced vars.Jan Hubicka1-0/+2
* tree-mudflap.c (mf_decl_cache_locals, mf_build_check_statement_for): Do not add referenced vars. * tree-cfg.c (update_modified_stmts): Do not update when SSA operands are not active. * passes.c (init_optimization_passes): Put mudflap_2 after free_datastructures. From-SVN: r120358
2007-01-02Revert:Kazu Hirata1-12/+34
2007-01-02 Kazu Hirata <kazu@codesourcery.com> * alias.c (init_alias_analysis): Use VEC_safe_grow_cleared. * cfgbuild.c (find_basic_blocks): Likewise. * cfgrtl.c (rtl_create_basic_block): Likewise. * function.c (temp_slots_at_level): Likewise. * reg-stack.c (stack_regs_mentioned): Likewise. * regclass.c (allocate_reg_info): Likewise. * tree-cfg.c (init_empty_tree_cfg, build_tree_cfg, create_bb, set_bb_for_stmt, move_block_to_fn): Likewise. * tree-complex.c (tree_lower_complex): Likewise. * vec.h (VEC_safe_grow_cleared): New. From-SVN: r120351
2007-01-02alias.c (init_alias_analysis): Use VEC_safe_grow_cleared.Kazu Hirata1-34/+12
* alias.c (init_alias_analysis): Use VEC_safe_grow_cleared. * cfgbuild.c (find_basic_blocks): Likewise. * cfgrtl.c (rtl_create_basic_block): Likewise. * function.c (temp_slots_at_level): Likewise. * reg-stack.c (stack_regs_mentioned): Likewise. * regclass.c (allocate_reg_info): Likewise. * tree-cfg.c (init_empty_tree_cfg, build_tree_cfg, create_bb, set_bb_for_stmt, move_block_to_fn): Likewise. * tree-complex.c (tree_lower_complex): Likewise. * vec.h (VEC_safe_grow_cleared): New. From-SVN: r120345
2006-12-29tree-cfg.c (last_stmt_ptr): Remove.Kazu Hirata1-10/+0
* tree-cfg.c (last_stmt_ptr): Remove. * tree-flow.h: Remove the prototype for last_stmt_ptr. From-SVN: r120266
2006-12-22tree-ssa-loop-niter.c (zero_p, nonzero_p): Removed.Zdenek Dvorak1-1/+1
* tree-ssa-loop-niter.c (zero_p, nonzero_p): Removed. (number_of_iterations_ne, number_of_iterations_lt_to_ne, assert_no_overflow_lt, assert_loop_rolls_lt, number_of_iterations_lt, number_of_iterations_le, number_of_iterations_cond, tree_simplify_using_condition_1, number_of_iterations_exit, find_loop_niter, loop_niter_by_eval, implies_nonnegative_p, implies_ge_p, record_nonwrapping_iv, idx_infer_loop_bounds, n_of_executions_at_most, scev_probably_wraps_p): Do not use zero_p/nonzero_p. * tree-ssa-loop-manip.c (determine_exit_conditions): Ditto. * tree-ssa-loop-ivopts.c (niter_for_exit, determine_biv_step, find_interesting_uses_op, find_interesting_uses_cond, find_interesting_uses_address, find_interesting_uses_stmt, strip_offset_1, add_candidate_1, add_old_ivs_candidates, difference_cost, determine_use_iv_cost_condition, rewrite_use_compare, remove_unused_ivs): Ditto. * tree-ssa-address.c (tree_mem_ref_addr, create_mem_ref_raw): Ditto. * tree-ssa-loop-prefetch.c (idx_analyze_ref): Ditto. * tree-cfg.c (find_taken_edge_cond_expr): Ditto. * tree.h (zero_p): Declaration removed. (null_or_integer_zerop, nonnull_and_integer_nonzerop): New. From-SVN: r120156
2006-12-13Makefile.in: Add dependencies.Jan Hubicka1-1/+11
* Makefile.in: Add dependencies. * tree-pretty-print.c: Include value-prof.h (dump_generic_bb_buff): Dump histograms * value-prof.c: Include pointer-set.h (gimple_alloc_histogram_value, histogram_hash, histogram_eq, set_histogram_value, gimple_histogram_value, gimple_add_histogram_value, gimple_remove_histogram_value, gimple_histogram_value_of_type, dump_histogram_value, dump_histograms_for_stmt, gimple_remove_stmt_histograms, gimple_duplicate_stmt_histograms, visit_hist, verify_histograms): New functions. (tree_value_profile_transformations): Update for new histogram API. (tree_divmod_fixed_value): Update for new histogram API. (tree_divmod_fixed_value_transform): Update for new histogram API. (tree_mod_pow2): Update for new histogram API. (tree_mod_pow2_value_transform): Update for new histogram API. (tree_mod_subtract): Update for new histogram API. (tree_mod_subtract_transform): Update for new histogram API. (tree_stringops_transform): Update for new histogram API. (tree_divmod_values_to_profile): Update for new histogram API. (tree_stringops_values_to_profile): Update for new histogram API. (tree_find_values_to_profile): Update for new histogram API. * value-prof.h (gimple_histogram_value): Declare. (gimple_histogram_value_of_type): Declare. (gimple_add_histogram_value): Declare. (gimple_remove_histogram_value): Declare. (dump_histograms_for_stmt): Declare. (gimple_remove_histogram_value): Declare. (gimple_remove_stmt_histograms): Declare. (gimple_duplicate_stmt_histograms): Declare. (verify_histograms): Declare. * function.h (struct funrction): Add value_histograms hash. (VALUE_HISTOGRAMS): New macro. * profile.c (compute_value_histograms): update for new API. * tree-inline.c: Include value-prof.h (copy_bb): Update histograms. * tree-flow.h (struct stmt_ann_d): Do not contain pointer to histograms; reorder to get smaller memory layout. * tree-cfg.c: Include value-prof.h (bsi_remove): Update histograms. (bsi_replace): Update histograms. (verify_stmts): Call histogram verifier. (tree_duplicate_bb): Update histograms. (move_block_to_fn): Update histograms. From-SVN: r119829
2006-12-11[multiple changes]Diego Novillo1-1/+1
2006-12-11 Diego Novillo <dnovillo@redhat.com> * doc/tree-ssa.texi: Update documentation for virtual operands and the use of push_stmt_changes/pop_stmt_changes. * doc/invoke.texi: Remove documentation for params global-var-threshold. Update documentation on max-aliased-vops. * tree-into-ssa.c: Cleanup comments, variables and spacing in various functions. (regs_to_rename): Declare. (mem_syms_to_rename): Declare. (dump_update_ssa): Declare. (debug_update_ssa): Declare. (dump_names_replaced_by): Declare. (debug_names_replaced_by): Declare. (dump_def_blocks): Declare. (debug_def_blocks): Declare. (dump_defs_stack): Declare. (debug_defs_stack): Declare. (dump_currdefs): Declare. (debug_currdefs): Declare. (mark_def_sites): Do not handle virtual operands. (compute_idf): Rename from find_idf. Update users. (register_new_def): Make local. Convert second argument to 'tree'. Use BLOCK_DEFS_STACK directly. If pushing a non-register, also push the underlying symbol. (rewrite_stmt): Do not handle virtual operands. (dump_tree_ssa): Call dump_def_blocks, dump_defs_stack, dump_currdefs and dump_tree_ssa_stats. (dump_tree_ssa_stats): Also dump REPL_TBL. (replace_use): Remove. Update all users to call SET_USE instead. (rewrite_blocks): Move code to free memory to fini_ssa_renamer. (mark_def_site_blocks): Move initialization code to init_ssa_renamer. (init_ssa_renamer): New. (fini_ssa_renamer): New. (rewrite_into_ssa): Call them. (prepare_block_for_update): Process SSA_OP_ALL_USES first and SSA_OP_ALL_DEFS later. Do not process virtual operands separately. (dump_update_ssa): Call dump_decl_set. (init_update_ssa): Initialize regs_to_rename and mem_syms_to_rename. Call init_ssa_renamer. (delete_update_ssa): Call fini_ssa_renamer. Free blocks_with_phis_to_rewrite. (mark_sym_for_renaming): If the variable has sub-variables, also mark them. If the variable belongs to a partition, also mark it. (mark_set_for_renaming): Call mark_sym_for_renaming on every symbol in the set. (switch_virtuals_to_full_rewrite): Call mark_set_for_renaming. (update_ssa): Separate syms_to_rename into regs_to_rename and mem_syms_to_rename. * tree-dump.c (dump_options): Add TDF_MEMSYMS. * tree-pretty-print.c (debug_generic_expr): Add TDF_MEMSYMS. (debug_generic_stmt): Likewise. (debug_tree_chain): Likewise. (dump_symbols): New. (dump_generic_node): Check for TDF_MEMSYMS. Handle MEMORY_PARTITION_TAG. If the statement references memory and TDF_MEMSYMS is given, call dump_symbols. Indicate default names with (D). (dump_vops): Update for new virtual operator format. * tree.c (init_ttree): Add MEMORY_PARTITION_TAG to tree_contains_struct. (tree_code_size): Handle MEMORY_PARTITION_TAG. (tree_node_structure): Likewise. (needs_to_live_in_memory): Handle SSA names. * tree.h (MTAG_P): Likewise. (struct tree_memory_partition_tag): Declare. (MPT_SYMBOLS): Define. (union tree_node): Add field 'mpt'. * treestruct.def (TS_MEMORY_PARTITION_TAG): Define. * tree.def (MEMORY_PARTITION_TAG): Define. * tree-pass.h (TDF_MEMSYMS): Define. * params.h (GLOBAL_VAR_THRESHOLD): Remove. * tree-ssa-alias.c: Include pointer-set.h (struct alias_map_d): Remove fields total_alias_vops, grouped_p and may_aliases. Update all users. (struct mp_info_def): Declare. (mp_info_t): New type. (get_smt_for): Rename from get_tmt_for. Update all users. (add_may_alias): Add argument ALREADY_ADDED. If given, use it to avoid adding duplicate entries to alias sets. (replace_may_alias): Remove. Update all users. (total_alias_vops_cmp): Remove. Update all users. (group_aliases_into): Remove. Update all users. (tree_pointer_compare): Remove. Update all users. (compact_name_tags): Remove. Update all users. (group_aliases): Remove. Update all users. (mark_non_addressable): Move from tree-flow-inline.h. Remove the symbol from the partition holding it, if needed. (dump_mp_info): New. (debug_mp_info): New. (sort_mp_info): New. (create_partition_for): New. (rewrite_alias_set_for): New. (compute_memory_partitions): New. (compute_may_aliases): Call it. (init_alias_info): If computing aliases for the first time, mark every memory symbol for renaming. (have_common_aliases_p): New. (compute_flow_insensitive_aliasing): Call it. (setup_pointers_and_addressables): Do not cache num_referenced_vars. For register promoted symbols, mark their former partition for renaming. (maybe_create_global_var): Only create .GLOBAL_VAR if there are no call-clobbered variables and a mix of pure and non-pure functions were found. (may_alias_p): Tidy comments. (create_tag_raw): Remove unused variable new_type. (dump_alias_info): call dump_memory_partitions. (dump_points_to_info_for): Call dump_decl_set. (may_be_aliased): Tidy comments and formatting. * timevar.def (TV_MEMORY_PARTITIONING): Define. * tree-vectorizer.c (vect_memsyms_to_rename): Rename from vect_vnames_to_rename. Set DECL_UIDs instead of SSA name versions in it. (slpeel_update_phi_nodes_for_guard1): Ignore memory PHIs. * tree-vect-transform.c (vect_transform_loop): Call mark_set_for_renaming with vect_memsyms_to_rename. * tree-flow-inline.h (zero_imm_uses_p): New. (memory_partition): New. (set_memory_partition): New. (factoring_name_p): New. (symbol_mem_tag): New. Update every function that used to access the annotation directly. (set_symbol_mem_tag): Likewise. * tree-ssa-copy.c (may_propagate_copy): Allow copies between a partition and a symbol as long as the symbol belongs to the partition. (merge_alias_info): Ignore merge requests when memory partitions are involved. * tree-ssa.c (verify_ssa_name): Check that default definitions have empty defining statements. (verify_use): Remove argument IS_VIRTUAL. Don't call verify_ssa_name. (verify_phi_args): Call verify_ssa_name. (verify_flow_insensitive_alias_info): Handle MPTs. (verify_flow_sensitive_alias_info): Likewise. (verify_name_tags): Likewise. (verify_call_clobbering): Likewise. (verify_ssa): Check for VOPs only after aliasing information is available. Check virtuals and real operands separately. Call verify_ssa_name on every operand. (stmt_references_memory_p): Move to tree-ssa-operands.c. (walk_use_def_chains_1): Guard against NULL PHI arguments. * tree-ssa-operands.c (stmt_references_memory_p): Move from tree-ssa.c. (get_mpt_for): New. (dump_memory_partitions): New. (debug_memory_partitions): New. * tree-flow.h (struct var_ann_d): Add field mpt. (struct stmt_ann_d): Add bitfield references_memory. * Makefile.in (tree-ssa-structalias.o): Include pointer-set.h (tree-ssa-alias.o): Likewise. * tree-ssa-structalias.c: (update_alias_info): Use STORED_SYMS to determine which variables are being written to by the store operation. * tree-ssa-structalias.h (struct alias_info) <total_alias_vops>: Remove. Update all users. <written_vars>: Change to a pointer set. Update all users. <dereferenced_ptrs_store>: Likewise. <dereferenced_ptrs_load>: Likewise. (NUM_REFERENCES): Remove. Update all users. (NUM_REFERENCES_CLEAR): Remove. Update all users. (NUM_REFERENCES_INC): Remove. Update all users. (NUM_REFERENCES_SET): Remove. Update all users. * params.def (PARAM_GLOBAL_VAR_THRESHOLD): Remove. Update all users. (PARAM_MAX_ALIASED_VOPS): Set to 10. * tree-ssanames.c (make_ssa_name): Initialize SSA_NAME_IS_DEFAULT_DEF to 0. 2006-12-11 Aldy Hernandez <aldyh@redhat.com> * tree-ssa-dse.c (aggregate_vardecl_d): New. (dse_global_data): Add aggregate_vardecl field. (dse_possible_dead_store_p): New. Add prev_defvar variable. Allow immediate uses and previous immediate uses to differ if they are setting different parts of the whole. (get_aggregate_vardecl): New. (dse_record_partial_aggregate_store): New. (dse_whole_aggregate_clobbered_p): New. (dse_partial_kill_p): New. (dse_optimize_stmt): Abstract code checking a possible dead store into new function dse_possible_dead_store_p(). Call dse_maybe_record_aggregate_store(). When checking whether a STMT and its USE_STMT refer to the same memory address, check also for partial kills that clobber the whole. Move some variable definitions to the block where they are used. (aggregate_vardecl_hash): New. (aggregate_vardecl_eq): New. (aggregate_vardecl_free): New. (aggregate_whole_store_p): New. (tree_ssa_dse): Initialize and free aggregate_vardecl. Mark which aggregate stores we care about. 2006-12-11 Andrew Macleod <amacleod@redhat.com> * tree-ssa-operands.h (struct vuse_element_d): Declare. (vuse_element_t): Declare. (struct vuse_vec_d): Declare. (vuse_vec_p): Declare. (VUSE_VECT_NUM_ELEM): Define. (VUSE_VECT_ELEMENT_NC): Define. (VUSE_ELEMENT_PTR_NC): Define. (VUSE_ELEMENT_VAR_NC): Define. (VUSE_VECT_ELEMENT): Define. (VUSE_ELEMENT_PTR): Define. (VUSE_ELEMENT_VAR): Define. (struct maydef_optype_d) <use_var>: Remove. <use_ptr>: Remove. <usev>: Add. (struct vuse_optype_d) <kill_var>: Remove. <use_ptr>: Remove. <usev>: Add. (struct mustdef_optype_d) <kill_var>: Remove. <use_ptr>: Remove. <usev>: Add. (VUSE_OP_PTR): Add argument. Use VUSE_ELEMENT_PTR. (VUSE_OP): Add argument. Use VUSE_ELEMENT_PTR. (VUSE_NUM): Define. (VUSE_VECT): Define. (MAYDEF_OP_PTR): Add argument. Use VUSE_OP_PTR. (MAYDEF_OP): Add argument. Use VUSE_OP. (MAYDEF_NUM): Define. (MAYDEF_VECT): Define. (MUSTDEF_KILL_PTR): Use VUSE_OP_PTR. (MUSTDEF_KILL): Use VUSE_OP. (MUSTDEF_NUM): Define. (MUSTDEF_VECT): Define. (realloc_maydef): Declare. (realloc_vuse): Declare. (struct ssa_operand_iterator_d) <vuse_index>: Add. <mayuse_index>: Add. (LOADED_SYMS): Define. (STORED_SYMS): Define. (FOR_EACH_SSA_MUSTDEF_OPERAND): Call op_iter_next_mustdef. * tree-into-ssa.c: Adapt for multi-operand V_MAY_DEF and VUSE operators. * tree-pretty-print.c: Likewise. * tree-ssa-dse.c: Likewise. * tree-flow-inline.h: Likewise. (op_iter_next_mustdef): New. * tree-ssa-operands.c: Likewise. (ALLOC_OPTYPE): Remove. Update all users. (alloc_def): New. (alloc_use): New. (alloc_maydef): New. (alloc_vuse): New. (alloc_mustdef): New. (realloc_maydef): New. (realloc_vuse): New. 2006-12-11 Aldy Hernandez <aldyh@redhat.com> * tree-ssa-operands.c: Remove build_v_must_defs. (init_ssa_operands): Delete build_v_must_defs. (finalize_ssa_v_must_def_ops): Remove. (finalize_ssa_v_must_defs): Remove. (finalize_ssa_stmt_operands): Do not call finalize_ssa_v_must_defs. (start_ssa_stmt_operands): Do not check build_v_must_defs. (append_v_must_def): Delete. (copy_virtual_operands): Do not copy V_MUST_DEFs. (get_modify_expr_operands): Remove reference to V_MUST_DEF from comment. Remove opf_kill_def. (build_ssa_operands): Remove references to v_must_defs. (copy_virtual_operands): Same. (copy_virtual_operands): Same. (fini_ssa_operands): Same. (free_ssa_operands): Same. (add_mustdef_op): Remove. Remove mustdef_optype_p. (alloc_mustdef): Remove. Remove references to V_MUST_DEFs in comment at top of file. (get_expr_operands): Remove opf_kill_def. (opf_kill_def): Remove. (add_virtual_operand): Remove opf_kill_def. (get_indirect_ref_operands): Same. (get_tmr_operands): Same. * tree-vectorizer.c (rename_variables_in_bb): Remove SSA_OP_ALL_KILLS. * tree-ssa-loop-manip.c (find_uses_to_rename_stmt): Remove SSA_OP_ALL_KILLS. (check_loop_closed_ssa_stmt): Same. * tree-ssa.c (verify_def): Remove V_MUST_DEF from comment. (verify_use): Same. (verify_ssa): Remove V_MUST_DEFs traces. (verify_ssa): Remove SSA_OP_ALL_KILLS. * tree-into-ssa.c (mark_def_sites): Change SSA_OP_VMUSTDEF to SSA_OP_VMAYDEF. (rewrite_update_stmt): Remove SSA_OP_VIRTUAL_KILLS. (rewrite_stmt): Remove SSA_OP_ALL_KILLS. * tree-ssa-operands.h (struct stmt_operands_d): Remove V_MUST_DEF references. (MUSTDEF_OPS): Remove. (SSA_OP_VMUSTDEF): Remove. (FOR_EACH_SSA_MUSTDEF_OPERAND): Remove. (struct mustdef_optype_d): Remove. Remove mustdef_optype_p. (struct stmt_operands_d): Remove mustdef_ops. (ssa_operand_iterator_d): Remove mustdefs and mustkills. (SSA_OP_VIRTUAL_DEFS): Remove SSA_OP_VMUSTDEF. (MUSTDEF_RESULT_PTR): Remove. (MUSTDEF_RESULT): Remove. (MUSTDEF_KILL_PTR): Remove. (MUSTDEF_KILL): Remove. (MUSTDEF_NUM): Remove. (MUSTDEF_VECT): Remove. (SSA_OP_VIRTUAL_KILLS): Remove. (SSA_OP_ALL_VIRTUALS): Remove SSA_OP_VIRTUAL_KILLS. (SSA_OP_VMUSTKILL): Remove. (SSA_OP_ALL_KILLS): Remove. (SSA_OP_ALL_OPERANDS): Remove SSA_OP_ALL_KILLS. * tree-flow-inline.h (op_iter_init_def): Remove SSA_OP_VIRTUAL_KILLS. (delink_stmt_imm_use): Remove SSA_OP_ALL_KILLS. * tree-ssa-pre.c (compute_rvuse_and_antic_safe): Remove SSA_OP_VIRTUAL_KILLS. * tree-ssa-loop-im.c (determine_max_movement): Remove SSA_OP_VIRTUAL_KILLS. (gather_mem_refs_stmt): Same. (gather_mem_refs_stmt): Same. * tree-ssa-dce.c (mark_really_necessary_kill_operand_phis): Delete. (perform_tree_ssa_dce): Remove call to mark_really_necessary_kill_operand_phis. * tree-flow-inline.h (op_iter_init): Remove setting of mustdefs and mustkills. (op_iter_next_use): Do not check mustkills. (op_iter_next_def): Do not check mustdefs. (op_iter_next_tree): Do not check mustkills or mustdefs. (clear_and_done_ssa_iter): Do not set mustdefs or mustkills. (op_iter_next_maymustdef): Do not check mustkills. (op_iter_init_must_and_may_def): Remove SSA_OP_VMUSTKILL. (op_iter_init_mustdef): Remove. * tree-ssa-live.c (create_ssa_var_map): Change SSA_OP_VMUSTDEF to SSA_OP_VMAYDEF. * tree-ssa-dse.c (dse_optimize_stmt): Remove SSA_OP_VMUSTDEF. * tree-ssa-ccp.c: Remove V_MUST_DEF traces from comments. (visit_assignment): Same. * tree-ssa-copy.c (copy_prop_visit_assignment): Same. * tree-sra.c (mark_all_v_defs_1): Remove V_MUST_DEF from comment. * tree-outof-ssa.c (check_replaceable): Remove SSA_OP_VMUSTDEF. * tree-pretty-print.c (dump_vops): Remove printing of V_MUST_DEF. Remove kill_p variable. * tree-dfa.c (struct dfa_stats_d): Remove num_v_must_defs. (dump_dfa_stats): Remove code related to V_MUST_DEFs. (collect_dfa_stats_r): Do not set num_v_must_defs. (mark_new_vars_to_rename): Remove v_must_defs_{before,after} code. * tree-into-ssa.c (mark_def_sites): Change SSA_OP_VMUSTKILL to SSA_OP_VMAYUSE. * tree-ssa-pre.c (compute_rvuse_and_antic_safe): Remove SSA_OP_VMUSTDEF and SSA_OP_VMUSTKILL. * tree-ssa-propagate.c (stmt_makes_single_store): Remove SSA_OP_VMUSTDEF. From-SVN: r119760
2006-12-11tree-ssa-operands.h (create_ssa_artificial_load_stmt): Rename from ↵Diego Novillo1-4/+11
create_ssa_artficial_load_stmt. * tree-ssa-operands.h (create_ssa_artificial_load_stmt): Rename from create_ssa_artficial_load_stmt. Update all users. * tree-into-ssa.c (register_new_def): Make static. * tree.c (is_global_var): Handle SSA_NAMEs. * tree.h (SSA_NAME_IS_DEFAULT_DEF): Define. Update all users that used to call gimple_default_def. * tree-ssa-operands.c (push_stmt_changes): New. (pop_stmt_changes): New. Update every pass that modifies statements to bracket modifications with push_stmt_changes/pop_stmt_changes. (discard_stmt_changes): New. * tree-ssa-dom.c (stmts_to_rescan): Change to stack of 'tree *' instead of 'tree'. Update all users. * tree-flow-inline.h (zero_imm_uses_p): New. (symbol_mem_tag): New. Update every function that used to access the annotation directly. (set_symbol_mem_tag): Likewise. * tree-dfa.c (dump_variable): Always show the escape mask. (mark_symbols_for_renaming): Rename from mark_new_vars_to_rename. Update all users. Only mark to rename naked symbols in real and virtual operands. From-SVN: r119746
2006-12-11* tree-scalar-evolution.c (scev_const_prop):Diego Novillo1-3/+2
* tree-phinodes.c (remove_phi_node): Add argument RELEASE_LHS_P. If given, release the SSA name on the LHS of the PHI node. Update all users. * tree-ssa-dce.c: Remove forward declarations for static functions. Re-arrange functions bodies as needed. (find_obviously_necessary_stmts): Never mark PHI nodes as obviously necessary. From-SVN: r119740
2006-12-10tree-vrp.c (adjust_range_with_scev): Use get_chrec_loop.Zdenek Dvorak1-5/+3
* tree-vrp.c (adjust_range_with_scev): Use get_chrec_loop. * loop-unswitch.c (unswitch_loops): Use FOR_EACH_LOOP. * tree-loop-linear.c (linear_transform_loops): Ditto. * tree-ssa-loop-im.c (determine_lsm): Ditto. * tree-ssa-loop-niter.c (estimate_numbers_of_iterations, free_numbers_of_iterations_estimates): Ditto. * tree_ssa_unswitch_loops (tree_ssa_unswitch_loops): Ditto. * tree-ssa-loop-ch.c (copy_loop_headers): Ditto. * tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Ditto. * modulo-sched.c (sms_schedule): Ditto. * tree-ssa-loop-ivcanon.c (canonicalize_induction_variables, tree_unroll_loops_completely): Ditto. * predict.c (predict_loops): Ditto. * tree-if-conv.c (main_tree_if_conversion): Ditto. * loop-unroll.c (unroll_and_peel_loops, peel_loops_completely, decide_unrolling_and_peeling): Ditto. * cfgloopmanip.c (unloop): Use delete_loop. (place_new_loop): Access larray vector instead of parray. (create_preheaders, force_single_succ_latches, fix_loop_structure): Use FOR_EACH_LOOP and delete_loop.. * loop-doloop.c (doloop_optimize_loops): Ditto. * loop-invariant.c (move_loop_invariants): Ditto. * tree-cfg.c (replace_uses_by): Ditto. * tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Ditto. * tree-chrec.h (CHREC_VAR, CHREC_LEFT, CHREC_RIGHT, CHREC_VARIABLE): Moved to ... * tree.h (CHREC_VAR, CHREC_LEFT, CHREC_RIGHT, CHREC_VARIABLE): ... here. * tree-scalar-evolution.c (chrec_contains_symbols_defined_in_loop, compute_overall_effect_of_inner_loop, chrec_is_positive): Use get_loop and get_chrec_loop. (number_of_iterations_for_all_loops): Use number_of_loops. (scev_initialize, scev_reset, scev_const_prop): Use FOR_EACH_LOOP. * tree-scalar-evolution.h (get_chrec_loop): New inline function. * cfgloopanal.c (mark_irreducible_loops): Use number_of_loops, and FOR_EACH_LOOP. * tree-chrec.c (evolution_function_is_invariant_rec_p, chrec_convert_1): Use get_loop and get_chrec_loop. * loop-init.c (loop_optimizer_init): Use number_of_loops. (loop_optimizer_init): Use FOR_EACH_LOOP. * tree-vectorizer.c (vect_loops_num): Removed. (vectorize_loops): Store number of loops locally. Use FOR_EACH_LOOP and get_loop. * tree-vectorizer.h (vect_loops_num): Removed. * tree-data-ref.c (get_number_of_iters_for_loop): Use get_loop. (find_data_references_in_loop): Do not set parallel_p. * tree-data-ref.h: Do not declare VEC(loop_p). * cfgloop.c (flow_loops_dump, mark_single_exit_loops, verify_loop_structure): Use FOR_EACH_LOOP. (flow_loops_free): Use FOR_EACH_LOOP, free larray vector. (initialize_loops_parallel_p): Removed. (flow_loops_find): Push the loops into a vector. (delete_loop): New function. (cancel_loop): Use delete_loop. * cfgloop.h: Declare VEC(loop_p). (struct loop): Remove parallel_p field. (struct loops): Replace num and parray field by larray vector. Remove shared_headers field. (delete_loop): Declare. (get_loop, get_loops, number_of_loops, fel_next, fel_init, FOR_EACH_LOOP): New. * doc/loop.tex: Document new accessor functions. From-SVN: r119713
2006-12-05Merge gimple-tuples-branch into mainline.Aldy Hernandez1-19/+60
From-SVN: r119546
2006-11-28Privatize SSA variables into gimple_df.Jan Hubicka1-2/+2
* tree-flow-inline.h (gimple_in_ssa_p, gimple_aliases_computed_p, gimple_addressable_vars, gimple_call_clobbered_vars, gimple_referenced_vars, gimple_global_var, gimple_nonlocal_all): New accessors. (first_referenced_var): Update. (mark_stmt_modified): Update. (is_call_clobbered): Update. (mark_call_clobbered): Update. (clear_call_clobbered): Update. (mark_non_addressable): Update. * tree-vrp.c (get_value_range): Update. * tree-into-ssa.c (in_ssa_p): Kill. (get_default_def_for): Update. (rewrite_into_ssa): Update. * tree-complex.c (init_parameter_lattice_values): Update. (update_complex_assignment): Update. (update_parameter_components): Update. (expand_complex_libcall): Update. (expand_complex_operations_1): Update. * tree-tailcall.c (arg_needs_copy_p): Update. (add_virtual_phis): Update. (tree_optimize_tail_calls_1): Update. * tree-ssa-dse.c (memory_ssa_name_same): Update. * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Update. * tree-ssa-math-opts.c (execute_cse_reciprocals): Update. * tree-ssa-propagate.c (set_rhs): Update. * tree-ssa-alias.c (aliases_computed_p, call_clobbered_vars, addressable_vars, global_var):Kill. (set_initial_properties): Update. (init_alias_info): Update. (finalize_ref_all_pointers): Update. (setup_pointers_and_addressables): Update. (maybe_create_global_var): Update. (create_global_var): Update. (dump_points_to_info): Update. * function.h (struct gimple_df): Forward declare. (struct function): Add GIMPLE_DF field. * gimplify.c (force_gimple_operand): Update. * tree-dfa.c (referenced_vars, default_defs): KIll. (make_rename_temp): Update. (dump_variable): Update. (referenced_var_lookup): Update. (referenced_var_check_and_insert): Update. (default_def): Rename to ... (gimple_default_def): ... this one; accept cfun argument. (set_default_def): Update. * tree-cfgcleanup.c (modified_noreturn_calls): Kill. (cleanup_control_flow): Update. * tree-ssa-pre.c (compute_avail): Update * tree-ssa-live.c (calculate_live_on_entry): Update. * tree-ssa.c (verify_use): Update. (verify_call_clobbering): Update. (verify_call_clobbering): Update. (init_tree_ssa): Update. (delete_tree_ssa): Update. * tree-outof-ssa.c (coalesce_ssa_name): Update. (rewrite_out_of_ssa): Update. * tree-flow.h (gimple_df): New structure collecting dataflow variables. (FREE_SSANAMES, SSANAMES, MODIFIED_NORETURN_CALLS, DEFAULT_DEFS): New private accessors. (in_ssa_p, modified_noreturn_calls, referenced_vars, default_defs, ssa_names, global_var, nonlocal_all, call_clobbered_vars, addressable_vars, aliases_computed_p): Kill. (default_def): Rename to... (gimple_default_def): ... this one. (defaule_def_fn): Kill. (num_referenced_vars, ssa_names, num_ssa_names): Update. * tree-ssa-structalias.c (nonlocal_all): Kill. (get_constraint_exp_from_ssa_var): Update. (create_nonlocal_var): Update. (get_constraint_for): Update. (update_alias_info): Update. (find_global_initializers): Update. (intra_create_variable_infos): Update. (intra_create_variable_infos): (find_what_p_points_to): Update. (init_alias_heapvars): Update. * tree-cfg.c (remove_bb): Update. (gimplify_val): Update. * tree-ssa-reassoc.c (get_rank): Update. (init_reassoc): Update. * tree-ssanames.c: Do not include gt-tree-ssanames.h (ssa_names, free_ssanames): Kill. (init_ssanames): Update. (make_ssa_name): Update. (release_ssa_name): Update. (release_defs): Update. (replace_ssa_name_symbol): Update. * tree-ssa-operands.c (access_can_touch_variable): Update. (add_virtual_operand): Update. (add_call_clobber_ops): Update. (add_call_read_ops): Update. (get_call_expr_operands): Update. (get_asm_expr_operands): Update. From-SVN: r119294
2006-11-17tree-vrp.c (execute_vrp): Do not update current_loops.Zdenek Dvorak1-12/+3
* tree-vrp.c (execute_vrp): Do not update current_loops. * loop-unswitch.c (unswitch_loop): Do not use loop_split_edge_with. * doc/loop.texi: Remove documentation for cancelled functions. * tree-ssa-loop-im.c (loop_commit_inserts): Removed. (move_computations, determine_lsm): Use bsi_commit_edge_inserts instead. * cfgloopmanip.c (remove_bbs): Do not update loops explicitly. (remove_path): Ensure that in delete_basic_blocks, the loops are still allocated. (add_loop): Work on valid loop structures. (loopify): Modify call of add_loop. (mfb_update_loops): Removed. (create_preheader): Do not update loops explicitly. (force_single_succ_latches, loop_version): Do not use loop_split_edge_with. (loop_split_edge_with): Removed. * tree-ssa-loop-manip.c (create_iv, determine_exit_conditions): Do not use bsi_insert_on_edge_immediate_loop. (split_loop_exit_edge, tree_unroll_loop): Do not use loop_split_edge_with. (bsi_insert_on_edge_immediate_loop): Removed. * tree-ssa-loop-ch.c (copy_loop_headers): Use current_loops. Do not use loop_split_edge_with. * cfghooks.c: Include cfgloop.h. (verify_flow_info): Verify that loop_father is filled iff current_loops are available. (redirect_edge_and_branch_force, split_block, delete_basic_block, split_edge, merge_blocks, make_forwarder_block, duplicate_block): Update cfg. * cfgloopanal.c (mark_irreducible_loops): Work if the function contains no loops. * modulo-sched.c (generate_prolog_epilog, canon_loop): Do not use loop_split_edge_with. (sms_schedule): Use current_loops. * tree-ssa-dom.c (tree_ssa_dominator_optimize): Use current_loops. * loop-init.c (loop_optimizer_init, loop_optimizer_finalize): Set current_loops. (rtl_loop_init, rtl_loop_done): Do not set current_loops. * tree-ssa-sink.c (execute_sink_code): Use current_loops. * ifcvt.c (if_convert): Ditto. * predict.c (predict_loops): Do not clear current_loops. (tree_estimate_probability): Use current_loops. (propagate_freq): Receive head of the region to propagate instead of loop. (estimate_loops_at_level): Do not use shared to_visit bitmap. (estimate_loops): New function. Handle case current_loops == NULL. (estimate_bb_frequencies): Do not allocate tovisit. Use estimate_loops. * tree-ssa-loop.c (current_loops): Removed. (tree_loop_optimizer_init): Do not return loops. (tree_ssa_loop_init, tree_ssa_loop_done): Do not set current_loops. * tree-vectorizer.c (slpeel_update_phi_nodes_for_guard1, slpeel_update_phi_nodes_for_guard2, slpeel_tree_peel_loop_to_edge): Do not update loops explicitly. * function.h (struct function): Add x_current_loops field. (current_loops): New macro. * tree-if-conv.c (combine_blocks): Do not update loops explicitly. * loop-unroll.c (split_edge_and_insert): New function. (unroll_loop_runtime_iterations, analyze_insns_in_loop): Do not use loop_split_edge_with. * loop-doloop.c (add_test, doloop_modify): Ditto. * tree-ssa-pre.c (init_pre, fini_pre): Do not set current_loops. * cfglayout.c (copy_bbs): Do not update loops explicitly. * lambda-code.c (perfect_nestify): Do not use loop_split_edge_with. * tree-vect-transform.c (vect_transform_loop): Do not update loops explicitly. * cfgloop.c (flow_loops_cfg_dump): Do not dump dfs_order and rc_order. (flow_loops_free): Do not free dfs_order and rc_order. (flow_loops_find): Do not set dfs_order and rc_order in loops structure. Do not call loops and flow info verification. (add_bb_to_loop, remove_bb_from_loops): Check whether the block already belongs to some loop. * cfgloop.h (struct loops): Remove struct cfg. (current_loops, loop_split_edge_with): Declaration removed. (loop_optimizer_init, loop_optimizer_finalize): Declaration changed. * tree-flow.h (loop_commit_inserts, bsi_insert_on_edge_immediate_loop): Declaration removed. * Makefile.in (cfghooks.o): Add CFGLOOP_H dependency. * basic-block.h (split_edge_and_insert): Declare. * tree-cfg.c (remove_bb): Do not update loops explicitly. From-SVN: r118931
2006-11-13re PR middle-end/28915 (ICE: tree check: expected class 'constant', have ↵Jason Merrill1-0/+5
'declaration' (var_decl) in build_vector, at tree.c:973) PR middle-end/28915 * gimplify.c (gimplify_init_constructor): Don't reduce TREE_CONSTANT vector ctors. * tree-cfg.c (verify_expr): Don't look into TREE_CONSTANT vector ctors. * expmed.c (make_tree): Handle CONST, SYMBOL_REF. * tree.c (build_vector): Handle non-_CST elements. Co-Authored-By: Andrew Pinski <pinskia@physics.uc.edu> From-SVN: r118747
2006-11-12tree-flow.h (name_mappings_registered_p): Declare.Zdenek Dvorak1-3/+4
* tree-flow.h (name_mappings_registered_p): Declare. * tree-into-ssa.c (name_mappings_registered_p): New function. * tree-cfg.c (tree_can_merge_blocks_p): Check name_mappings_registered_p instead of need_ssa_update_p. From-SVN: r118732
2006-11-11tree.def (FIX_CEIL_EXPR, [...]): Remove unused tree codes.Richard Guenther1-3/+0
2006-11-11 Richard Guenther <rguenther@suse.de> * tree.def (FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR): Remove unused tree codes. * tree-vrp.c (extract_range_from_unary_expr): Remove handling of FIX_CEIL_EXPR, FIX_FLOOR_EXPR and FIX_ROUND_EXPR. * tree-pretty-print.c (dump_generic_node, op_prio): Likewise. * tree.c (stabilize_reference): Likewise. * fold-const.c (fold_convert_const_int_from_real, operand_equal_p, fold_unary): Likewise. * tree-gimple.c (is_gimple_cast): Likewise. * dwarf2out.c (loc_descriptor_from_tree_1): Likewise. * expr.c (expand_expr_real_1): Likewise. * tree-eh.c (tree_could_trap_p): Likewise. * gimplify.c (gimplify_expr): Likewise. * tree-inline.c (estimate_num_insns_1): Likewise. * tree-cfg.c (verify_expr): Likewise. cp/ * typeck.c (build_unary_op): Likewise. java/ * check-init.c (check_init): Likewise. ada/ * trans.c (maybe_stabilize_reference): Likewise. fortran/ * trans-intrinsic.c (enum rounding_mode): New enum. (build_fix_expr, gfc_conv_intrinsic_aint, gfc_conv_intrinsic_mod, gfc_conv_intrinsic_function): Use it instead of FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR and FIX_TRUNC_EXPR. From-SVN: r118692
2006-09-29builtins.c (expand_builtin_setjmp): Delete.Eric Botcazou1-68/+102
* builtins.c (expand_builtin_setjmp): Delete. (expand_builtin) <BUILT_IN_SETJMP>: Mark as unreachable. <BUILT_IN_SETJMP_SETUP>: New case. <BUILT_IN_SETJMP_DISPATCHER>: Likewise. <BUILT_IN_SETJMP_RECEIVER>: Likewise. * builtins.def (BUILT_IN_SETJMP_SETUP): New built-in stub. (BUILT_IN_SETJMP_DISPATCHER): Likewise. (BUILT_IN_SETJMP_RECEIVER): Likewise. * gimple-low.c (struct lower_data): New field calls_builtin_setjmp. (lower_function_body): Initialize it to false. If it is set to true at the end of the processing, emit the setjmp dispatcher. (lower_stmt) <CALL_EXPR>: Invoke lower_builtin_setjmp if the callee is __builtin_setjmp and set calls_builtin_setjmp to true as well. <MODIFY_EXPR>: Fall through to above case if there is a CALL_EXPR on the rhs of the assignment. (lower_builtin_setjmp): New function. * tree.c (build_common_builtin_nodes): Build BUILT_IN_SETJMP_SETUP, BUILT_IN_SETJMP_DISPATCHER and BUILT_IN_SETJMP_RECEIVER nodes. * tree-cfg.c (make_exit_edges) <CALL_EXPR>: Use specific predicate to detect calls that can go to non-local labels. Use specific helper to create the abnormal edges associated with them. <MODIFY_EXPR>: Likewise. (make_abnormal_goto_edges): New function extracted from... (make_goto_expr_edges): ...here. Call it for computed gotos. (simple_goto_p): Minor tweak. (tree_can_make_abnormal_goto): New predicate. (tree_redirect_edge_and_branch): Return zero on all abnormal edges. (tree_purge_dead_abnormal_call_edges): New function. * tree-flow.h (tree_can_make_abnormal_goto): Declare. (tree_purge_dead_abnormal_call_edges): Likewise. (make_abnormal_goto_edges): Likewise. * tree-inline.c (expand_call_inline): Simplify statement frobbing. Purge all dead abnormal edges if the call was in the last statement. * tree-optimize.c (has_abnormal_outgoing_edge_p): New predicate. (execute_fixup_cfg): If there are non-local labels in the function, scan the basic blocks and split them at calls that can go to non-local labels or add missing abnormal call edges. Write down the CFG in the dump file. (pass_fixup_cfg): Remove TODO_dump_func flag. * unwind-sjlj.c: Poison setjmp. * doc/install.texi (enable-sjlj-exceptions): Use more general wording. * doc/tm.texi (DWARF2_UNWIND_INFO): Likewise. (TARGET_UNWIND_TABLES_DEFAULT): Fix typo. (DONT_USE_BUILTIN_SETJMP): Document it. From-SVN: r117298
2006-09-22re PR tree-optimization/28888 (ICE in tree check: expected cond_expr, have ↵Zdenek Dvorak1-0/+13
label_expr in simplify_using_initial_conditions, at tree-ssa-loop-niter.c) PR tree-optimization/28888 * tree-if-conv.c (combine_blocks): Rewritten. * tree-cfg.c (tree_verify_flow_info): Check that edges with EDGE_TRUE/FALSE_VALUE follow COND_EXPR. * gcc.dg/pr28888.c: New test. From-SVN: r117135
2006-08-04* tree-cfg.c: Fix a comment typo.Kazu Hirata1-1/+1
From-SVN: r115921
2006-08-02PR gcov/profile/28480Jan Hubicka1-2/+17
PR gcov/profile/28480 * tree-cfg.c (change_bb_for_stmt): New function. (tree_merge_blocks, tree_split_blocks): Use it. From-SVN: r115873
2006-07-24re PR middle-end/28071 (A file that can not be compiled in reasonable ↵Jan Hubicka1-8/+13
time/space) PR rtl-optimization/28071 * tree-cfg.c (tree_split_block): Do not allocate new stmt_list nodes. * tree-iterator.c (tsi_split_statement_list_before): Do not crash when splitting before first stmt. From-SVN: r115713
2006-06-30cfgexpand.c, [...]: Fix comment typos.Kazu Hirata1-1/+1
* cfgexpand.c, config/i386/i386.c, genpreds.c, tree-cfg.c: Fix comment typos. From-SVN: r115098
2006-06-19re PR tree-optimization/27341 (ICE in in add_virtual_operand with complex ↵Daniel Berlin1-0/+2
types) 2006-06-19 Daniel Berlin <dberlin@dberlin.org> Fix PR tree-optimization/27341 * tree-cfg.c (gimplify_val): Call mark_new_vars_to_rename on the statement we get. * tree-complex.c (pass_lower_complex): Update SMT usage. From-SVN: r114771