From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 111704 invoked by alias); 4 Mar 2015 14:44:35 -0000 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 Received: (qmail 99127 invoked by uid 48); 4 Mar 2015 14:44:27 -0000 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/65307] [4.9/5 Regression] Incorrect optimization breaks basic arithmetic Date: Wed, 04 Mar 2015 14:44:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 4.9.2 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.9.3 X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cf_known_to_work short_desc cf_known_to_fail Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2015-03/txt/msg00495.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65307 Richard Biener changed: What |Removed |Added ---------------------------------------------------------------------------- Known to work|5.0 | Summary|[4.9 Regression] Incorrect |[4.9/5 Regression] |optimization breaks basic |Incorrect optimization |arithmetic |breaks basic arithmetic Known to fail| |5.0 --- Comment #10 from Richard Biener --- The simpler testcase reproduces on trunk for me. Trunk assert: Index: gcc/tree-ssa-ccp.c =================================================================== --- gcc/tree-ssa-ccp.c (revision 221174) +++ gcc/tree-ssa-ccp.c (working copy) @@ -1901,9 +1922,13 @@ evaluate_stmt (gimple stmt) } else { - if (wi::bit_and_not (val.value, nonzero_bits) != 0) - val.value = wide_int_to_tree (TREE_TYPE (lhs), - nonzero_bits & val.value); + wide_int tem = wi::bit_and_not (val.value, nonzero_bits); + if (tem != 0) + { + gcc_assert (extend_mask (tem).and_not (val.mask) == 0); + val.value = wide_int_to_tree (TREE_TYPE (lhs), + nonzero_bits & val.value); + } if (nonzero_bits == 0) val.mask = 0; else