From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91647 invoked by alias); 26 Jan 2017 00:06:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 91543 invoked by uid 89); 26 Jan 2017 00:06:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-5.1 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=is_gimple_call, RINT, sk:DEFINE_, 95509 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 26 Jan 2017 00:06:08 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F3FE17FB67 for ; Thu, 26 Jan 2017 00:06:07 +0000 (UTC) Received: from localhost.localdomain (ovpn-119-37.rdu2.redhat.com [10.10.119.37]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v0Q067QF032639 for ; Wed, 25 Jan 2017 19:06:07 -0500 To: gcc-patches From: Jeff Law Subject: [PATCH][RFA][PR tree-optimization/79095] Improve overflow test optimization and avoid invalid warnings Message-ID: Date: Thu, 26 Jan 2017 01:03:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1EC698ED1291CE5031BD3F90" X-IsSubscribed: yes X-SW-Source: 2017-01/txt/msg02007.txt.bz2 This is a multi-part message in MIME format. --------------1EC698ED1291CE5031BD3F90 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1255 As has been discussed extensively, we're not doing a good job at simplifying overflow tests, particularly those which collapse down to an EQ/NE test. x + -1 > x -> x == 0 x + -1 < x -> x != 0 x + 1 < x -> x == -1U x + 1 > x -> x != -1U The simplifications allow us to propagate a constant for X into one ARM of the associated IF/ELSE construct. For C++ std::vector operations those propagations can eliminate lots of unnecessary code. Those propagations also eliminate (by way of removing unnecessary code) false positive warnings for memset calls that come from std::vector operations. This patch does two things. 1. It adds special case patterns to the A+CST CMP A pattern for cases where CST is 1 or -1 where the result turns into A EQ/NE 0 or A EQ/NE -1U. These special patterns are applied regardless of the single_use status of the expression. 2. It adds a call to fold_stmt in simplify_cond_using_ranges. This allows VRP to transform the code early and the first DOM pass to often see the simpified conditional and thus optimize better, rather than waiting for forwprop3 to simplify the conditional and the last DOM pass to optimize the code. Bootstrapped and regression tested on x86_64-linux-gnu. OK for the trunk? --------------1EC698ED1291CE5031BD3F90 Content-Type: text/plain; charset=UTF-8; name="P" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="P" Content-length: 6438 CVBSIHRyZWUtb3B0aW1pemF0aW9uLzc5MDk1CgkqIG1hdGNoLnBkIChBICsg Q1NUIENNUCBBKTogQWRkIHNwZWNpYWwgY2FzZXMgZm9yIENTVCBvZiAxIG9y IC0xLgoJKiB0cmVlLXZycC5jIChzaW1wbGlmeV9jb25kX3VzaW5nX3Jhbmdl cyk6IEFjY2VwdCBHU0kgcmF0aGVyIHRoYW4gc3RhdGVtZW50LgoJQ2FsbGVy cyBjaGFuZ2VkLiAgSnVzdCBmb2xkIHRoZSBjb25kaXRpb25hbCBpZiBubyBv dGhlciBzaW1wbGlmaWNhdGlvbnMKCXdlcmUgcG9zc2libGUuCgoJUFIgdHJl ZS1vcHRpbWl6YXRpb24vNzkwOTUKCSogZysrLmRnL3ByNzkwOTU6IE5ldyB0 ZXN0LgoJKiBnY2MuYy10b3J0dXJlL2V4ZWN1dGUvYXJpdGgtMS5jOiBUZXN0 IGFkZGl0aW9uYWwgY2FzZXMuCgpkaWZmIC0tZ2l0IGEvZ2NjL21hdGNoLnBk IGIvZ2NjL21hdGNoLnBkCmluZGV4IDdiOTY4MDAuLjgxNzhlOWMgMTAwNjQ0 Ci0tLSBhL2djYy9tYXRjaC5wZAorKysgYi9nY2MvbWF0Y2gucGQKQEAgLTMw MTksMTUgKzMwMTksMjYgQEAgREVGSU5FX0lOVF9BTkRfRkxPQVRfUk9VTkRf Rk4gKFJJTlQpCiAgICBBRERfT1ZFUkZMT1cgZGV0ZWN0aW9uIGluIHRyZWUt c3NhLW1hdGgtb3B0cy5jLgogICAgQSArIENTVCBDTVAgQSAgLT4gIEEgQ01Q JyBDU1QnICovCiAoZm9yIGNtcCAobHQgbGUgZ2UgZ3QpCisgICAgIG91dF9l cW5lcV96ZXJvIChuZSBuZSBlcSBlcSkKKyAgICAgb3V0X2VxbmVxX20xIChl cSBlcSBuZSBuZSkKICAgICAgb3V0IChndCBndCBsZSBsZSkKICAoc2ltcGxp ZnkKICAgKGNtcDpjIChwbHVzQDIgQDAgSU5URUdFUl9DU1RAMSkgQDApCiAg IChpZiAoVFlQRV9VTlNJR05FRCAoVFJFRV9UWVBFIChAMCkpCiAgICAgICAg JiYgVFlQRV9PVkVSRkxPV19XUkFQUyAoVFJFRV9UWVBFIChAMCkpCisgICAg ICAgJiYgd2k6OmVxX3AgKEAxLCAxKSkKKyAgIChvdXRfZXFuZXFfbTEgQDAg eyB3aWRlX2ludF90b190cmVlIChUUkVFX1RZUEUgKEAwKSwgd2k6Om1heF92 YWx1ZQorCSAgICAgICAoVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAoQDAp KSwgVU5TSUdORUQpKTsgfSkKKyAgKGlmIChUWVBFX1VOU0lHTkVEIChUUkVF X1RZUEUgKEAwKSkKKyAgICAgICAmJiBUWVBFX09WRVJGTE9XX1dSQVBTIChU UkVFX1RZUEUgKEAwKSkKKyAgICAgICAmJiB3aTo6ZXFfcCAoQDEsIC0xKSkK KyAgIChvdXRfZXFuZXFfemVybyBAMCB7IGZvbGRfY29udmVydCAoVFJFRV9U WVBFIChAMCksIGludGVnZXJfemVyb19ub2RlKSA7IH0pCisgIChpZiAoVFlQ RV9VTlNJR05FRCAoVFJFRV9UWVBFIChAMCkpCisgICAgICAgJiYgVFlQRV9P VkVSRkxPV19XUkFQUyAoVFJFRV9UWVBFIChAMCkpCiAgICAgICAgJiYgd2k6 Om5lX3AgKEAxLCAwKQogICAgICAgICYmIHNpbmdsZV91c2UgKEAyKSkKICAg IChvdXQgQDAgeyB3aWRlX2ludF90b190cmVlIChUUkVFX1RZUEUgKEAwKSwg d2k6Om1heF92YWx1ZQotCSAgICAgICAoVFlQRV9QUkVDSVNJT04gKFRSRUVf VFlQRSAoQDApKSwgVU5TSUdORUQpIC0gQDEpOyB9KSkpKQorCSAgICAgICAo VFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAoQDApKSwgVU5TSUdORUQpIC0g QDEpOyB9KSkpKSkpCiAKIC8qIFRvIGRldGVjdCBvdmVyZmxvdyBpbiB1bnNp Z25lZCBBIC0gQiwgQSA8IEIgaXMgc2ltcGxlciB0aGFuIEEgLSBCID4gQS4K ICAgIEhvd2V2ZXIsIHRoZSBkZXRlY3Rpb24gbG9naWMgZm9yIFNVQl9PVkVS RkxPVyBpbiB0cmVlLXNzYS1tYXRoLW9wdHMuYwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvcHI3OTA5NS5DIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvcHI3OTA5NS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmVkZjM3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9wcjc5MDk1LkMKQEAgLTAsMCArMSwzNSBAQAorLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVd1bmluaXRp YWxpemVkIC1PMiIgfSAqLworCit0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6 ZV90OworCitzdHJ1Y3QgUyB7CisgIGludCAqcDAsICpwMSwgKnAyOworCisg IHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIHAxIC0gcDA7IH0KKwor ICB2b2lkIGYgKHNpemVfdCBuKSB7CisgICAgaWYgKG4gPiBzaXplICgpKSAg ICAgICAvLyBjYW4ndCBoYXBwZW4gYmVjYXVzZQorICAgICAgZm9vIChuIC0g c2l6ZSAoKSk7ICAgLy8gICBuIGlzIGluIFsxLCBNSU4oc2l6ZSgpIC0gMSwg MyldCisgICAgZWxzZSBpZiAobiA8IHNpemUgKCkpCisgICAgICBiYXIgKHAw ICsgbik7CisgIH0KKworICB2b2lkIGZvbyAoc2l6ZV90IG4pCisgIHsKKyAg ICBzaXplX3QgbGVmdCA9IChzaXplX3QpKHAyIC0gcDEpOworICAgIGlmIChs ZWZ0ID49IG4pCisgICAgICBfX2J1aWx0aW5fbWVtc2V0IChwMiwgMCwgbiAq IHNpemVvZiAqcDIpOyAvKiAgeyBkZy1ib2d1cyAibWF4aW11bSBvYmplY3Qi ICJmYWxzZSB3YXJuaW5nIiB9ICovCisgIH0KKworICB2b2lkIGJhciAoaW50 Kik7Cit9OworCit2b2lkIGYgKFMgJnMpCit7CisgIHNpemVfdCBuID0gcy5z aXplICgpOworICBpZiAobiA+IDEgJiYgbiA8IDUpCisgICAgcy5mIChuIC0g MSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10 b3J0dXJlL2V4ZWN1dGUvYXJpdGgtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu Yy10b3J0dXJlL2V4ZWN1dGUvYXJpdGgtMS5jCmluZGV4IDU4ZGYzMjIuLjYx NjhkNzcgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVy ZS9leGVjdXRlL2FyaXRoLTEuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5j LXRvcnR1cmUvZXhlY3V0ZS9hcml0aC0xLmMKQEAgLTcsOSArNyw0MSBAQCBz YXRfYWRkICh1bnNpZ25lZCBpKQogICByZXR1cm4gcmV0OwogfQogCit1bnNp Z25lZAorc2F0X2FkZDIgKHVuc2lnbmVkIGkpCit7CisgIHVuc2lnbmVkIHJl dCA9IGkgKyAxOworICBpZiAocmV0ID4gaSkKKyAgICByZXR1cm4gcmV0Owor ICByZXR1cm4gaTsKK30KKwordW5zaWduZWQKK3NhdF9hZGQzICh1bnNpZ25l ZCBpKQoreworICB1bnNpZ25lZCByZXQgPSBpIC0gMTsKKyAgaWYgKHJldCA+ IGkpCisgICAgcmV0ID0gaTsKKyAgcmV0dXJuIHJldDsKK30KKwordW5zaWdu ZWQKK3NhdF9hZGQ0ICh1bnNpZ25lZCBpKQoreworICB1bnNpZ25lZCByZXQg PSBpIC0gMTsKKyAgaWYgKHJldCA8IGkpCisgICAgcmV0dXJuIHJldDsKKyAg cmV0dXJuIGk7Cit9CiBtYWluICgpCiB7CiAgIGlmIChzYXRfYWRkICh+MFUp ICE9IH4wVSkKICAgICBhYm9ydCAoKTsKKyAgaWYgKHNhdF9hZGQyICh+MFUp ICE9IH4wVSkKKyAgICBhYm9ydCAoKTsKKyAgaWYgKHNhdF9hZGQzICgwVSkg IT0gMFUpCisgICAgYWJvcnQgKCk7CisgIGlmIChzYXRfYWRkNCAoMFUpICE9 IDBVKQorICAgIGFib3J0ICgpOwogICBleGl0ICgwKTsKIH0KZGlmZiAtLWdp dCBhL2djYy90cmVlLXZycC5jIGIvZ2NjL3RyZWUtdnJwLmMKaW5kZXggZDdk N2EwZC4uYjRiNmQ4YSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdnJwLmMKKysr IGIvZ2NjL3RyZWUtdnJwLmMKQEAgLTk1NTAsOCArOTU1MCw5IEBAIHJhbmdl X2ZpdHNfdHlwZV9wICh2YWx1ZV9yYW5nZSAqdnIsIHVuc2lnbmVkIGRlc3Rf cHJlY2lzaW9uLCBzaWdub3AgZGVzdF9zZ24pCiAgICB0aGUgb3JpZ2luYWwg Y29uZGl0aW9uYWwuICAqLwogCiBzdGF0aWMgYm9vbAotc2ltcGxpZnlfY29u ZF91c2luZ19yYW5nZXMgKGdjb25kICpzdG10KQorc2ltcGxpZnlfY29uZF91 c2luZ19yYW5nZXMgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiB7Cisg IGdjb25kICpzdG10ID0gYXNfYSA8Z2NvbmQgKj4gKGdzaV9zdG10ICgqZ3Np KSk7CiAgIHRyZWUgb3AwID0gZ2ltcGxlX2NvbmRfbGhzIChzdG10KTsKICAg dHJlZSBvcDEgPSBnaW1wbGVfY29uZF9yaHMgKHN0bXQpOwogICBlbnVtIHRy ZWVfY29kZSBjb25kX2NvZGUgPSBnaW1wbGVfY29uZF9jb2RlIChzdG10KTsK QEAgLTk3MjAsNiArOTcyMSwxNCBAQCBzaW1wbGlmeV9jb25kX3VzaW5nX3Jh bmdlcyAoZ2NvbmQgKnN0bXQpCiAJfQogICAgIH0KIAorICAvKiBGaW5hbGx5 LCBqdXN0IHRyeSBtYXRjaC5wZCBzaW1wbGlmaWNhdGlvbi4gIFRoaXMgY2Fu IGNvbnZlcnQgc29tZQorICAgICBvdmVyZmxvdyBjaGVja3MgaW50byBzaW1w bGUgZXF1YWxpdHkgY2hlY2tzIChmb3IgZXhhbXBsZSkuICAqLworICBpZiAo Zm9sZF9zdG10IChnc2ksIE5VTEwpKQorICAgIHsKKyAgICAgIHVwZGF0ZV9z dG10IChnc2lfc3RtdCAoKmdzaSkpOworICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfQorCiAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTAzMTgsNyArMTAz MjgsNyBAQCBzaW1wbGlmeV9zdG10X3VzaW5nX3JhbmdlcyAoZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaSkKIAl9CiAgICAgfQogICBlbHNlIGlmIChnaW1w bGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX0NPTkQpCi0gICAgcmV0dXJuIHNp bXBsaWZ5X2NvbmRfdXNpbmdfcmFuZ2VzIChhc19hIDxnY29uZCAqPiAoc3Rt dCkpOworICAgIHJldHVybiBzaW1wbGlmeV9jb25kX3VzaW5nX3JhbmdlcyAo Z3NpKTsKICAgZWxzZSBpZiAoZ2ltcGxlX2NvZGUgKHN0bXQpID09IEdJTVBM RV9TV0lUQ0gpCiAgICAgcmV0dXJuIHNpbXBsaWZ5X3N3aXRjaF91c2luZ19y YW5nZXMgKGFzX2EgPGdzd2l0Y2ggKj4gKHN0bXQpKTsKICAgZWxzZSBpZiAo aXNfZ2ltcGxlX2NhbGwgKHN0bXQpCg== --------------1EC698ED1291CE5031BD3F90--