From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by sourceware.org (Postfix) with ESMTPS id E0F1B3858C50 for ; Mon, 6 Nov 2023 13:07:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E0F1B3858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E0F1B3858C50 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::132 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699276058; cv=none; b=LRgf6LWkf5s+KP3PiD4sfj6PYHP50cACNWHu1LGBoDxjnCz5evqlvdfKFIDmWFfTitVOhAiJz+6pdA+MYU74qcnrrvJ2AY8OQQ0ZX/YjNORUI/KMEaAfr5NDogW/ZB9YARN9AksyJ1VdrwrQQTUXdumg7bqegCStd0YBD3jmWDA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699276058; c=relaxed/simple; bh=SzrkujuCf0weeJ2rDcc90zDZnEujU6J/6RQ/rt5GMXk=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=C3Pa/blpDekX+uVuDhTbNkoLRdIMXqvZUdMbdA5CsEoLYEYlcAIYqUD/9D0hhwHLj/uijRRDtm1xdIF03VkF+SWD8gd36HbG55N0sXxLoSd5RRCdA0hLDKRTpt1rZWBRpzFrohrMys/OjwVACc2rDhDu6qb+67NXcCe23EVTy3Y= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-5079f3f3d7aso5890823e87.1 for ; Mon, 06 Nov 2023 05:07:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699276050; x=1699880850; darn=gcc.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=kLdBJeyjJnfiuq7xmDTBFcrl9k+7xOQQT09C9uvy4RI=; b=UpP1qRsnI9aGoo6rQIk78uEeOvpWG9UhZOvAJ3uYzYMHj+0WlbOEQ0EOm3IhO25R0q BoSwWWH74qd7kwtOTIko/a2WpxXz3M/7cCCzAsEXVRQyYZd/fs9x5FvpdFh22vOwPQXZ KmqiQaZchQoDoFiZxZZOsGTRBL3Do2WWj8rQbODE/WWQhmpSarKSbQJnURgV3tPU/52A yyp3RQAkLwUbKFKSqbZIF08eZZTp9t2eruQaSTsW+uXnwuB7OZL1fFpYqJytj9laMN4r YfVAAidwlzXPXOEk4EVdDgMm+MS7GkmOvXbIfZq63cHlY+9hiprxARutuQgbLI48kukN 5sJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699276050; x=1699880850; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kLdBJeyjJnfiuq7xmDTBFcrl9k+7xOQQT09C9uvy4RI=; b=My1T2MOhS8nauhufr+r5u6czc6Ef5A886py03boUTEHbfzvAX7g7DMKcEDWwa2ocdg 7kvmxrTmCzj46CNy46D7o2It+1bXeHoZXZKCUH1MLZLbWWw0hN84/LFWfFyzbG2sXPxL C0LKfvo4yfrfC3xlb5OoVf/s4weGpaIoVeGXBZa+Q3vf9lHubR81PRg/k36xEkV9c8LI 4Ro8OGio12TyG23WTUku/mvODWQxZqDbgdHaTLC+QsmqI+BTNQU3e0IQ0zd5LXEr1NYg HOuKY05EqPiVYSckEdOUcdJHaM4hZgmkAQvbRzXXLYplakGV0oIcAkvKY6gtVOgWlxuR Qybw== X-Gm-Message-State: AOJu0YzE9x2sH2USpD0PgAus9esQ2+b7eWJExRJM1c97ttfqnhfuqFhZ pZuH+UPc7ASSK9xmsZgKz/yOYjC/fgsxhHYqCGG13ha0cmI= X-Google-Smtp-Source: AGHT+IGis3lTg4nHxR+QilDpG9HHLquakvXKyl5zG05Px3/pzMJp7aqCo5obQ8V61S1DnQN0VUk4geno/XviSQm7Oy0= X-Received: by 2002:a05:6512:20ca:b0:507:a8d1:6e56 with SMTP id u10-20020a05651220ca00b00507a8d16e56mr20216227lfr.35.1699276050018; Mon, 06 Nov 2023 05:07:30 -0800 (PST) MIME-Version: 1.0 References: <20231106130145.3265828-1-maxim.a.blinov@gmail.com> In-Reply-To: <20231106130145.3265828-1-maxim.a.blinov@gmail.com> From: Richard Biener Date: Mon, 6 Nov 2023 14:04:08 +0100 Message-ID: Subject: Re: [PATCH] RISC-V: VECT: Remember to assert any_known_not_updated_vssa To: Maxim Blinov Cc: gcc-patches@gcc.gnu.org, juzhe.zhong@rivai.ai, maxim.blinov@imgtec.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Mon, Nov 6, 2023 at 2:02=E2=80=AFPM Maxim Blinov wrote: > > From: Maxim Blinov > > This patch is based on and intended for the vendors/riscv/gcc-13-with-ris= cv-opts branch - please apply if looks OK. > > Fixes the following ICEs that I'm seeing: > > FAIL: gcc.dg/vect/O3-pr49087.c (internal compiler error: in vect_transfor= m_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/no-scevccp-pr86725-1.c (internal compiler error: in vec= t_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/no-scevccp-pr86725-2.c (internal compiler error: in vec= t_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/no-scevccp-pr86725-3.c (internal compiler error: in vec= t_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/no-scevccp-pr86725-4.c (internal compiler error: in vec= t_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/pr94443.c (internal compiler error: in vect_transform_l= oops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/pr94443.c -flto -ffat-lto-objects (internal compiler er= ror: in vect_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/slp-50.c (internal compiler error: in vect_transform_lo= ops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/slp-50.c -flto -ffat-lto-objects (internal compiler err= or: in vect_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/vect-cond-13.c (internal compiler error: in vect_transf= orm_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/vect-cond-13.c -flto -ffat-lto-objects (internal compil= er error: in vect_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/vect-live-6.c (internal compiler error: in vect_transfo= rm_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.dg/vect/vect-live-6.c -flto -ffat-lto-objects (internal compile= r error: in vect_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.target/riscv/rvv/autovec/partial/live-1.c (internal compiler er= ror: in vect_transform_loops, at tree-vectorizer.cc:1032) > FAIL: gcc.target/riscv/rvv/autovec/partial/live-2.c (internal compiler er= ror: in vect_transform_loops, at tree-vectorizer.cc:1032) > > -- >8 -- > > When we create a VEC_EXPAND gimple stmt: > > /* SCALAR_RES =3D VEC_EXTRACT . */ > tree scalar_res > =3D gimple_build (&stmts, CFN_VEC_EXTRACT, TREE_TYPE (vectype= ), > vec_lhs_phi, last_index); > > Under the hood we are really just creating a GIMPLE_CALL stmt. Later > on, when we `gsi_insert_seq_before` our stmts: > > if (stmts) > { > gimple_stmt_iterator exit_gsi =3D gsi_after_labels (exit_bb); > gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT); > > We eventually run into tree-ssa-operands.cc:1147: > > operands_scanner (fn, stmt).build_ssa_operands (); > > Since VEC_EXPAND is *not* marked with ECF_NOVOPS, ECF_CONST, or > ECF_PURE flags in internal-fn.def, when I see DEF_INTERNAL_OPTAB_FN (VEC_EXTRACT, ECF_CONST | ECF_NOTHROW, vec_extract, vec_extract) ? > `operand_scanner::parse_ssa_operands` comes across our > VEC_EXTRACT-type GIMPLE_CALL, it generates a `gimple_vop()` artificial > variable. > > `operand_scanner::finalize_ssa_defs` then picks this up, so our final > stmt goes from > > _73 =3D .VEC_EXTRACT (vect_last_9.56_71, _72); > > to > > # .MEM =3D VDEF <> > _73 =3D .VEC_EXTRACT (vect_last_9.56_71, _72); > > But more importantly it marks us as `ssa_renaming_needed`, in > tree-ssa-operands.cc:420: > > /* If we have a non-SSA_NAME VDEF, mark it for renaming. */ > if (gimple_vdef (stmt) > && TREE_CODE (gimple_vdef (stmt)) !=3D SSA_NAME) > { > fn->gimple_df->rename_vops =3D 1; > fn->gimple_df->ssa_renaming_needed =3D 1; > } > > This then proceeds to crash the compiler when we are about to leave > `vect_transform_loops`: > > if (need_ssa_update_p (cfun)) > { > gcc_assert (loop_vinfo->any_known_not_updated_vssa); > fun->gimple_df->ssa_renaming_needed =3D false; > todo |=3D TODO_update_ssa_only_virtuals; > } > > Since, > > - `need_ssa_update_p (cfun)` is true (it was set when we generated a > memory vdef) > - `loop_vinfo->any_known_not_updated_vssa` is false > > As the code currently stands, creating a gimple stmt containing a > VEC_EXTRACT should always generate a memory vdef, therefore we should > remember to mark `loop_vinfo->any_known_not_updated_vssa` afterwards. > > gcc/ChangeLog: > > * tree-vect-loop.cc (vectorizable_live_operation): Remember to > assert loop_vinfo->any_known_not_updated_vssa if we are inserting > a call to VEC_EXPAND. > --- > gcc/tree-vect-loop.cc | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc > index c8df2c88575..53c3a31d2a8 100644 > --- a/gcc/tree-vect-loop.cc > +++ b/gcc/tree-vect-loop.cc > @@ -10155,6 +10155,11 @@ vectorizable_live_operation (vec_info *vinfo, > =3D gimple_build (&stmts, CFN_VEC_EXTRACT, TREE_TYPE (vectype= ), > vec_lhs_phi, last_index); > > + /* We've expanded SSA at this point, and since VEC_EXTRACT > + will generate vops, make sure to tell GCC that we need to > + update SSA. */ > + loop_vinfo->any_known_not_updated_vssa =3D true; > + > /* Convert the extracted vector element to the scalar type. */ > new_tree =3D gimple_convert (&stmts, lhs_type, scalar_res); > } > -- > 2.34.1 >