From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by sourceware.org (Postfix) with ESMTPS id 5CB9B3945C20 for ; Tue, 6 Dec 2022 02:14:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5CB9B3945C20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-lf1-x134.google.com with SMTP id x28so4140967lfn.6 for ; Mon, 05 Dec 2022 18:14:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=tP5fqIBVeho1BVDCz+37e+wdLoynYJMqY5p9+KFxXXE=; b=bh8U7Mcp7+NWToV9UvOPX64qdcdEiXKYJ4SxM7TmYC/6rQ2WH6Mrw9m2E3RG4MtLhq kdKhOFtH7rUqvScY92aSLUPsyH+cTmTUiq0BmKdDHLmHORtn9kE5ioTUz2PUDLfp9o/t ilgimSWut9KlBz0UFoSDqk3+y/aM4r77pGuEnKrhTAc2aFWnH5NgATPRWrKBj/wjNN3i WJW/gFlriSv1g/EU2BtEXogMkav8lWoohOZ/vEYOeR0hvwRbOnqCP358GGM8Z41N8/SN 3X0hbd5+9Pu+hDKpepFbr3P4SZrndTco97nB1RZXR0SJOTJI4qUR2SXiAEu5WJCcK/YY nhDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=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=tP5fqIBVeho1BVDCz+37e+wdLoynYJMqY5p9+KFxXXE=; b=k4+ygfekTJhePQf31rZ6jcXm9SG16+r8JXLGflivP2/q8ZJIJbWYoP8F+HbZBx4G4W D5Jj5Pv1yc7A4a0y9ALa+89sNtTG5RuCbmfv7cLtpXLSKDQCWxSw5ME5X2XtPLqCwPrW 15r/etKArW2xwJ168RxpKWHF3EFoBuZ6tGHyuZ+8ryQtkJZIuq3Ojekh3+Rlz5EnWuN2 vYPpowYhma3KKrAYCpz8QFgX1/xO60T+2nIfKucCbM+T56nUY6fmzmwHx1ryEej7EpuL Srh60qpCJuZmJPdLKaNTjzLY3clTdsF8icl6xAPNOi3cDPqALKQYZNbReccSWe/lQ5gQ wG8A== X-Gm-Message-State: ANoB5plDai9CYPz6rnsadupxQyaf2pDopAGvukvgxHLRuqlI0U959PIK JyA1kzs5PQVjIZLCEs4SGwqmkIICYGJepVd6wtdSBg== X-Google-Smtp-Source: AA0mqf6fIZcGBAFnSLskfVh+tVISjDnqydD/PDVeSnZSvruZLb30CmoCuJF9H6bH9tS76f/WVgT4rCBZLPprFNZ9pi0= X-Received: by 2002:ac2:4e6e:0:b0:4a2:2210:f169 with SMTP id y14-20020ac24e6e000000b004a22210f169mr23556480lfs.317.1670292867722; Mon, 05 Dec 2022 18:14:27 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Prathamesh Kulkarni Date: Tue, 6 Dec 2022 07:43:51 +0530 Message-ID: Subject: Re: [aarch64] PR107920 - Fix incorrect handling of virtual operands in svld1rq_impl::fold To: Prathamesh Kulkarni , gcc Patches , richard.sandiford@arm.com Content-Type: multipart/mixed; boundary="0000000000000d72ec05ef1f5db0" X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,WEIRD_PORT 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: --0000000000000d72ec05ef1f5db0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 6 Dec 2022 at 00:08, Richard Sandiford wrote: > > Prathamesh Kulkarni writes: > > Hi, > > The following test: > > > > #include "arm_sve.h" > > > > svint8_t > > test_s8(int8_t *x) > > { > > return svld1rq_s8 (svptrue_b8 (), &x[0]); > > } > > > > ICE's with -march=3Darmv8.2-a+sve -O1 -fno-tree-ccp -fno-tree-forwprop: > > during GIMPLE pass: fre > > pr107920.c: In function =E2=80=98test_s8=E2=80=99: > > pr107920.c:7:1: internal compiler error: in execute_todo, at passes.cc:= 2140 > > 7 | } > > | ^ > > 0x7b03d0 execute_todo > > ../../gcc/gcc/passes.cc:2140 > > > > because of incorrect handling of virtual operands in svld1rq_impl::fold= : > > # VUSE <.MEM> > > _5 =3D MEM [(signed char * {ref-all})x_3(D)]= ; > > _4 =3D VEC_PERM_EXPR <_5, _5, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, > > 12, 13, 14, 15, ... }>; > > # VUSE <.MEM_2(D)> > > return _4; > > > > The attached patch tries to fix the issue by building the replacement > > statements in gimple_seq, and passing it to gsi_replace_with_seq_vops, > > which resolves the ICE, and results in: > > : > > # VUSE <.MEM_2(D)> > > _5 =3D MEM [(signed char * {ref-all})x_3(D)]= ; > > _4 =3D VEC_PERM_EXPR <_5, _5, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, > > 12, 13, 14, 15, ... }>; > > # VUSE <.MEM_2(D)> > > return _4; > > > > Bootstrapped+tested on aarch64-linux-gnu. > > OK to commit ? > > Looks good, but we also need to deal with the -fnon-call-exceptions > point that Andrew made in the PR trail. An easy way of testing > would be to make sure that: > > #include "arm_sve.h" > > svint8_t > test_s8(int8_t *x) > { > try > { > return svld1rq_s8 (svptrue_b8 (), &x[0]); > } > catch (...) > { > return svdup_s8 (1); > } > } > > compiled with -fnon-call-exceptions still has a call to __cxa_begin_catch= . > > I don't think it's worth optimising this case. Let's just add > !flag_non_call_exceptions to the test. > > The patch is missing a changelog btw. Thanks for the suggestions. Is the attached patch OK to commit after bootstrap+test ? Thanks, Prathamesh > > Thanks, > Richard > > > Thanks, > > Prathamesh > > > > diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/conf= ig/aarch64/aarch64-sve-builtins-base.cc > > index 6347407555f..f5546a65d22 100644 > > --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc > > +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc > > @@ -45,6 +45,7 @@ > > #include "aarch64-sve-builtins-base.h" > > #include "aarch64-sve-builtins-functions.h" > > #include "ssa.h" > > +#include "gimple-fold.h" > > > > using namespace aarch64_sve; > > > > @@ -1232,7 +1233,9 @@ public: > > tree mem_ref_op =3D fold_build2 (MEM_REF, access_type, arg1, zero= ); > > gimple *mem_ref_stmt > > =3D gimple_build_assign (mem_ref_lhs, mem_ref_op); > > - gsi_insert_before (f.gsi, mem_ref_stmt, GSI_SAME_STMT); > > + > > + gimple_seq stmts =3D NULL; > > + gimple_seq_add_stmt_without_update (&stmts, mem_ref_stmt); > > > > int source_nelts =3D TYPE_VECTOR_SUBPARTS (access_type).to_consta= nt (); > > vec_perm_builder sel (lhs_len, source_nelts, 1); > > @@ -1245,8 +1248,11 @@ public: > > indices)); > > tree mask_type =3D build_vector_type (ssizetype, lhs_len); > > tree mask =3D vec_perm_indices_to_tree (mask_type, indices); > > - return gimple_build_assign (lhs, VEC_PERM_EXPR, > > - mem_ref_lhs, mem_ref_lhs, mask); > > + gimple *g2 =3D gimple_build_assign (lhs, VEC_PERM_EXPR, > > + mem_ref_lhs, mem_ref_lhs, mask)= ; > > + gimple_seq_add_stmt_without_update (&stmts, g2); > > + gsi_replace_with_seq_vops (f.gsi, stmts); > > + return g2; > > } > > > > return NULL; > > diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc > > index c2d9c806aee..03cdb2f9f49 100644 > > --- a/gcc/gimple-fold.cc > > +++ b/gcc/gimple-fold.cc > > @@ -591,7 +591,7 @@ fold_gimple_assign (gimple_stmt_iterator *si) > > If the statement has a lhs the last stmt in the sequence is expecte= d > > to assign to that lhs. */ > > > > -static void > > +void > > gsi_replace_with_seq_vops (gimple_stmt_iterator *si_p, gimple_seq stmt= s) > > { > > gimple *stmt =3D gsi_stmt (*si_p); > > diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h > > index 7d29ee9a9a4..87ed4e56d25 100644 > > --- a/gcc/gimple-fold.h > > +++ b/gcc/gimple-fold.h > > @@ -63,6 +63,7 @@ extern bool arith_code_with_undefined_signed_overflow= (tree_code); > > extern gimple_seq rewrite_to_defined_overflow (gimple *, bool =3D fals= e); > > extern void replace_call_with_value (gimple_stmt_iterator *, tree); > > extern tree tree_vec_extract (gimple_stmt_iterator *, tree, tree, tree= , tree); > > +extern void gsi_replace_with_seq_vops (gimple_stmt_iterator *, gimple_= seq); > > > > /* gimple_build, functionally matching fold_buildN, outputs stmts > > int the provided sequence, matching and simplifying them on-the-fly= . > > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr107920= .c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr107920.c > > new file mode 100644 > > index 00000000000..11448ed5e68 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr107920.c > > @@ -0,0 +1,10 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-O1 -fno-tree-ccp -fno-tree-forwprop" } */ > > + > > +#include "arm_sve.h" > > + > > +svint8_t > > +test_s8(int8_t *x) > > +{ > > + return svld1rq_s8 (svptrue_b8 (), &x[0]); > > +} --0000000000000d72ec05ef1f5db0 Content-Type: text/plain; charset="US-ASCII"; name="pr107920-5.txt" Content-Disposition: attachment; filename="pr107920-5.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbbl620a0 Z2NjL0NoYW5nZUxvZzoKCVBSIHRhcmdldC8xMDc5MjAKCSogY29uZmlnL2FhcmNoNjQvYWFyY2g2 NC1zdmUtYnVpbHRpbnMtYmFzZS5jYzogVXNlCglnc2lfcmVwbGFjZV93aXRoX3NlcV92b3BzIHRv IGhhbmRsZSB2aXJ0dWFsIG9wZXJhbmRzLCBhbmQgZ2F0ZQoJdGhlIHRyYW5zZm9ybSBvbiAhZmxh Z19ub25fY2FsbF9leGNlcHRpb25zLgoJKiBnaW1wbGUtZm9sZC5jYyAoZ3NpX3JlcGxhY2Vfd2l0 aF9zZXFfdm9wcyk6IE1ha2UgZnVuY3Rpb24gbm9uIHN0YXRpYy4KCSogZ2ltcGxlLWZvbGQuaCAo Z3NpX3JlcGxhY2Vfd2l0aF9zZXFfdm9wcyk6IERlY2xhcmUuCgpnY2MvdGVzdHN1aXRlL0NoYW5n ZUxvZzoKCVBSIHRhcmdldC8xMDc5MjAKCSogZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9hY2xlL2dl bmVyYWwvcHIxMDc5MjAuYzogTmV3IHRlc3QuCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJj aDY0L2FhcmNoNjQtc3ZlLWJ1aWx0aW5zLWJhc2UuY2MgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFy Y2g2NC1zdmUtYnVpbHRpbnMtYmFzZS5jYwppbmRleCA2MzQ3NDA3NTU1Zi4uZDUyZWMwODNlZDAg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXN2ZS1idWlsdGlucy1iYXNl LmNjCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXN2ZS1idWlsdGlucy1iYXNlLmNj CkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiYWFyY2g2NC1zdmUtYnVpbHRpbnMtYmFzZS5o IgogI2luY2x1ZGUgImFhcmNoNjQtc3ZlLWJ1aWx0aW5zLWZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg InNzYS5oIgorI2luY2x1ZGUgImdpbXBsZS1mb2xkLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBhYXJj aDY0X3N2ZTsKIApAQCAtMTIwOSw3ICsxMjEwLDggQEAgcHVibGljOgogICAgICAgIHZlY3R5cGUg aXMgdGhlIGNvcnJlc3BvbmRpbmcgQURWU0lNRCB0eXBlLiAgKi8KIAogICAgIGlmICghQllURVNf QklHX0VORElBTgotCSYmIGludGVnZXJfYWxsX29uZXNwIChhcmcwKSkKKwkmJiBpbnRlZ2VyX2Fs bF9vbmVzcCAoYXJnMCkKKwkmJiAhZmxhZ19ub25fY2FsbF9leGNlcHRpb25zKQogICAgICAgewog CXRyZWUgbGhzID0gZ2ltcGxlX2NhbGxfbGhzIChmLmNhbGwpOwogCXRyZWUgbGhzX3R5cGUgPSBU UkVFX1RZUEUgKGxocyk7CkBAIC0xMjMyLDcgKzEyMzQsOSBAQCBwdWJsaWM6CiAJdHJlZSBtZW1f cmVmX29wID0gZm9sZF9idWlsZDIgKE1FTV9SRUYsIGFjY2Vzc190eXBlLCBhcmcxLCB6ZXJvKTsK IAlnaW1wbGUgKm1lbV9yZWZfc3RtdAogCSAgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChtZW1fcmVm X2xocywgbWVtX3JlZl9vcCk7Ci0JZ3NpX2luc2VydF9iZWZvcmUgKGYuZ3NpLCBtZW1fcmVmX3N0 bXQsIEdTSV9TQU1FX1NUTVQpOworCisJZ2ltcGxlX3NlcSBzdG10cyA9IE5VTEw7CisJZ2ltcGxl X3NlcV9hZGRfc3RtdF93aXRob3V0X3VwZGF0ZSAoJnN0bXRzLCBtZW1fcmVmX3N0bXQpOwogCiAJ aW50IHNvdXJjZV9uZWx0cyA9IFRZUEVfVkVDVE9SX1NVQlBBUlRTIChhY2Nlc3NfdHlwZSkudG9f Y29uc3RhbnQgKCk7CiAJdmVjX3Blcm1fYnVpbGRlciBzZWwgKGxoc19sZW4sIHNvdXJjZV9uZWx0 cywgMSk7CkBAIC0xMjQ1LDggKzEyNDksMTEgQEAgcHVibGljOgogCQkJCQkJICAgaW5kaWNlcykp OwogCXRyZWUgbWFza190eXBlID0gYnVpbGRfdmVjdG9yX3R5cGUgKHNzaXpldHlwZSwgbGhzX2xl bik7CiAJdHJlZSBtYXNrID0gdmVjX3Blcm1faW5kaWNlc190b190cmVlIChtYXNrX3R5cGUsIGlu ZGljZXMpOwotCXJldHVybiBnaW1wbGVfYnVpbGRfYXNzaWduIChsaHMsIFZFQ19QRVJNX0VYUFIs Ci0JCQkJICAgIG1lbV9yZWZfbGhzLCBtZW1fcmVmX2xocywgbWFzayk7CisJZ2ltcGxlICpnMiA9 IGdpbXBsZV9idWlsZF9hc3NpZ24gKGxocywgVkVDX1BFUk1fRVhQUiwKKwkJCQkJICBtZW1fcmVm X2xocywgbWVtX3JlZl9saHMsIG1hc2spOworCWdpbXBsZV9zZXFfYWRkX3N0bXRfd2l0aG91dF91 cGRhdGUgKCZzdG10cywgZzIpOworCWdzaV9yZXBsYWNlX3dpdGhfc2VxX3ZvcHMgKGYuZ3NpLCBz dG10cyk7CisJcmV0dXJuIGcyOwogICAgICAgfQogCiAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1n aXQgYS9nY2MvZ2ltcGxlLWZvbGQuY2MgYi9nY2MvZ2ltcGxlLWZvbGQuY2MKaW5kZXggYzJkOWM4 MDZhZWUuLjAzY2RiMmY5ZjQ5IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLWZvbGQuY2MKKysrIGIv Z2NjL2dpbXBsZS1mb2xkLmNjCkBAIC01OTEsNyArNTkxLDcgQEAgZm9sZF9naW1wbGVfYXNzaWdu IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqc2kpCiAgICBJZiB0aGUgc3RhdGVtZW50IGhhcyBhIGxo cyB0aGUgbGFzdCBzdG10IGluIHRoZSBzZXF1ZW5jZSBpcyBleHBlY3RlZAogICAgdG8gYXNzaWdu IHRvIHRoYXQgbGhzLiAgKi8KIAotc3RhdGljIHZvaWQKK3ZvaWQKIGdzaV9yZXBsYWNlX3dpdGhf c2VxX3ZvcHMgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpzaV9wLCBnaW1wbGVfc2VxIHN0bXRzKQog ewogICBnaW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAoKnNpX3ApOwpkaWZmIC0tZ2l0IGEvZ2NjL2dp bXBsZS1mb2xkLmggYi9nY2MvZ2ltcGxlLWZvbGQuaAppbmRleCA3ZDI5ZWU5YTlhNC4uODdlZDRl NTZkMjUgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUtZm9sZC5oCisrKyBiL2djYy9naW1wbGUtZm9s ZC5oCkBAIC02Myw2ICs2Myw3IEBAIGV4dGVybiBib29sIGFyaXRoX2NvZGVfd2l0aF91bmRlZmlu ZWRfc2lnbmVkX292ZXJmbG93ICh0cmVlX2NvZGUpOwogZXh0ZXJuIGdpbXBsZV9zZXEgcmV3cml0 ZV90b19kZWZpbmVkX292ZXJmbG93IChnaW1wbGUgKiwgYm9vbCA9IGZhbHNlKTsKIGV4dGVybiB2 b2lkIHJlcGxhY2VfY2FsbF93aXRoX3ZhbHVlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB0cmVl KTsKIGV4dGVybiB0cmVlIHRyZWVfdmVjX2V4dHJhY3QgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICos IHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZ3NpX3JlcGxhY2Vfd2l0aF9z ZXFfdm9wcyAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlX3NlcSk7CiAKIC8qIGdpbXBs ZV9idWlsZCwgZnVuY3Rpb25hbGx5IG1hdGNoaW5nIGZvbGRfYnVpbGROLCBvdXRwdXRzIHN0bXRz CiAgICBpbnQgdGhlIHByb3ZpZGVkIHNlcXVlbmNlLCBtYXRjaGluZyBhbmQgc2ltcGxpZnlpbmcg dGhlbSBvbi10aGUtZmx5LgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fh cmNoNjQvc3ZlL2FjbGUvZ2VuZXJhbC9wcjEwNzkyMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2FhcmNoNjQvc3ZlL2FjbGUvZ2VuZXJhbC9wcjEwNzkyMC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMTQ0OGVkNWU2OAotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9hY2xlL2dlbmVyYWwvcHIxMDc5MjAu YwpAQCAtMCwwICsxLDEwIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTzEgLWZuby10cmVlLWNjcCAtZm5vLXRyZWUtZm9yd3Byb3AiIH0gKi8KKworI2luY2x1 ZGUgImFybV9zdmUuaCIKKworc3ZpbnQ4X3QKK3Rlc3RfczgoaW50OF90ICp4KQoreworICByZXR1 cm4gc3ZsZDFycV9zOCAoc3ZwdHJ1ZV9iOCAoKSwgJnhbMF0pOworfQo= --0000000000000d72ec05ef1f5db0--