From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4971 invoked by alias); 11 Sep 2004 19:55:38 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 4959 invoked by uid 48); 11 Sep 2004 19:55:37 -0000 Date: Sat, 11 Sep 2004 19:55:00 -0000 Message-ID: <20040911195537.4958.qmail@sourceware.org> From: "rakdver at gcc dot gnu dot org" To: gcc-bugs@gcc.gnu.org In-Reply-To: <20040909235415.17387.hjl@lucon.org> References: <20040909235415.17387.hjl@lucon.org> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug rtl-optimization/17387] Redundant instructions in loop optimization X-Bugzilla-Reason: CC X-SW-Source: 2004-09/txt/msg01112.txt.bz2 List-Id: ------- Additional Comments From rakdver at gcc dot gnu dot org 2004-09-11 19:55 ------- ivopts gets rid of the extends once the record_bounds pass is enabled by the following patch. The nonsensical "mov %eax, %eax" type moves however still remain in the code. Zdenek Index: tree-optimize.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree-optimize.c,v retrieving revision 2.45 diff -c -3 -p -r2.45 tree-optimize.c *** tree-optimize.c 9 Sep 2004 20:53:36 -0000 2.45 --- tree-optimize.c 11 Sep 2004 19:44:56 -0000 *************** init_tree_optimization_passes (void) *** 392,397 **** --- 392,398 ---- NEXT_PASS (pass_loop_init); NEXT_PASS (pass_lim); NEXT_PASS (pass_iv_canon); + NEXT_PASS (pass_record_bounds); NEXT_PASS (pass_if_conversion); NEXT_PASS (pass_vectorize); NEXT_PASS (pass_linear_transform); Index: tree-pass.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree-pass.h,v retrieving revision 2.15 diff -c -3 -p -r2.15 tree-pass.h *** tree-pass.h 9 Sep 2004 20:53:37 -0000 2.15 --- tree-pass.h 11 Sep 2004 19:44:56 -0000 *************** extern struct tree_opt_pass pass_loop; *** 126,131 **** --- 126,132 ---- extern struct tree_opt_pass pass_loop_init; extern struct tree_opt_pass pass_lim; extern struct tree_opt_pass pass_iv_canon; + extern struct tree_opt_pass pass_record_bounds; extern struct tree_opt_pass pass_if_conversion; extern struct tree_opt_pass pass_vectorize; extern struct tree_opt_pass pass_complete_unroll; Index: tree-ssa-loop.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree-ssa-loop.c,v retrieving revision 2.17 diff -c -3 -p -r2.17 tree-ssa-loop.c *** tree-ssa-loop.c 8 Sep 2004 15:28:56 -0000 2.17 --- tree-ssa-loop.c 11 Sep 2004 19:44:57 -0000 *************** struct tree_opt_pass pass_iv_canon = *** 263,268 **** --- 263,297 ---- 0 /* letter */ }; + /* Record bounds on numbers of iterations of loops. */ + + static void + tree_ssa_loop_bounds (void) + { + if (!current_loops) + return; + + estimate_numbers_of_iterations (current_loops); + scev_reset (); + } + + struct tree_opt_pass pass_record_bounds = + { + "bounds", /* name */ + NULL, /* gate */ + tree_ssa_loop_bounds, /* execute */ + NULL, /* sub */ + NULL, /* next */ + 0, /* static_pass_number */ + 0, /* tv_id */ + PROP_cfg | PROP_ssa, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + 0, /* todo_flags_finish */ + 0 /* letter */ + }; + /* Complete unrolling of loops. */ static void -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17387