From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id B814A385841D for ; Mon, 1 Aug 2022 13:27:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B814A385841D Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-451-wiDkNAgJM9mU842UK38Rxg-1; Mon, 01 Aug 2022 09:27:25 -0400 X-MC-Unique: wiDkNAgJM9mU842UK38Rxg-1 Received: by mail-pg1-f200.google.com with SMTP id s129-20020a632c87000000b00411564fe1feso4494127pgs.7 for ; Mon, 01 Aug 2022 06:27:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=8GRJxi4LoMtUKGtcm/ysl6tqqE3bTym94xYzeCZ8u68=; b=Ls//tmgIbjICGBZTMVOsztjefPoDfO90GmChKDk02HM4hoQdawp0aF3BO5uCjN2hNz T1cRBeadOpU4PxabIw+TxUVbACVmCCtmME/Q0w82i6vGq9/xnuSIIfiWhPSnVAmjlfqC XB2a9pQv4tElWcJGidtmce0zXURTiTRTQ3QN3ZUQOOmkX2rcH5om/eeAY5LpvQrnxN0g z3flUB+7KMfzqUX9J8lIOBkdIQbLXTqxmz1WaZG4eK7rPqpw6SsdjXaAl3HedIwrlH9o 9raI0AqCiluSmrt8J8uWltKxWA0nY6yUHmHe2xpCWwkIVWk5myoaVdAL7ZqLvI41Hlhm N4Qg== X-Gm-Message-State: AJIora+fAP+RDfypR1AjIOttthq9s2Az7E11EMB+54EpHxC4qgvTloK8 roS5Gzwae7Dmq4f4ZiJpNTY/7TKZVFQnCUePQl+VWybxvq1D2UriX498QzbZIIZasZaJqVxzzT3 9O8wDBWMo4KYtpVffwqNTgotDh3XmmtOmGw== X-Received: by 2002:a63:fc1b:0:b0:41b:93c4:136a with SMTP id j27-20020a63fc1b000000b0041b93c4136amr11837930pgi.163.1659360444691; Mon, 01 Aug 2022 06:27:24 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sKNytd5DhSVasb64/7F4fRUAkw1j0xoLWjXqKdcOeH9yYNETXtloCNxk6NPvKctp+DHkiRWnFWCwPI04F4AIs= X-Received: by 2002:a63:fc1b:0:b0:41b:93c4:136a with SMTP id j27-20020a63fc1b000000b0041b93c4136amr11837908pgi.163.1659360444391; Mon, 01 Aug 2022 06:27:24 -0700 (PDT) MIME-Version: 1.0 References: <20220725193425.511903-1-sfeifer@redhat.com> In-Reply-To: From: Sam Feifer Date: Mon, 1 Aug 2022 09:27:12 -0400 Message-ID: Subject: Re: [PATCH] match.pd: Add new division pattern [PR104992] To: Richard Biener Cc: Andrew Pinski , GCC Patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000d82c7605e52df540" X-Spam-Status: No, score=-13.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Aug 2022 13:27:31 -0000 --000000000000d82c7605e52df540 Content-Type: text/plain; charset="UTF-8" Here is the patch that I pushed. Thanks for the feedback. Thanks -Sam On Thu, Jul 28, 2022 at 3:03 AM Richard Biener wrote: > On Wed, Jul 27, 2022 at 9:57 PM Sam Feifer wrote: > > > > > >> _Complex int are strange beasts, I'd simply avoid the transform for > them. > >> > > > > I added to the match.pd rule to not simplify if the operands are > complex. There is now a test case for complex types to make sure they do > not simplify. I had to move the "dg-do run" test to g++.dg to accommodate > the complex type function that is included (even though there isn't a > runtime test for complex types). > > > >> Can you please move the pattern next to the existing div/mod patterns, > >> like after the related > >> > > > > done :) > > > >> /* Simplify (A / B) * B + (A % B) -> A. */ > >> (for div (trunc_div ceil_div floor_div round_div) > >> mod (trunc_mod ceil_mod floor_mod round_mod) > >> (simplify > >> (plus:c (mult:c (div @0 @1) @1) (mod @0 @1)) > >> @0)) > >> > >> pattern? > >> > >> +/* x / y * y == x -> x % y == 0. */ > >> +(simplify > >> + (eq (mult (trunc_div @0 @1) @1) @0) > >> + (eq (trunc_mod @0 @1) { build_zero_cst TREE_TYPE(@0); })) > >> > >> there are parens missing around the TREE_TYPE (@0), how did you test > >> the patch? You probably want :s on the trunc_div and as Andrew said > >> :c on the eq and the mult. > > > > > > I made those changes to the rule. The rule worked without the > parentheses, which is probably why I didn't notice they were missing. > Attached is an updated patch file. > > +/* x / y * y == x -> x % y == 0. */ > +(simplify > + (eq:c (mult:c (trunc_div:s @0 @1) @1) @0) > + (if (TREE_CODE (TREE_TYPE (@0)) != COMPLEX_TYPE > + && TREE_CODE (TREE_TYPE (@1)) != COMPLEX_TYPE) > > Testing this only for @0 is enough, we don't allow mixed types for > trunc_div or mult. > > + (eq (trunc_mod @0 @1) { build_zero_cst (TREE_TYPE(@0)); }))) > > space before (@0) in 'TREE_TYPE(@0)' > > OK with those changes. > > Thanks, > Richard. > > > > > Thanks > > -Sam > > > >> > >> Richard. > >> > >> > Thanks > >> > -Sam > >> > > >> > > >> > > For vector try (which works for both the C and C++ front-end): > >> > > #define vector __attribute__((vector_size(4*sizeof(int)) )) > >> > > vector int f(vector int x, vector int y) > >> > > { > >> > > return x == x / y * y; > >> > > } > >> > > > >> > > That is for the vector case, == still returns a vector type. > >> > > > >> > > Thanks, > >> > > Andrew Pinski > >> > > > >> > > > > >> > > > Thanks > >> > > > -Sam > >> > > > > >> > > >> Thanks, > >> > > >> Andrew Pinski > >> > > >> > >> > > >> > diff --git a/gcc/testsuite/gcc.dg/pr104992-1.c > >> > > b/gcc/testsuite/gcc.dg/pr104992-1.c > >> > > >> > new file mode 100644 > >> > > >> > index 00000000000..a80e5e180ce > >> > > >> > --- /dev/null > >> > > >> > +++ b/gcc/testsuite/gcc.dg/pr104992-1.c > >> > > >> > @@ -0,0 +1,30 @@ > >> > > >> > +/* PR tree-optimization/104992 */ > >> > > >> > +/* { dg-do run } */ > >> > > >> > +/* { dg-options "-O2"} */ > >> > > >> > + > >> > > >> > +#include "pr104992.c" > >> > > >> > + > >> > > >> > +int main () { > >> > > >> > + > >> > > >> > + /* Should be true. */ > >> > > >> > + if (!foo(6, 3) > >> > > >> > + || !bar(12, 2) > >> > > >> > + || !baz(34, 17) > >> > > >> > + || !qux(50, 10) > >> > > >> > + || !fred(16, 8) > >> > > >> > + || !baz(-9, 3) > >> > > >> > + || !baz(9, -3) > >> > > >> > + || !baz(-9, -3) > >> > > >> > + ) { > >> > > >> > + __builtin_abort(); > >> > > >> > + } > >> > > >> > + > >> > > >> > + /* Should be false. */ > >> > > >> > + if (foo(5, 30) > >> > > >> > + || bar(72, 27) > >> > > >> > + || baz(42, 15)) { > >> > > >> > + __builtin_abort(); > >> > > >> > + } > >> > > >> > + > >> > > >> > + return 0; > >> > > >> > +} > >> > > >> > diff --git a/gcc/testsuite/gcc.dg/pr104992.c > >> > > b/gcc/testsuite/gcc.dg/pr104992.c > >> > > >> > new file mode 100644 > >> > > >> > index 00000000000..b4b0ca53118 > >> > > >> > --- /dev/null > >> > > >> > +++ b/gcc/testsuite/gcc.dg/pr104992.c > >> > > >> > @@ -0,0 +1,35 @@ > >> > > >> > +/* PR tree-optimization/104992 */ > >> > > >> > +/* { dg-do compile } */ > >> > > >> > +/* { dg-options "-O2 -fdump-tree-optimized" } */ > >> > > >> > + > >> > > >> > +/* Form from PR. */ > >> > > >> > +__attribute__((noipa)) unsigned foo(unsigned x, unsigned y) > >> > > >> > +{ > >> > > >> > + return x / y * y == x; > >> > > >> > +} > >> > > >> > + > >> > > >> > +__attribute__((noipa)) unsigned bar(unsigned x, unsigned y) { > >> > > >> > + return x == x / y * y; > >> > > >> > +} > >> > > >> > + > >> > > >> > +/* Signed test case. */ > >> > > >> > +__attribute__((noipa)) unsigned baz (int x, int y) { > >> > > >> > + return x / y * y == x; > >> > > >> > +} > >> > > >> > + > >> > > >> > +/* Changed order. */ > >> > > >> > +__attribute__((noipa)) unsigned qux (unsigned x, unsigned y) { > >> > > >> > + return y * (x / y) == x; > >> > > >> > +} > >> > > >> > + > >> > > >> > +/* Wrong order. */ > >> > > >> > +__attribute__((noipa)) unsigned fred (unsigned x, unsigned y) > { > >> > > >> > + return y * x / y == x; > >> > > >> > +} > >> > > >> > + > >> > > >> > +/* Wrong pattern. */ > >> > > >> > +__attribute__((noipa)) unsigned waldo (unsigned x, unsigned y, > >> > > unsigned z) { > >> > > >> > + return x / y * z == x; > >> > > >> > +} > >> > > >> > + > >> > > >> > +/* { dg-final {scan-tree-dump-times " % " 4 "optimized" } } */ > >> > > >> > > >> > > >> > base-commit: 633e9920589ddfaf2d6da1c24ce99b18a2638db4 > >> > > >> > -- > >> > > >> > 2.31.1 > >> > > >> > > >> > > >> > >> > > > >> > > > >> > > --000000000000d82c7605e52df540 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-match.pd-Add-new-division-pattern-PR104992.patch" Content-Disposition: attachment; filename="0001-match.pd-Add-new-division-pattern-PR104992.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6asadlp0 RnJvbSBmZGFiZWQ3YjBiMzdjMDJjOGZiNzExZTBkMzA5MzhmYWUyYTFjY2Q4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW0gRmVpZmVyIDxzZmVpZmVyQHJlZGhhdC5jb20+CkRhdGU6 IEZyaSwgMjkgSnVsIDIwMjIgMDk6NDQ6NDggLTA0MDAKU3ViamVjdDogW1BBVENIXSBtYXRjaC5w ZDogQWRkIG5ldyBkaXZpc2lvbiBwYXR0ZXJuIFtQUjEwNDk5Ml0KClRoaXMgcGF0Y2ggZml4ZXMg YSBtaXNzZWQgb3B0aW1pemF0aW9uIGluIG1hdGNoLnBkLiBJdCB0YWtlcyB0aGUgcGF0dGVybiwK eCAvIHkgKiB5ID09IHgsIGFuZCBvcHRpbWl6ZXMgaXQgdG8geCAlIHkgPT0gMC4gVGhpcyBwcm9k dWNlcyBmZXdlcgppbnN0cnVjdGlvbnMuIFRoaXMgc2ltcGxpZmljYXRpb24gZG9lcyBub3QgaGFw cGVuIGZvciBjb21wbGV4IHR5cGVzLgoKVGhpcyBwYXRjaCBhbHNvIGFkZHMgdGVzdHMgZm9yIHRo ZSBvcHRpbWl6YXRpb24gcnVsZS4KCkJvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgb24geDg2XzY0LXBj LWxpbnV4LWdudS4KCglQUiB0cmVlLW9wdGltaXphdGlvbi8xMDQ5OTIKCmdjYy9DaGFuZ2VMb2c6 CgoJKiBtYXRjaC5wZCAoeCAvIHkgKiB5ID09IHgpOiBOZXcgc2ltcGxpZmljYXRpb24uCgpnY2Mv dGVzdHN1aXRlL0NoYW5nZUxvZzoKCgkqIGcrKy5kZy9wcjEwNDk5Mi0xLkM6IE5ldyB0ZXN0LgoJ KiBnY2MuZGcvcHIxMDQ5OTIuYzogTmV3IHRlc3QuCi0tLQogZ2NjL21hdGNoLnBkICAgICAgICAg ICAgICAgICAgICAgIHwgIDYgKysrKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMDQ5OTItMS5D IHwgMzAgKysrKysrKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDQ5OTIuYyAg IHwgNTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA5 MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv cHIxMDQ5OTItMS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIx MDQ5OTIuYwoKZGlmZiAtLWdpdCBhL2djYy9tYXRjaC5wZCBiL2djYy9tYXRjaC5wZAppbmRleCAz MzBjMWRiMGM4ZS4uNTYyMTM4YTgwMzQgMTAwNjQ0Ci0tLSBhL2djYy9tYXRjaC5wZAorKysgYi9n Y2MvbWF0Y2gucGQKQEAgLTM5ODIsNiArMzk4MiwxMiBAQCBERUZJTkVfSU5UX0FORF9GTE9BVF9S T1VORF9GTiAoUklOVCkKICAgIChwbHVzOmMgKG11bHQ6YyAoZGl2IEAwIEAxKSBAMSkgKG1vZCBA MCBAMSkpCiAgICBAMCkpCiAKKy8qIHggLyB5ICogeSA9PSB4IC0+IHggJSB5ID09IDAuICAqLwor KHNpbXBsaWZ5CisgIChlcTpjIChtdWx0OmMgKHRydW5jX2RpdjpzIEAwIEAxKSBAMSkgQDApCisg IChpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKEAwKSkgIT0gQ09NUExFWF9UWVBFKQorICAgIChl cSAodHJ1bmNfbW9kIEAwIEAxKSB7IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKEAwKSk7IH0p KSkKKwogLyogKChYIC9bZXhdIEEpICstIEIpICogQSAgLS0+ICBYICstIEEgKiBCLiAgKi8KIChm b3Igb3AgKHBsdXMgbWludXMpCiAgKHNpbXBsaWZ5CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2crKy5kZy9wcjEwNDk5Mi0xLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9wcjEwNDk5Mi0xLkMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY1Njk2YjI0NWFjCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMDQ5OTItMS5DCkBAIC0wLDAg KzEsMzAgQEAKKy8qIFBSIHRyZWUtb3B0aW1pemF0aW9uLzEwNDk5MiAqLworLyogeyBkZy1kbyBy dW4gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIifSAqLworCisjaW5jbHVkZSAiLi4vZ2NjLmRn L3ByMTA0OTkyLmMiCisKK2ludCBtYWluICgpIHsKKworICAgIC8qIFNob3VsZCBiZSB0cnVlLiAg Ki8KKyAgICBpZiAoIWZvbyg2LCAzKQorICAgICAgICB8fCAhYmFyKDEyLCAyKQorICAgICAgICB8 fCAhYmF6KDM0LCAxNykKKyAgICAgICAgfHwgIXF1eCg1MCwgMTApCisgICAgICAgIHx8ICFmcmVk KDE2LCA4KQorICAgICAgICB8fCAhYmF6KC05LCAzKQorICAgICAgICB8fCAhYmF6KDksIC0zKQor ICAgICAgICB8fCAhYmF6KC05LCAtMykKKyAgICAgICAgKSB7CisgICAgICAgICAgICBfX2J1aWx0 aW5fYWJvcnQoKTsKKyAgICAgICAgIH0KKyAgICAKKyAgICAvKiBTaG91bGQgYmUgZmFsc2UuICAq LworICAgIGlmIChmb28oNSwgMzApCisgICAgICAgIHx8IGJhcig3MiwgMjcpCisgICAgICAgIHx8 IGJheig0MiwgMTUpKSB7CisgICAgICAgICAgICBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgICAgICAg fQorICAgIAorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvcHIxMDQ5OTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTA0OTkyLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI5ZDkxYTEzYWQ4Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDQ5OTIuYwpAQCAtMCwwICsxLDU3IEBACisv KiBQUiB0cmVlLW9wdGltaXphdGlvbi8xMDQ5OTIgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKworI2Rl ZmluZSB2ZWN0b3IgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoNCpzaXplb2YoaW50KSkpKQor CisvKiBGb3JtIGZyb20gUFIuICAqLworX19hdHRyaWJ1dGVfXygobm9pcGEpKSB1bnNpZ25lZCBm b28odW5zaWduZWQgeCwgdW5zaWduZWQgeSkKK3sKKyAgICByZXR1cm4geCAvIHkgKiB5ID09IHg7 Cit9CisKK19fYXR0cmlidXRlX18oKG5vaXBhKSkgdW5zaWduZWQgYmFyKHVuc2lnbmVkIHgsIHVu c2lnbmVkIHkpIHsKKyAgICByZXR1cm4geCA9PSB4IC8geSAqIHk7Cit9CisKKy8qIFNpZ25lZCB0 ZXN0IGNhc2UuICAqLworX19hdHRyaWJ1dGVfXygobm9pcGEpKSB1bnNpZ25lZCBiYXogKGludCB4 LCBpbnQgeSkgeworICAgIHJldHVybiB4IC8geSAqIHkgPT0geDsKK30KKworLyogQ2hhbmdlZCBv cmRlci4gICovCitfX2F0dHJpYnV0ZV9fKChub2lwYSkpIHVuc2lnbmVkIHF1eCAodW5zaWduZWQg eCwgdW5zaWduZWQgeSkgeworICAgIHJldHVybiB5ICogKHggLyB5KSA9PSB4OworfQorCisvKiBU ZXN0IGZvciBmb3J3YXJkIHByb3BvZ2F0aW9uLiAgKi8KK19fYXR0cmlidXRlX18oKG5vaXBhKSkg dW5zaWduZWQgY29yZ2UodW5zaWduZWQgeCwgdW5zaWduZWQgeSkgeworICAgIGludCB6ID0geCAv IHk7CisgICAgaW50IHEgPSB6ICogeTsKKyAgICByZXR1cm4gcSA9PSB4OyAKK30KKworLyogVGVz dCB2ZWN0b3IgY2FzZS4gICovCitfX2F0dHJpYnV0ZV9fKChub2lwYSkpIHZlY3RvciBpbnQgdGh1 ZCh2ZWN0b3IgaW50IHgsIHZlY3RvciBpbnQgeSkgeworICAgIHJldHVybiB4IC8geSAqIHkgPT0g eDsKK30KKworLyogQ29tcGxleCB0eXBlIHNob3VsZCBub3Qgc2ltcGxpZnkgYmVjYXVzZSBtb2Qg aXMgZGlmZmVyZW50LiAgKi8KK19fYXR0cmlidXRlX18oKG5vaXBhKSkgaW50IGdvbyhfQ29tcGxl eCBpbnQgeCwgX0NvbXBsZXggaW50IHkpCit7CisgICAgX0NvbXBsZXggaW50IHogPSB4IC8geTsK KyAgICBfQ29tcGxleCBpbnQgcSA9IHogKiB5OworICAgIHJldHVybiBxID09IHg7IAorfQorCisv KiBXcm9uZyBvcmRlci4gICovCitfX2F0dHJpYnV0ZV9fKChub2lwYSkpIHVuc2lnbmVkIGZyZWQg KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpIHsKKyAgICByZXR1cm4geSAqIHggLyB5ID09IHg7Cit9 CisKKy8qIFdyb25nIHBhdHRlcm4uICAqLworX19hdHRyaWJ1dGVfXygobm9pcGEpKSB1bnNpZ25l ZCB3YWxkbyAodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgeikgeworICAgIHJldHVy biB4IC8geSAqIHogPT0geDsKK30KKworLyogeyBkZy1maW5hbCB7c2Nhbi10cmVlLWR1bXAtdGlt ZXMgIiAlICIgOSAib3B0aW1pemVkIiB9IH0gKi8KCmJhc2UtY29tbWl0OiA2ZTBjYTNmZTg4ZDhm OThiYTZiNDAwOWM5NDgzZTg3YWZiY2Y0ZWU4Ci0tIAoyLjMxLjEKCg== --000000000000d82c7605e52df540--