From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 9D9F33858D38; Wed, 12 Aug 2020 17:40:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9D9F33858D38 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1597254028; bh=ETQwb5cXOvOadkoXBtUL/sn1rbnd8rUa62Pq/OkYfEc=; h=From:To:Subject:Date:In-Reply-To:References:From; b=b0DREYruVFr8IGaCgyFJZajYQkPKUgNAUPO0lKqXHgHaPPFkRKbk60Cp5RlHjkAjS Wc5tGIFC5beNKLqypqQTXvPFR0gprAfNlnq6iZU9KarY6saHrdLP5h1vBbq3HVE7ex SF5xaolx9a/kL69qA+Sm1dwHY2xosMlu1HvdjWI8= From: "cvs-commit at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug ipa/96482] [10 Regression] Combination of -finline-small-functions and ipa-cp optimisations causes incorrect values being passed to a function since r279523 Date: Wed, 12 Aug 2020 17:40:28 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: ipa X-Bugzilla-Version: 11.0 X-Bugzilla-Keywords: patch, wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: cvs-commit at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P1 X-Bugzilla-Assigned-To: marxin at gcc dot gnu.org X-Bugzilla-Target-Milestone: 10.3 X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2020 17:40:28 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D96482 --- Comment #20 from CVS Commits --- The releases/gcc-10 branch has been updated by Martin Liska : https://gcc.gnu.org/g:66780083a0e79e5cb7c3acc8665aa47be4084a67 commit r10-8614-g66780083a0e79e5cb7c3acc8665aa47be4084a67 Author: Martin Liska Date: Wed Aug 12 09:21:51 2020 +0200 ipa: fix bit CPP when combined with IPA bit CP As mentioned in the PR, let's consider the following example: int __attribute__((noinline)) foo(int arg) { if (arg =3D=3D 3) return 1; if (arg =3D=3D 4) return 123; __builtin_unreachable (); } during WPA we find all calls of the function (yes the call with value 5 is UBSAN): Node: foo/0: param [0]: 5 [loc_time: 4, loc_size: 2, prop_time: 0, prop_size: 0] 3 [loc_time: 3, loc_size: 3, prop_time: 0, prop_size: 0] ctxs: VARIABLE Bits: value =3D 0x5, mask =3D 0x6 in LTRANS we have the following VRP info: # RANGE [3, 3] NONZERO 3 when we AND masks in get_default_value we end up with 6 & 3 =3D 2 (0x01= 0). That means the only second (least significant bit) is unknown and value (5 =3D 0x101) & ~mask gives us either 7 (0x111) or 5 (0x101). That's why if (arg_2(D) =3D=3D 3) gets optimized to false. gcc/ChangeLog: PR ipa/96482 * ipa-cp.c (ipcp_bits_lattice::meet_with_1): Drop value bits for bits that are unknown. (ipcp_bits_lattice::set_to_constant): Likewise. * tree-ssa-ccp.c (get_default_value): Add sanity check that IPA CP bit info has all bits set to zero in bits that are unknown. gcc/testsuite/ChangeLog: PR ipa/96482 * gcc.dg/ipa/pr96482.c: New test. (cherry picked from commit d58f078ce2d53e5dab6b3d0d5f960504268e1894)=