From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 826F33858D20; Thu, 17 Feb 2022 07:07:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 826F33858D20 From: "crazylht at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/104579] vectorizer failed to reduce max & index search together Date: Thu, 17 Feb 2022 07:07:51 +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.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: crazylht at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- 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: Thu, 17 Feb 2022 07:07:51 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D104579 --- Comment #1 from Hongtao.liu --- ------------cut ------------ /* Function vect_is_simple_reduction (1) Detect a cross-iteration def-use cycle that represents a simple reduction computation. We look for the following pattern: loop_header: a1 =3D phi < a0, a2 > a3 =3D ... a2 =3D operation (a3, a1) or a3 =3D ... loop_header: a1 =3D phi < a0, a2 > a2 =3D operation (a3, a1) such that: 1. operation is commutative and associative and it is safe to change the order of the computation 2. no uses for a2 in the loop (a2 is used out of the loop) 3. no uses of a1 in the loop besides the reduction operation ---------end------------------ ----dump vect------- [local count: 955630225]: # maxInt_19 =3D PHI # maxIndex_20 =3D PHI # i_24 =3D PHI _1 =3D (long unsigned int) i_24; _2 =3D _1 * 4; _3 =3D src_13(D) + _2; _4 =3D *_3; maxInt_7 =3D MAX_EXPR <_4, maxInt_19>; ------ reduction operation maxIndex_9 =3D _4 <=3D maxInt_19 ? maxIndex_20 : i_24; --- another use he= re. i_18 =3D i_24 + 1; if (n_15(D) > i_18) ----dump end--------- For the case in the PR, there's 2 uses for a1(maxInt_19), one in reduction operation(MAX_EXPR <_4, maxInt_19>), another in 4 <=3D maxInt_19 ? maxIndex= _20 : i_24), and it failed.=