From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) by sourceware.org (Postfix) with ESMTPS id 1AFA03858401 for ; Mon, 20 Nov 2023 08:06:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1AFA03858401 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 1AFA03858401 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700467611; cv=none; b=wmx/fZJRph3cBrTs8ro8vCA3T+uCV59ikuOqi5cJDhNYQ+QnYRgpv6p1tAaH/W8tlSczV3eRR/c5b5VV9xAKAYh+yyRbAmU0ZU6fg0UZs2rDLCfXxd5P2QjI/YVqp7jiDSpyg8J6eU3S/iEXWzWVO39XjRq4zy+OIsS9dsWxtKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700467611; c=relaxed/simple; bh=B8B0NNPRGue4wKHRuNCMf9Cs0A+WXxkgFuo6uG/RCck=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=KhKQxZZypTyWAL9oq+PETlSUxfd06UN68EQd1+ZaNYvCT/Kz1TF6jXCAQYKFxS0v6Z2gFsoTyULi1rxbBr+5K9L5UTQLVRUmth8ZkeQqARRd0u8bCk1cikdz42nPemdsSCpTtDmZZBXdDyEsyV0LaSD0tHzh9mI69thLaMgPo/8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-507bd19eac8so5262490e87.0 for ; Mon, 20 Nov 2023 00:06:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700467607; x=1701072407; 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=juWWcfJNobF4JYgYbqCogb4GCL+wdexags8ln3xkme8=; b=lmw7vshBiGh+3Vl9wyMhO8iNmwcMEO+DrZZtbeazI5+TWjCe+QRDTdBUWUjQ3Z53W1 HCPW1FaYPmJZWsiWDB+Brc/aPhKvNhy36+0EVLOwWeVeQ7mZ35u9bJ/dSt+eeh/VkHQY yHHOCbgOLFyeJKZyI5PMCbIC+nJcA4qwaDQkwKi204OQaPaf7oHlaNJrl5/tu4HNYPtx ai/vFmDuPK01u8FJS3mzSA+kIzsEoIPqA/tdhVYz4yEJAgG/46pJDP5d8QAUL/cmwmyX blyhiihnR34XzkLlhzZHBTcp6452WZC1G0l2CrsW07XvBnfQRjwDwuS347oLw0/Pb7NL hw8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700467607; x=1701072407; 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=juWWcfJNobF4JYgYbqCogb4GCL+wdexags8ln3xkme8=; b=a42MCfKAM0PnTNnRvKH1qXXejOgAgSpmuxNKoLzhsZ80uIfPqvLPPFhobOUV92NWx1 m22jr5pRCQYKKFQEUgtFoU6lV7F52S9ZTcBGlHQExdd8mTbyIG5L23jf5jODJ59wrqY+ /jSSOw/rBe5nxNbAirlMmotYTVq+GoNbUhi4Bd3WJkmawnoL2QAgZsM0xHidaIipS2ur DzdMPqJ7pO4UooHhEoK59IV73kK3zuslWS165Tm9OKqZZO7dKgsylEEJhRvhXXG22zni 9vQ7QcbbrV8izmznwtLiuO1OKuep8onKx7nEGO99oqFv4YpQOT6qPPuW011ZKsYm9d+Z MGHA== X-Gm-Message-State: AOJu0YzohdJcN8Vi4sLVKZgBPnLns9bWKgbZNAxeWXXiOMA7m/zb1sLV ZtBK59wWeu9+8+u3j51O4580QJRjFi9CDqMbQxU= X-Google-Smtp-Source: AGHT+IHiCoEyWXT4GhAYBGKleDsE1Wnc040kJY9IIwoZmq7oNHFOXh3FylY/sqxjTEldhdxTA1Ms35JkbRQgxga0mjc= X-Received: by 2002:a05:6512:398c:b0:50a:aa64:ad0f with SMTP id j12-20020a056512398c00b0050aaa64ad0fmr3829868lfu.55.1700467607389; Mon, 20 Nov 2023 00:06:47 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Richard Biener Date: Mon, 20 Nov 2023 09:03:09 +0100 Message-ID: Subject: Re: [PATCH] vect: Use statement vectype for conditional mask. To: Robin Dapp Cc: Richard Sandiford , gcc-patches , Tamar Christina Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,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 Fri, Nov 17, 2023 at 8:20=E2=80=AFPM Robin Dapp wr= ote: > > > No, you shouldn't place _7 !=3D 0 inside the .COND_ADD but instead > > have an extra pattern stmt producing that so > > > > patt_8 =3D _7 !=3D 0; > > patt_9 =3D .COND_ADD (patt_8, ...); > > > > that's probably still not enough, but I always quickly forget how > > bool patterns work ... basically a comparison like patt_8 =3D _7 !=3D 0 > > vectorizes to a mask (aka vector boolean) while any "data" uses > > of bools are replaced by mask ? 1 : 0; - there's a complication for > > bool data producing loads which is why we need to insert the > > "fake" compares to produce a mask. IIRC. > > I already had call handling to vect_recog_bool_pattern in working > shape when I realized that vect_recog_mask_conversion_pattern already > handles most of what I need. The difference is that it doesn't do > patt_8 =3D _7 !=3D 0 > but rather > patt_8 =3D () _7; > > It works equally well and most of the code can be reused. > > The attached was bootstrapped and regtested on x86 and aarch64 > and regtested on riscv. OK. Thanks, Richard. > Regards > Robin > > Subject: [PATCH] vect: Add bool pattern handling for COND_OPs. > > In order to handle masks properly for conditional operations this patch > teaches vect_recog_mask_conversion_pattern to also handle conditional > operations. Now we convert e.g. > > _mask =3D *_6; > _ifc123 =3D COND_OP (_mask, ...); > > into > _mask =3D *_6; > patt200 =3D () _mask; > patt201 =3D COND_OP (patt200, ...); > > This way the mask will be properly recognized as boolean mask and the > correct vector mask will be generated. > > gcc/ChangeLog: > > PR middle-end/112406 > > * tree-vect-patterns.cc (build_mask_conversion): > (vect_convert_mask_for_vectype): > > gcc/testsuite/ChangeLog: > > * gfortran.dg/pr112406.f90: New test. > --- > gcc/testsuite/gfortran.dg/pr112406.f90 | 21 +++++++++++++++++++++ > gcc/tree-vect-patterns.cc | 26 ++++++++++++++++++-------- > 2 files changed, 39 insertions(+), 8 deletions(-) > create mode 100644 gcc/testsuite/gfortran.dg/pr112406.f90 > > diff --git a/gcc/testsuite/gfortran.dg/pr112406.f90 b/gcc/testsuite/gfort= ran.dg/pr112406.f90 > new file mode 100644 > index 00000000000..27e96df7e26 > --- /dev/null > +++ b/gcc/testsuite/gfortran.dg/pr112406.f90 > @@ -0,0 +1,21 @@ > +! { dg-do compile { target { aarch64-*-* || riscv*-*-* } } } > +! { dg-options "-Ofast -w -fprofile-generate" } > +! { dg-additional-options "-march=3Drv64gcv -mabi=3Dlp64d" { target risc= v*-*-* } } > +! { dg-additional-options "-march=3Darmv8-a+sve" { target aarch64-*-* } = } > + > +module brute_force > + integer, parameter :: r=3D9 > + integer sudoku1(1, r) > + contains > +subroutine brute > +integer l(r), u(r) > + where(sudoku1(1, :) /=3D 1) > + l =3D 1 > + u =3D 1 > + end where > +do i1 =3D 1, u(1) > + do > + end do > + end do > +end > +end > diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc > index 7debe7f0731..696b70b76a8 100644 > --- a/gcc/tree-vect-patterns.cc > +++ b/gcc/tree-vect-patterns.cc > @@ -5830,7 +5830,8 @@ vect_recog_mask_conversion_pattern (vec_info *vinfo= , > tree rhs1_op0 =3D NULL_TREE, rhs1_op1 =3D NULL_TREE; > tree rhs1_op0_type =3D NULL_TREE, rhs1_op1_type =3D NULL_TREE; > > - /* Check for MASK_LOAD ans MASK_STORE calls requiring mask conversion.= */ > + /* Check for MASK_LOAD and MASK_STORE as well as COND_OP calls requiri= ng mask > + conversion. */ > if (is_gimple_call (last_stmt) > && gimple_call_internal_p (last_stmt)) > { > @@ -5842,6 +5843,7 @@ vect_recog_mask_conversion_pattern (vec_info *vinfo= , > return NULL; > > bool store_p =3D internal_store_fn_p (ifn); > + bool load_p =3D internal_store_fn_p (ifn); > if (store_p) > { > int rhs_index =3D internal_fn_stored_value_index (ifn); > @@ -5856,15 +5858,21 @@ vect_recog_mask_conversion_pattern (vec_info *vin= fo, > vectype1 =3D get_vectype_for_scalar_type (vinfo, TREE_TYPE (lhs= )); > } > > + if (!vectype1) > + return NULL; > + > tree mask_arg =3D gimple_call_arg (last_stmt, mask_argno); > tree mask_arg_type =3D integer_type_for_mask (mask_arg, vinfo); > - if (!mask_arg_type) > - return NULL; > - vectype2 =3D get_mask_type_for_scalar_type (vinfo, mask_arg_type); > + if (mask_arg_type) > + { > + vectype2 =3D get_mask_type_for_scalar_type (vinfo, mask_arg_typ= e); > > - if (!vectype1 || !vectype2 > - || known_eq (TYPE_VECTOR_SUBPARTS (vectype1), > - TYPE_VECTOR_SUBPARTS (vectype2))) > + if (!vectype2 > + || known_eq (TYPE_VECTOR_SUBPARTS (vectype1), > + TYPE_VECTOR_SUBPARTS (vectype2))) > + return NULL; > + } > + else if (store_p || load_p) > return NULL; > > tmp =3D build_mask_conversion (vinfo, mask_arg, vectype1, stmt_vin= fo); > @@ -5883,7 +5891,9 @@ vect_recog_mask_conversion_pattern (vec_info *vinfo= , > lhs =3D vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL); > gimple_call_set_lhs (pattern_stmt, lhs); > } > - gimple_call_set_nothrow (pattern_stmt, true); > + > + if (load_p || store_p) > + gimple_call_set_nothrow (pattern_stmt, true); > > pattern_stmt_info =3D vinfo->add_stmt (pattern_stmt); > if (STMT_VINFO_DATA_REF (stmt_vinfo)) > -- > 2.41.0 >