From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 1C9DF381C6C1; Fri, 7 Jun 2024 19:02:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1C9DF381C6C1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1717786937; bh=e0Z3Ed68rKbT0qwk/HDzD4ItULL28XxiyOCK0wKlp4Y=; h=From:To:Subject:Date:In-Reply-To:References:From; b=OWk0iSDapt8CDd1wQsGr9mOO5imALokw02dmK0q5YXHHK06IDLVUfX5Ylp4jrVWsm CT6PeHMVjUSwcb9rRSLYVTk9UJk2qdEu1RZ5BVLaw/HUGsqEOSqrDjhn9qXhtNVMp9 HpAGHjTrKV6gHiCsJI1XmNQk/lNGBV0cCOfHJwcs= From: "rdapp at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/115382] Wrong code with in-order conditional reduction and masked loops Date: Fri, 07 Jun 2024 19:02:16 +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: 15.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: rdapp at gcc dot gnu.org 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 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D115382 --- Comment #1 from Robin Dapp --- Would something like this work? The testcase ran successfully with Intel's= SME with that change (and aarch64 qemu with SVE). diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 028692614bb..f9bf6a45611 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -7215,7 +7215,21 @@ vectorize_fold_left_reduction (loop_vec_info loop_vi= nfo, tree len =3D NULL_TREE; tree bias =3D NULL_TREE; if (LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)) - mask =3D vect_get_loop_mask (loop_vinfo, gsi, masks, vec_num, vecty= pe_in, i); + { + tree mask_loop =3D vect_get_loop_mask (loop_vinfo, gsi, masks, + vec_num, vectype_in, i); + if (is_cond_op) + { + /* Merge the loop mask and the cond_op mask. */ + mask =3D make_ssa_name (TREE_TYPE (mask_loop)); + gassign *and_stmt =3D gimple_build_assign (mask, BIT_AND_EXPR, + mask_loop, + vec_opmask[i]); + gsi_insert_before (gsi, and_stmt, GSI_SAME_STMT); + } + else + mask =3D mask_loop; + } else if (is_cond_op) mask =3D vec_opmask[i]; if (LOOP_VINFO_FULLY_WITH_LENGTH_P (loop_vinfo)) --=20 2.45.1=