From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29730 invoked by alias); 18 Oct 2008 22:44:15 -0000 Received: (qmail 29309 invoked by uid 48); 18 Oct 2008 22:42:54 -0000 Date: Sat, 18 Oct 2008 22:44:00 -0000 Message-ID: <20081018224254.29308.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug tree-optimization/37868] code that breaks TBAA is misoptimized even with -fno-strict-aliasing 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: 2008-10/txt/msg01228.txt.bz2 ------- Comment #4 from rguenth at gcc dot gnu dot org 2008-10-18 22:42 ------- 4.3 is broken because PTA figures D.1187_2 = { x.a } from the constraints x.0_1 = &x D.1187_2 = x.0_1 + 64 because the 4.3 branch doesn't have the PTA fixes, in particular /* If the found variable is not exactly at the pointed to result, we have to include the next variable in the solution as well. Otherwise two increments by offset / 2 do not result in the same or a conservative superset solution. */ if (temp->offset != curr->offset + rhsoffset && temp->next != NULL) { struct constraint_expr c2; c2.var = temp->next->id; c2.type = ADDRESSOF; c2.offset = 0; VEC_safe_push (ce_s, heap, *results, &c2); } see rev. 137573: 2008-07-07 Richard Guenther + * tree-ssa-structalias.c (struct variable_info): Add is_full_var flag. + (new_var_info): Set it to false. + (solution_set_add): Correctly handle pointers outside a var and + inside a field. + (type_safe): Treat variables with is_full_var properly. + (do_sd_constraint): Likewise. + (do_ds_constraint): Likewise. + (process_constraint): Remove zeroing offset for !use_field_sensitive. + (get_constraint_for_ptr_offset): New function. + (get_constraint_for_component_ref): For addresses at least include + the last field of the variable. Handle is_full_vars properly. + (get_constraint_for_1): Factor common code, handle POINTER_PLUS_EXPR. + (handle_ptr_arith): Remove. + (find_func_aliases): Simplify assignment handling. + (create_function_info_for): For parameter and result varinfos set + is_full_var flag. + (create_variable_info_for): Set is_full_var flag whenever we + just created a single varinfo for a decl. + (init_alias_vars): Initialize use_field_sensitive from + max-fields-for-field-sensitive parameter. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords| |wrong-code Last reconfirmed|0000-00-00 00:00:00 |2008-10-18 22:42:54 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37868