From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id A48F53858D1E; Fri, 2 Sep 2022 08:31:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A48F53858D1E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1662107460; bh=z3aU5uZwEg3vtVqUmvH5uNo02RvlesNa6iP5+liep9Y=; h=From:To:Subject:Date:In-Reply-To:References:From; b=q8v/V3aFzxt2NQf79h7Bz5ZbFBEMS2hknHuNGXZS9Xap5DK7SgayXA1FI3h8HvQvo hm2+u4FT+zoQnGx5YstVEEkX0KwkCaf3QEVWZVVfQ3GZlNU2na8GGDMVJ/o6AP9Mpz iPjhuUEh4GfvUsQep9RYl26p50mZNud2x0eCLymk= From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/106809] [12/13 regression] large bison grammars compilation got a lot slower, mainly due to -Wuninitialized Date: Fri, 02 Sep 2022 08:31: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: 12.2.1 X-Bugzilla-Keywords: compile-time-hog X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: rguenth at gcc dot gnu.org X-Bugzilla-Target-Milestone: 12.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 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D106809 --- Comment #5 from Richard Biener --- A testcase for this corner case is the following. At -O0 it is -Wuninitialized, at -O1 it is FRE: tree FRE : 5.55 ( 70%) 0.00 ( 0%) 5.56 ( = 67%) 16k ( 0%) and at -O2 PRE will finally make use of the value numbers, hoisting the load and optimizing the function to a single conditional. tree PRE : 2.80 ( 27%) 0.02 ( 6%) 2.82 ( = 26%) 17k ( 0%) tree FRE : 5.56 ( 54%) 0.01 ( 3%) 5.57 ( = 52%) 16k ( 0%) The -On behavior would be a regression from GCC 9 where the new VN was introduced. int foo (int x, int *val) { switch (x) { #define C(n) \ case n + 0: return *val; \ case n + 1: return *val; \ case n + 2: return *val; \ case n + 3: return *val; \ case n + 4: return *val; \ case n + 5: return *val; \ case n + 6: return *val; \ case n + 7: return *val; \ case n + 8: return *val; \ case n + 9: return *val; #define C1(n) \ C(n+00) C(n+10) C(n+20) C(n+30) C(n+40) \ C(n+50) C(n+60) C(n+70) C(n+80) C(n+90) #define C10(n) \ C1(n+000) C1(n+100) C1(n+200) C1(n+300) C1(n+400) \ C1(n+500) C1(n+600) C1(n+700) C1(n+800) C1(n+900) C10(1000) } return 0; }=