From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32236 invoked by alias); 25 Feb 2007 22:50:18 -0000 Received: (qmail 32197 invoked by uid 48); 25 Feb 2007 22:50:10 -0000 Date: Sun, 25 Feb 2007 22:50:00 -0000 Message-ID: <20070225225010.32196.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug tree-optimization/19431] missed optimization with ifs and deferencing In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "rguenth at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-02/txt/msg02839.txt.bz2 ------- Comment #15 from rguenth at gcc dot gnu dot org 2007-02-25 22:50 ------- We start with D.59982_3 = variable_2(D) + 4B; __unary_op = __unary_op.65; goto (); :; D.61146_10 = __unary_op._M_arg1; D.61147_11 = __unary_op._M_arg2; D.61093_12 = D.61146_10 + D.61147_11; *variable_13 = D.61093_12; variable_14 = variable_7 + 4B; variable_15 = variable_13 + 4B; # variable_7 = PHI # variable_13 = PHI :; if (D.59982_3 != variable_7) goto ; else goto ; and loop header copying and DOM make it optimizable: D.59982_3 = variable_2(D) + 4B; __unary_op.65._M_arg2 = v_1(D); __unary_op.65._M_arg1 = 0; __unary_op = __unary_op.65; __unary_op$_M_arg2_54 = __unary_op._M_arg2; __unary_op$_M_arg1_53 = __unary_op._M_arg1; if (variable_2(D) != D.59982_3) goto ; else goto ; :; return; # variable_49 = PHI # variable_27 = PHI :; __unary_op$_M_arg1_25 = __unary_op$_M_arg1_53; __unary_op$_M_arg2_17 = __unary_op$_M_arg2_54; D.61093_18 = __unary_op$_M_arg1_53 + __unary_op$_M_arg2_54; *variable_49 = D.61093_18; variable_20 = variable_27 + 4B; variable_21 = variable_49 + 4B; goto (); so a tweaked forwprop fixes it at least before PRE. But dunno if we want to do tree combining on conditions here. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19431