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.133.124]) by sourceware.org (Postfix) with ESMTPS id 292E13858D37 for ; Thu, 3 Feb 2022 03:50:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 292E13858D37 Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-444-50YCoOQfMm6PJNl04732vg-1; Wed, 02 Feb 2022 22:50:17 -0500 X-MC-Unique: 50YCoOQfMm6PJNl04732vg-1 Received: by mail-ed1-f72.google.com with SMTP id o25-20020a056402039900b0040631c2a67dso743209edv.19 for ; Wed, 02 Feb 2022 19:50:17 -0800 (PST) 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=aNglTpdj9Txl1/8MM0Yvj1HnNkP6yCnkNdeMoK9nPK0=; b=2aWhO21cKbgjHjXjLNOlLsXxhf20YU9V1SUMk6xc8d8/ZxRbg5Mff07njbPVjgpX+1 WeMIRbsIDDjJ/Pe8E7MjHKGvq3QT35D3yydd+d+BRxGmF5z6gWQp0sRlMQOyEhEsPGoQ IVGh7OjhqaTIZMZw0nS/eN49+B3W/cne4E1spGZItb2Mq2HTOdGlC3u4EvRSgs3Wd4VV 7oOZ4lKCwpBWQ4f6abGM18bnUqeU3sqzGfFlxfcsWb66sYZGerT8LuyVcfi21nQ0G9kV Voi6mi5eu8ssgEwO/VufoSBhONDrEYCw5muMJO3+RovRzbqFav+aTKkbaepZXevpAoPW g3oQ== X-Gm-Message-State: AOAM530oUeV7pHWx0p1hhDBx+1QNUaqJieg4yAH/hfgVIt2sUxaB4Vaf xwo6Kj+7Z6NZlJoE1tzD9t4KnBbon+9YnWoD3hqSFgnX+DDIg0Ww8RzV3Dd0w2SJkAC3O8XCAxn o4HNNmSVhOa9qSkhlOMs//5WKL0Yw+/eAWQ== X-Received: by 2002:a17:907:6e16:: with SMTP id sd22mr24293839ejc.172.1643860216497; Wed, 02 Feb 2022 19:50:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJxYi6uLxqOPpDlW+bb/ZrGKkXd6kg8lIdWAYcSWNalvtAXPj1T10G5rErO5sN+hjNpMnu8jz49P6IwpCY4vX4k= X-Received: by 2002:a17:907:6e16:: with SMTP id sd22mr24293829ejc.172.1643860216247; Wed, 02 Feb 2022 19:50:16 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Arjun Shankar Date: Thu, 3 Feb 2022 04:50:05 +0100 Message-ID: Subject: [PATCH v2] tree-optimization/94899: Remove "+ 0x80000000" in int comparisons To: GCC Patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000402a2b05d71508ea" X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org 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: Thu, 03 Feb 2022 03:50:23 -0000 --000000000000402a2b05d71508ea Content-Type: text/plain; charset="UTF-8" Expressions of the form "X + CST < Y + CST" where: * CST is an unsigned integer constant with only the MSB set, and * X and Y's types have integer conversion ranks <= CST's can be simplified to "(signed) X < (signed) Y". This is because, assuming a 32-bit signed numbers, (unsigned) INT_MIN + 0x80000000 is 0, and (unsigned) INT_MAX + 0x80000000 is UINT_MAX. i.e. the result increases monotonically with signed input. This means: ((signed) X < (signed) Y) iff (X + 0x80000000 < Y + 0x80000000) gcc/ * match.pd (X + C < Y + C -> (signed) X < (signed) Y, if C is 0x80000000): New simplification. gcc/testsuite/ * gcc.dg/pr94899.c: New test. --- gcc/match.pd | 13 +++++++++ gcc/testsuite/gcc.dg/pr94899.c | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr94899.c --- v1: https://gcc.gnu.org/pipermail/gcc-patches/2022-February/589557.html Notes on v2, based on Richard's review comments: 1. I removed matching on "convert", and therefore also replaced the removal of convert upon simplification with an explicit cast to signed. I originally thought this simplification only applies to signed operands that have been cast to unsigned, but thinking about it, it became clear that they do not necessarily have to be signed originally. The simplification is now a bit more general. 2. Removed checks for operands' types as it seems to be unnecessary. I hope this is correct. 3. Added unsigned types and mismatched sizes of operands to the test. These are now simplified. --000000000000402a2b05d71508ea Content-Type: text/x-patch; charset="US-ASCII"; name="pr94899-v2.patch" Content-Disposition: attachment; filename="pr94899-v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz6fpf9g0 ZGlmZiAtLWdpdCBhL2djYy9tYXRjaC5wZCBiL2djYy9tYXRjaC5wZAppbmRleCBiOTQyY2IyOTMw YS4uZmFiYjA2YzY4MDggMTAwNjQ0Ci0tLSBhL2djYy9tYXRjaC5wZAorKysgYi9nY2MvbWF0Y2gu cGQKQEAgLTE5NzUsNiArMTk3NSwxOSBAQCBERUZJTkVfSU5UX0FORF9GTE9BVF9ST1VORF9GTiAo UklOVCkKICAgKGlmIChBTllfSU5URUdSQUxfVFlQRV9QIChUUkVFX1RZUEUgKEAwKSkKICAgICAg ICAmJiBUWVBFX09WRVJGTE9XX1VOREVGSU5FRCAoVFJFRV9UWVBFIChAMCkpKQogICAgKG9wIEAw IEAxKSkpKQorCisvKiBBcyBhIHNwZWNpYWwgY2FzZSwgWCArIEMgPCBZICsgQyBpcyB0aGUgc2Ft ZSBhcyAoc2lnbmVkKSBYIDwgKHNpZ25lZCkgWQorICAgd2hlbiBDIGlzIGFuIHVuc2lnbmVkIGlu dGVnZXIgY29uc3RhbnQgd2l0aCBvbmx5IHRoZSBNU0Igc2V0LCBhbmQgWCBhbmQKKyAgIFkgaGF2 ZSB0eXBlcyBvZiBlcXVhbCBvciBsb3dlciBpbnRlZ2VyIGNvbnZlcnNpb24gcmFuayB0aGFuIEMn cy4gICovCisoZm9yIG9wIChsdCBsZSBnZSBndCkKKyAoc2ltcGxpZnkKKyAgKG9wIChwbHVzOmMg SU5URUdFUl9DU1RAMCBAMSkgKHBsdXM6YyBJTlRFR0VSX0NTVEAwIEAyKSkKKyAgKGlmIChJTlRF R1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAoQDApKQorICAgICAgICYmIFRZUEVfVU5TSUdORUQgKFRS RUVfVFlQRSAoQDApKQorICAgICAgICYmIHdpOjpvbmx5X3NpZ25fYml0X3AgKHdpOjp0b193aWRl IChAMCkpKQorICAgKHdpdGggeyB0cmVlIHN0eXBlID0gc2lnbmVkX3R5cGVfZm9yIChUUkVFX1RZ UEUgKEAwKSk7IH0KKyAgICAob3AgKGNvbnZlcnQ6c3R5cGUgQDEpIChjb252ZXJ0OnN0eXBlIEAy KSkpKSkpCisKIC8qIEZvciBlcXVhbGl0eSBhbmQgc3VidHJhY3Rpb24sIHRoaXMgaXMgYWxzbyB0 cnVlIHdpdGggd3JhcHBpbmcgb3ZlcmZsb3cuICAqLwogKGZvciBvcCAoZXEgbmUgbWludXMpCiAg KHNpbXBsaWZ5CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjk0ODk5LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjk0ODk5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmY0NzEyMDk4OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvcHI5NDg5OS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKwor dHlwZWRlZiBfX0lOVDE2X1RZUEVfXyBpbnQxNl90OwordHlwZWRlZiBfX0lOVDMyX1RZUEVfXyBp bnQzMl90OwordHlwZWRlZiBfX1VJTlQxNl9UWVBFX18gdWludDE2X3Q7Cit0eXBlZGVmIF9fVUlO VDMyX1RZUEVfXyB1aW50MzJfdDsKKworI2RlZmluZSBNQUdJQyAweDgwMDAwMDAwCisKK2ludAor Zl9pMTZfaTE2IChpbnQxNl90IHgsIGludDE2X3QgeSkKK3sKKyAgcmV0dXJuIHggKyBNQUdJQyA8 IHkgKyBNQUdJQzsKK30KKworaW50CitmX2kxNl9pMzIgKGludDE2X3QgeCwgaW50MzJfdCB5KQor eworICByZXR1cm4geCArIE1BR0lDIDwgeSArIE1BR0lDOworfQorCitpbnQKK2ZfaTMyX2kzMiAo aW50MzJfdCB4LCBpbnQzMl90IHkpCit7CisgIHJldHVybiB4ICsgTUFHSUMgPCB5ICsgTUFHSUM7 Cit9CisKK2ludAorZl91MzJfaTMyICh1aW50MzJfdCB4LCBpbnQzMl90IHkpCit7CisgIHJldHVy biB4ICsgTUFHSUMgPCB5ICsgTUFHSUM7Cit9CisKK2ludAorZl91MzJfdTMyICh1aW50MzJfdCB4 LCB1aW50MzJfdCB5KQoreworICByZXR1cm4geCArIE1BR0lDIDwgeSArIE1BR0lDOworfQorCitp bnQKK2ZfaTMyX2kzMl9zdWIgKGludDMyX3QgeCwgaW50MzJfdCB5KQoreworICByZXR1cm4geCAt IE1BR0lDIDwgeSAtIE1BR0lDOworfQorCisvKiBUaGUgY29uc3RhbnRzIGFib3ZlIHNob3VsZCBo YXZlIGJlZW4gb3B0aW1pemVkIGF3YXkuICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICIyMTQ3NDgzNjQ4IiAwICJvcHRpbWl6ZWQifSB9ICovCi0tIAoyLjM0LjEKCg== --000000000000402a2b05d71508ea--