aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-loop-linear.c
AgeCommit message (Collapse)AuthorFilesLines
2005-03-10Makefile.in (tree-optimize.o): Add CFGLOOP_H dependence.Zdenek Dvorak1-2/+2
* Makefile.in (tree-optimize.o): Add CFGLOOP_H dependence. * cfgloop.c (flow_loop_nodes_find): Export. * cfgloop.h (flow_loop_nodes_find, fix_loop_structure): Declare. * cfgloopmanip.c (fix_loop_structure): New function. * predict.c (predict_loops): Clean up the loops information. * tree-cfg.c (cleanup_tree_cfg_loop): New function. (tree_can_merge_blocks_p, remove_bb, tree_forwarder_block_p): Respect loop structure. * tree-flow.h (cleanup_tree_cfg_loop): Declare. (rewrite_into_loop_closed_ssa): Declaration changed. * tree-loop-linear.c (linear_transform_loops): Add argument to rewrite_into_loop_closed_ssa call. * tree-ssa-loop-ch.c (copy_loop_headers): Ditto. * tree-ssa-loop-im.c (move_computations): Ditto. * tree-ssa-loop.c (tree_loop_optimizer_init): Ditto. * tree-vectorizer.c (vectorize_loops): Ditto. * tree-optimize.c: Include cfgloop.h. (execute_todo): Choose whether to call cleanup_tree_cfg or cleanup_tree_cfg_loop. * tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables, (tree_unroll_loops_completely): Enable cleanup_tree_cfg_loop call. * tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops): Enable cleanup_tree_cfg_loop call. * tree-ssa-loop-manip.c (find_uses_to_rename_bb): New function. (find_uses_to_rename, rewrite_into_loop_closed_ssa): Support work on part of cfg. From-SVN: r96232
2005-03-01cfgloop.c (flow_loop_entry_edges_find, [...]): Removed.Zdenek Dvorak1-2/+1
* cfgloop.c (flow_loop_entry_edges_find, flow_loop_exit_edges_find, flow_loop_pre_header_scan, flow_loop_pre_header_find, flow_loop_scan): Removed. (flow_loop_dump): Do not dump removed fields. (flow_loop_free): Do not free removed fields. (flow_loops_find): Flags argument removed. Do not call flow_loop_scan. (loop_exit_edge_p): New function. * cfgloop.h (struct loop): Removed fields pre_header, pre_header_edges, num_pre_header_edges, entry_edges, num_entries, exit_edges, num_exits, exits_doms. (LOOP_TREE, LOOP_PRE_HEADER, LOOP_ENTRY_EDGES, LOOP_EXIT_EDGES, LOOP_EDGES, LOOP_ALL): Removed. (flow_loop_scan): Declaration removed. (loop_exit_edge_p, mark_loop_exit_edges): Declare. * cfgloopmanip.c (create_loop_notes): Do not pass flags to flow_loops_find. * ifcvt.c (mark_loop_exit_edges): Moved to cfgloopanal.c. (if_convert): Call flow_loops_find and flow_loops_free when calling mark_loop_exit_edges. * cfgloopanal.c (mark_loop_exit_edges): Moved from ifcvt.c. Removed the flow_loops_find, flow_loops_free and free_dominance_info calls. * loop-init.c (flow_loops_find): Ditto. * passes.c (rest_of_handle_branch_prob): Ditto. * lambda-code.c (perfect_nestify): Do not call flow_loops_find. * loop-unroll.c (analyze_insns_in_loop): Do not use EDGE_LOOP_EXIT. * predict.c (predict_loops): Do not call flow_loop_scan. Use get_loop_exit_edges. (tree_estimate_probability): Do not pass flags to flow_loops_find. * tree-if-conv.c (bb_with_exit_edge_p): Take loop as argument. Do not use EDGE_LOOP_EXIT. (tree_if_convert_cond_expr, if_convertible_modify_expr_p): Pass loop to bb_with_exit_edge_p. (if_convertible_loop_p): Do not call flow_loop_scan. Use loop->single_exit. Do not use EDGE_LOOP_EXIT. Pass loop to bb_with_exit_edge_p. (combine_blocks): Pass loop to bb_with_exit_edge_p. Do not use EDGE_LOOP_EXIT. * tree-loop-linear.c (linear_transform_loops): Do not call flow_loop_scan. Use loop->single_exit. * tree-vect-analyze.c (vect_analyze_operations): Use loop->single_exit. (vect_analyze_loop_form): Do not call flow_loop_scan. * tree-vect-transform.c (vect_update_ivs_after_vectorizer): Use loop->single_exit. (vect_do_peeling_for_loop_bound): Use loop_preheader_edge and loop->single_exit. * tree-vectorizer.c (slpeel_update_phis_for_duplicate_loop, slpeel_make_loop_iterate_ntimes, slpeel_can_duplicate_loop_p, slpeel_tree_duplicate_loop_to_edge_cfg, slpeel_verify_cfg_after_peeling, slpeel_tree_peel_loop_to_edge): Use loop_preheader_edge and loop->single_exit. Do not call flow_loop_scan. From-SVN: r95738
2005-02-17lambda-code (perfect_nestify): Remove mark/unmark for rewriting hack.Daniel Berlin1-0/+1
2005-02-17 Daniel Berlin <dberlin@dberlin.org> * lambda-code (perfect_nestify): Remove mark/unmark for rewriting hack. * tree-loop-linear.c (linear_transform_loops): Add rewrite_into_ssa call so that ssa is correct for rewriting into loop closed. From-SVN: r95173
2005-01-18basic-block.h, [...]: Update copyright.Kazu Hirata1-1/+1
* basic-block.h, c-common.c, c-cppbuiltin.c, c-lang.c, c-tree.h, cfgbuild.c, cgraph.c, cgraph.h, collect2.c, combine.c, config.gcc, coverage.h, cse.c, cselib.c, defaults.h, df.c, dwarf2asm.c, dwarf2out.c, explow.c, expr.c, flow.c, fold-const.c, gcse.c, ggc-page.c, gimple-low.c, gimplify.c, ifcvt.c, langhooks-def.h, lcm.c, optabs.h, output.h, postreload-gcse.c, postreload.c, recog.c, resource.c, rtl.def, rtlanal.c, sched-deps.c, sched-rgn.c, targhooks.h, toplev.c, tree-data-ref.c, tree-eh.c, tree-flow.h, tree-loop-linear.c, tree-mudflap.h, tree-nrv.c, tree-optimize.c, tree-outof-ssa.c, tree-pass.h, tree-scalar-evolution.c, tree-ssa-copy.c, tree-ssa-dce.c, tree-ssa-dse.c, tree-ssa-loop-ivopts.c, tree-ssa-operands.c, tree-ssa-pre.c, tree-ssa.c, tree-vectorizer.c, tree.def, unwind-dw2-fde-darwin.c, var-tracking.c: Update copyright. From-SVN: r93827
2005-01-06re PR tree-optimization/18792 (ICE with -O1 -ftree-loop-linear on small test ↵Daniel Berlin1-23/+31
case) 2005-01-06 Daniel Berlin <dberlin@dberlin.org> Fix PR tree-optimization/18792 * tree-data-ref.c (build_classic_dist_vector): Change first_loop to first_loop_depth, and use loop depth instead of loop number. (build_classic_dir_vector): Ditto. (compute_data_dependences_for_loop): Use depth, not loop number. * tree-loop-linear.c (try_interchange_loops): Use loop depth, not loop number. Pass in loops, instead of loop numbers. (gather_interchange_stats): Ditto. (linear_transform_loops): Ditto. From-SVN: r93008
2004-11-03lambda-code.c (lambda_compute_auxillary_space): Update comments.Daniel Berlin1-16/+13
2004-11-02 Daniel Berlin <dberlin@dberlin.org> * lambda-code.c (lambda_compute_auxillary_space): Update comments. (lambda_compute_target_space). Ditto. * lambda.h (lambda_trans_matrix): Ditto. (lambda_linear_expression): Ditto. (lambda_body_vector): Ditto. (lambda_loopnest): Ditto. * tree-loop-linear.c (gather_interchange_stats): Combine tests, update comments, and remove pointless addition of 0. (linear_transform_loops): Update comments. From-SVN: r90029
2004-11-01Fix PR tree-optimization/17672 Fix PR tree-optimization/18168Daniel Berlin1-6/+13
2004-10-16 Daniel Berlin <dberlin@dberlin.org> Fix PR tree-optimization/17672 Fix PR tree-optimization/18168 * lambda-code.c (lambda_lattice_compute_base): Fix reversed assert test. (gcc_tree_to_linear_expression): Add extra to existing constant. (depth_of_nest): Factor out function used in various places. (gcc_loop_to_lambda_loop): Clean up code a little bit. No functional changes. (find_induction_var_from_exit_cond): Stop guessing, and just get the right answer :). (gcc_loopnest_to_lambda_loopnest): Remove useless pre-allocation. Print out message about result of attempt to create perfect nest. (lbv_to_gcc_expression): Add type argument, use it to do math and induction variable creation. (lle_to_gcc_expression): Ditto. (lambda_loopnest_to_gcc_loopnest): Create new iv with same type as oldiv. Pass type argument to lle_to_gcc_expression and lbv_to_gcc_expression. Reset number of iterations after transformation. (perfect_nestify): Remove useless pre-allocation, and cleanup a small amount. * tree-data-ref.c (build_classic_dist_vector): Return false for dependences completely outside of the loop nest we asked about. (build_classic_dir_vector): Ditto. (compute_data_dependences_for_loop): Only add dependence relations inside the loop we asked about. * tree-loop-linear.c (linear_transform_loops): Use DDR_SIZE_VECT. Compute immediate uses. * tree-optimize.c: Move linear_transform_loops to before ivcanon. From-SVN: r89945
2004-09-16[multiple changes]Daniel Berlin1-42/+129
2004-09-16 Daniel Berlin <dberlin@dberlin.org> * cfgloop.h (duplicate_loop): Add prototype. * cfgloopmanip.c (duplicate_loop): Make non-static. * lambda-code.c (perfect_nestify): Factor out test whether we can handle this loop into separate function. Call it. (can_convert_to_perfect_nest): New function. (replace_uses_of_x_with_y): Add modify_stmt call. * tree-loop-linear.c (linear_transform_loops): Call rewrite_into_loop_closed_ssa and free_df. 2004-09-16 Daniel Berlin <dberlin@dberlin.org> * lambda-code.c (invariant_in_loop): is_gimple_min_invariant is loop invariant as well. (perfect_nestify): new function. (gcc_loop_to_lambda_loop): New parameters to track lower bounds, upper bounds, and steps. Set outerinductionvar properly. (gcc_loopnest_to_lambda_loopnest): Add loops and need_perfect parameters. Return NULL if we need a perfect loop and can't make one. (lambda_loopnest_to_gcc_loopnest): Correct algorithm. (not_interesting_stmt): New function. (phi_loop_edge_uses_def): Ditto. (stmt_uses_phi_result): Ditto. (stmt_is_bumper_for_loop): Ditto. (perfect_nest_p): Ditto. (nestify_update_pending_stmts): Ditto. (replace_uses_of_x_with_y): Ditto. (stmt_uses_op): Ditto. (perfect_nestify): Ditto. * lambda-mat.c (lambda_matrix_id_p): New function. * lambda-trans.c (lambda_trans_matrix_id_p): Ditto. * lambda.h: Update prototypes. * tree-loop-linear (linear_transform_loop): Use new perfect_nest_p. Detect and ignore identity transform. * tree-ssa-loop.c (pass_linear_transform): Use TODO_write_loop_closed. 2004-09-16 Sebastian Pop <pop@cri.ensmp.fr> * tree-loop-linear.c (gather_interchange_stats): Add more comments. Gather also strides of accessed data. Pass in the data references array. (try_interchange_loops): Add a new heuristic for handling the temporal locality. Pass in the data references array. (linear_transform_loops): Pass the data references array to try_interchange_loops. From-SVN: r87607
2004-09-08Makefile.in (tree-loop-linear.o): Added.Daniel Berlin1-0/+282
2004-09-08 Daniel Berlin <dberlin@dberlin.org> * Makefile.in (tree-loop-linear.o): Added. (OBJS-common): Add tree-loop-linear.o * common.opt: New flag, ftree-loop-linear. * timevar.def: New timevar, TV_TREE_LOOP_LINEAR. * tree-flow.h: Add prototype for linear_transform_loops. * tree-optimize.c: Add linear transform after vectorization. * tree-pass.h: Add struct pass_linear_transform. * tree-ssa-loop.c: Add pass_linear_transform. * tree-loop-linear.c: New file. * lambda-code.c: gcc_assertify. (gcc_loop_to_lambda_loop): Handle all exit tests. Handle case where we have (invariant >= induction var). (find_induction_var_from_exit_cond): Ditto. From-SVN: r87190