From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27899 invoked by alias); 11 Aug 2016 10:36:23 -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 27877 invoked by uid 89); 11 Aug 2016 10:36:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_05,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=sk:fdumpt, sk:fdump-t, sk:todo_up, sk:todo_fl X-HELO: mail-io0-f175.google.com Received: from mail-io0-f175.google.com (HELO mail-io0-f175.google.com) (209.85.223.175) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 11 Aug 2016 10:36:12 +0000 Received: by mail-io0-f175.google.com with SMTP id m101so2107429ioi.2 for ; Thu, 11 Aug 2016 03:36:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=MK1iSAjLhWXt4liu70bYUHxmxOFELsM1UTEh8vbx80M=; b=BbzWTAIVHDH0l4dwfA+1QEeE0eJ/KHOJQrpdN5cW0pYMSJlYgx6gd2hANq8bQNoCqK y9KlU2qTqCa8NKI36bG1piYehInBVuAywgPbfj+ym5YuMLloBEgINUmsxi71U6CgcaXd 5uj3tzpu/nPMb1U/HjfWq4hZK/bmJwm9cEwUnn1CxAXGiJ7CNEKxPtm4PyVMvhxiuNbQ H806CimBZQeHieBc6uNEdf8oJZNTOerPeuwty2wyFlBjEU/OU9yReLUB9Kx/WVm4rhWb xyOH2jAOQZc4C8VFFkEnp2HP/VbxfTSH8ai+wKuxWNjxxrVLnGTgbmtlEiFuQuujKCWs XLzQ== X-Gm-Message-State: AEkoousewuxA/0/LfpWx582SU3mDXa7+Vkp4b0D3cCmC+WjW08cj646usakxDK3j/GbCfM/oJncWW2v/joJ6XJJi X-Received: by 10.107.159.147 with SMTP id i141mr10290124ioe.29.1470911770846; Thu, 11 Aug 2016 03:36:10 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.208.18 with HTTP; Thu, 11 Aug 2016 03:36:10 -0700 (PDT) In-Reply-To: References: From: Prathamesh Kulkarni Date: Thu, 11 Aug 2016 10:36:00 -0000 Message-ID: Subject: Re: fold strlen (s) eq/ne 0 to *s eq/ne 0 on GIMPLE To: Richard Biener Cc: gcc Patches Content-Type: multipart/mixed; boundary=001a1140fbc49919b40539c9553c X-IsSubscribed: yes X-SW-Source: 2016-08/txt/msg00902.txt.bz2 --001a1140fbc49919b40539c9553c Content-Type: text/plain; charset=UTF-8 Content-length: 1350 On 1 August 2016 at 17:03, Richard Biener wrote: > On Mon, 1 Aug 2016, Prathamesh Kulkarni wrote: > >> Hi Richard, >> The attached patch tries to fold strlen (s) eq/ne 0 to *s eq/ne 0 on GIMPLE. >> I am not sure where was the ideal place to put this transform in and ended up >> adding it to strlen_optimize_stmt(). >> Does that look OK ? >> >> I needed to add TODO_update_ssa to strlen pass, otherwise we hit the >> following assert in execute_todo(): >> if (flag_checking >> && cfun >> && need_ssa_update_p (cfun)) >> gcc_assert (flags & TODO_update_ssa_any); >> >> Bootstrap+test in progress on x86_64-unknown-linux-gnu. > > I believe you should factor small-size part of handle_builtin_memcmp and > re-use that for the code generation part. > > You should also remove the corresponding fold-const.c code I think. Hi, In the attached version, I removed code from fold-const.c, and factored code-gen part into replace_call_cmp. The previous patch incorrectly applied the transform when result of strlen() had multiple uses, thus restricting it to has_single_use. However I suppose we could do better by checking if each immediate use of the result is involved in compare against 0 and in that case perform the transform ? Bootstrap + test in progress on x86_64-unknown-linux-gnu Thanks, Prathamesh > > Richard. --001a1140fbc49919b40539c9553c Content-Type: text/plain; charset=US-ASCII; name="strlen-6.diff" Content-Disposition: attachment; filename="strlen-6.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_irq6tyb40 Content-length: 8496 ZGlmZiAtLWdpdCBhL2djYy9mb2xkLWNvbnN0LmMgYi9nY2MvZm9sZC1jb25z dC5jCmluZGV4IGM1ZDlhNzkuLjMwOWVmMzggMTAwNjQ0Ci0tLSBhL2djYy9m b2xkLWNvbnN0LmMKKysrIGIvZ2NjL2ZvbGQtY29uc3QuYwpAQCAtMTA2NzYs MzAgKzEwNjc2LDYgQEAgZm9sZF9iaW5hcnlfbG9jIChsb2NhdGlvbl90IGxv YywKIAkgICAgcmV0dXJuIHQxOwogCX0KIAotICAgICAgLyogT3B0aW1pemUg Y29tcGFyaXNvbnMgb2Ygc3RybGVuIHZzIHplcm8gdG8gYSBjb21wYXJlIG9m IHRoZQotCSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyB2cyB6ZXJv LiAgVG8gd2l0LAotCQlzdHJsZW4ocHRyKSA9PSAwICAgPT4gICpwdHIgPT0g MAotCQlzdHJsZW4ocHRyKSAhPSAwICAgPT4gICpwdHIgIT0gMAotCSBPdGhl ciBjYXNlcyBzaG91bGQgcmVkdWNlIHRvIG9uZSBvZiB0aGVzZSB0d28gKG9y IGEgY29uc3RhbnQpCi0JIGR1ZSB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHN0 cmxlbiBiZWluZyB1bnNpZ25lZC4gICovCi0gICAgICBpZiAoVFJFRV9DT0RF IChhcmcwKSA9PSBDQUxMX0VYUFIKLQkgICYmIGludGVnZXJfemVyb3AgKGFy ZzEpKQotCXsKLQkgIHRyZWUgZm5kZWNsID0gZ2V0X2NhbGxlZV9mbmRlY2wg KGFyZzApOwotCi0JICBpZiAoZm5kZWNsCi0JICAgICAgJiYgREVDTF9CVUlM VF9JTl9DTEFTUyAoZm5kZWNsKSA9PSBCVUlMVF9JTl9OT1JNQUwKLQkgICAg ICAmJiBERUNMX0ZVTkNUSU9OX0NPREUgKGZuZGVjbCkgPT0gQlVJTFRfSU5f U1RSTEVOCi0JICAgICAgJiYgY2FsbF9leHByX25hcmdzIChhcmcwKSA9PSAx Ci0JICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUgKENBTExfRVhQUl9B UkcgKGFyZzAsIDApKSkgPT0gUE9JTlRFUl9UWVBFKQotCSAgICB7Ci0JICAg ICAgdHJlZSBpcmVmID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChs b2MsCi0JCQkJCQkgICBDQUxMX0VYUFJfQVJHIChhcmcwLCAwKSk7Ci0JICAg ICAgcmV0dXJuIGZvbGRfYnVpbGQyX2xvYyAobG9jLCBjb2RlLCB0eXBlLCBp cmVmLAotCQkJCSAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChpcmVmKSwg MCkpOwotCSAgICB9Ci0JfQotCiAgICAgICAvKiBGb2xkIChYID4+IEMpICE9 IDAgaW50byBYIDwgMCBpZiBDIGlzIG9uZSBsZXNzIHRoYW4gdGhlIHdpZHRo CiAJIG9mIFguICBTaW1pbGFybHkgZm9sZCAoWCA+PiBDKSA9PSAwIGludG8g WCA+PSAwLiAgKi8KICAgICAgIGlmIChUUkVFX0NPREUgKGFyZzApID09IFJT SElGVF9FWFBSCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9z dHJsZW5vcHQtMzAuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3N0cmxlbm9w dC0zMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIw NDFkODYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9zdHJsZW5vcHQtMzAuYwpAQCAtMCwwICsxLDEyIEBACisvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRy ZWUtc3RybGVuIiB9ICovCisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBu b19pY2YpKQorX0Jvb2wgZjEoY29uc3QgY2hhciAqcykKK3sKKyAgdW5zaWdu ZWQgbG9uZyBsZW4gPSBfX2J1aWx0aW5fc3RybGVuIChzKTsKKyAgX0Jvb2wg cmV0ID0gKGxlbiA9PSAwKTsKKyAgcmV0dXJuIHJldDsKK30KKworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdHJsZW4gXFwoIiAw ICJzdHJsZW4iIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLXN0 cmxlbi5jIGIvZ2NjL3RyZWUtc3NhLXN0cmxlbi5jCmluZGV4IDlkN2I0ZGYu LjRhZGEyZWUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1zdHJsZW4uYwor KysgYi9nY2MvdHJlZS1zc2Etc3RybGVuLmMKQEAgLTQ1LDYgKzQ1LDggQEAg YWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKICNpbmNsdWRlICJpcGEtY2hrcC5oIgogI2luY2x1ZGUgInRyZWUt aGFzaC10cmFpdHMuaCIKICNpbmNsdWRlICJidWlsdGlucy5oIgorI2luY2x1 ZGUgInRyZWUtcHJldHR5LXByaW50LmgiCisjaW5jbHVkZSAidHJlZS1jZmcu aCIKIAogLyogQSB2ZWN0b3IgaW5kZXhlZCBieSBTU0FfTkFNRV9WRVJTSU9O LiAgMCBtZWFucyB1bmtub3duLCBwb3NpdGl2ZSB2YWx1ZQogICAgaXMgYW4g aW5kZXggaW50byBzdHJpbmZvIHZlY3RvciwgbmVnYXRpdmUgdmFsdWUgc3Rh bmRzIGZvcgpAQCAtMTkzNyw2ICsxOTM5LDM2IEBAIGhhbmRsZV9idWlsdGlu X21lbXNldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKICAgcmV0dXJu IGZhbHNlOwogfQogCitzdGF0aWMgdm9pZAorcmVwbGFjZV9jYWxsX2J5X2Nt cCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgbG9jYXRpb25fdCBsb2Ms IAorCQkgICAgIHRyZWUgdHlwZSwgdHJlZSBhcmcxLCB0cmVlIGFyZzIsCisJ CSAgICAgdHJlZSByZXNfdHlwZSwgZW51bSB0cmVlX2NvZGUgY21wX2NvZGUp Cit7CisgIHRyZWUgcHRydHlwZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZV9mb3Jf bW9kZSAoY2hhcl90eXBlX25vZGUsIHB0cl9tb2RlLCB0cnVlKTsKKyAgdHJl ZSBvZmYgPSBidWlsZF9pbnRfY3N0IChwdHJ0eXBlLCAwKTsKKyAgYXJnMSA9 IGJ1aWxkMl9sb2MgKGxvYywgTUVNX1JFRiwgdHlwZSwgYXJnMSwgb2ZmKTsK KyAgdHJlZSB0ZW0xID0gZm9sZF9jb25zdF9hZ2dyZWdhdGVfcmVmIChhcmcx KTsKKyAgaWYgKHRlbTEpCisgICAgYXJnMSA9IHRlbTE7CisKKyAgaWYgKFBP SU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGFyZzIpKSkKKyAgICB7CisgICAg ICBhcmcyID0gYnVpbGQyX2xvYyAobG9jLCBNRU1fUkVGLCB0eXBlLCBhcmcy LCBvZmYpOworICAgICAgdHJlZSB0ZW0yID0gZm9sZF9jb25zdF9hZ2dyZWdh dGVfcmVmIChhcmcyKTsKKyAgICAgIGlmICh0ZW0yKQorCWFyZzIgPSB0ZW0y OworICAgIH0KKyAgZWxzZQorICAgIGdjY19hc3NlcnQgKElOVEVHUkFMX1RZ UEVfUCAoVFJFRV9UWVBFIChhcmcyKSkpOworCisgIHRyZWUgcmVzID0gZm9s ZF9jb252ZXJ0X2xvYyAobG9jLCByZXNfdHlwZSwKKwkJCSAgICAgICBmb2xk X2J1aWxkMl9sb2MgKGxvYywgY21wX2NvZGUsCisJCQkJCQlib29sZWFuX3R5 cGVfbm9kZSwKKwkJCQkJCWFyZzEsIGFyZzIpKTsKKworICBnaW1wbGlmeV9h bmRfdXBkYXRlX2NhbGxfZnJvbV90cmVlIChnc2ksIHJlcyk7Cit9CisKIC8q IEhhbmRsZSBhIGNhbGwgdG8gbWVtY21wLiAgV2UgdHJ5IHRvIGhhbmRsZSBz bWFsbCBjb21wYXJpc29ucyBieQogICAgY29udmVydGluZyB0aGVtIHRvIGxv YWQgYW5kIGNvbXBhcmUsIGFuZCByZXBsYWNpbmcgdGhlIGNhbGwgdG8gbWVt Y21wCiAgICB3aXRoIGEgX19idWlsdGluX21lbWNtcF9lcSBjYWxsIHdoZXJl IHBvc3NpYmxlLiAgKi8KQEAgLTE5OTQsMjUgKzIwMjYsMTEgQEAgaGFuZGxl X2J1aWx0aW5fbWVtY21wIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpKQog CSAgJiYgKGFsaWduID49IGxlbmkgfHwgIVNMT1dfVU5BTElHTkVEX0FDQ0VT UyAobW9kZSwgYWxpZ24pKSkKIAl7CiAJICBsb2NhdGlvbl90IGxvYyA9IGdp bXBsZV9sb2NhdGlvbiAoc3RtdDIpOwotCSAgdHJlZSB0eXBlLCBvZmY7CisJ ICB0cmVlIHR5cGU7IAogCSAgdHlwZSA9IGJ1aWxkX25vbnN0YW5kYXJkX2lu dGVnZXJfdHlwZSAobGVuaSwgMSk7CiAJICBnY2NfYXNzZXJ0IChHRVRfTU9E RV9CSVRTSVpFIChUWVBFX01PREUgKHR5cGUpKSA9PSBsZW5pKTsKLQkgIHRy ZWUgcHRydHlwZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZV9mb3JfbW9kZSAoY2hh cl90eXBlX25vZGUsCi0JCQkJCQkgICAgICBwdHJfbW9kZSwgdHJ1ZSk7Ci0J ICBvZmYgPSBidWlsZF9pbnRfY3N0IChwdHJ0eXBlLCAwKTsKLQkgIGFyZzEg PSBidWlsZDJfbG9jIChsb2MsIE1FTV9SRUYsIHR5cGUsIGFyZzEsIG9mZik7 Ci0JICBhcmcyID0gYnVpbGQyX2xvYyAobG9jLCBNRU1fUkVGLCB0eXBlLCBh cmcyLCBvZmYpOwotCSAgdHJlZSB0ZW0xID0gZm9sZF9jb25zdF9hZ2dyZWdh dGVfcmVmIChhcmcxKTsKLQkgIGlmICh0ZW0xKQotCSAgICBhcmcxID0gdGVt MTsKLQkgIHRyZWUgdGVtMiA9IGZvbGRfY29uc3RfYWdncmVnYXRlX3JlZiAo YXJnMik7Ci0JICBpZiAodGVtMikKLQkgICAgYXJnMiA9IHRlbTI7Ci0JICBy ZXMgPSBmb2xkX2NvbnZlcnRfbG9jIChsb2MsIFRSRUVfVFlQRSAocmVzKSwK LQkJCQkgIGZvbGRfYnVpbGQyX2xvYyAobG9jLCBORV9FWFBSLAotCQkJCQkJ ICAgYm9vbGVhbl90eXBlX25vZGUsCi0JCQkJCQkgICBhcmcxLCBhcmcyKSk7 Ci0JICBnaW1wbGlmeV9hbmRfdXBkYXRlX2NhbGxfZnJvbV90cmVlIChnc2ks IHJlcyk7CisJICByZXBsYWNlX2NhbGxfYnlfY21wIChnc2ksIGxvYywgdHlw ZSwgYXJnMSwgYXJnMiwKKwkJCSAgICAgICBUUkVFX1RZUEUgKHJlcyksIE5F X0VYUFIpOwogCSAgcmV0dXJuIGZhbHNlOwogCX0KICAgICB9CkBAIC0yMzAy LDYgKzIzMjAsNDEgQEAgc3RybGVuX29wdGltaXplX3N0bXQgKGdpbXBsZV9z dG10X2l0ZXJhdG9yICpnc2kpCiAJICBlbHNlIGlmIChnaW1wbGVfYXNzaWdu X3Joc19jb2RlIChzdG10KSA9PSBQT0lOVEVSX1BMVVNfRVhQUikKIAkgICAg aGFuZGxlX3BvaW50ZXJfcGx1cyAoZ3NpKTsKIAl9CisgICAgICAvKiBzdHJs ZW4gKHMpIGVxL25lIDAgLT4gKnMgZXEvbmUgMC4gICovCisgICAgICBlbHNl IGlmIChUUkVFX0NPREUgKGxocykgPT0gU1NBX05BTUUgJiYgSU5URUdSQUxf VFlQRV9QIChUUkVFX1RZUEUgKGxocykpKQorCXsKKwkgIHRyZWUgcmhzMiA9 IGdpbXBsZV9hc3NpZ25fcmhzMiAoc3RtdCk7CisJICB0cmVlX2NvZGUgY29k ZSA9IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpOworCisJICBpZiAo KGNvZGUgPT0gRVFfRVhQUiB8fCBjb2RlID09IE5FX0VYUFIpICYmIGludGVn ZXJfemVyb3AgKHJoczIpKQorCSAgICB7CisJICAgICAgdHJlZSByaHMxID0g Z2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KTsKKwkgICAgICBpZiAoVFJFRV9D T0RFIChyaHMxKSA9PSBTU0FfTkFNRSkKKwkJeworCQkgIGdpbXBsZSAqZGVm X3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAocmhzMSk7CisJCSAgaWYgKGdj YWxsICpjYWxsX3N0bXQgPSBkeW5fY2FzdDxnY2FsbCAqPiAoZGVmX3N0bXQp KQorCQkgICAgeworCQkgICAgICB0cmVlIGNhbGxlZSA9IGdpbXBsZV9jYWxs X2ZuZGVjbCAoY2FsbF9zdG10KTsKKwkJICAgICAgaWYgKHZhbGlkX2J1aWx0 aW5fY2FsbCAoY2FsbF9zdG10KQorCQkJICAmJiBERUNMX0ZVTkNUSU9OX0NP REUgKGNhbGxlZSkgPT0gQlVJTFRfSU5fU1RSTEVOKQorCQkJeworCQkJICB0 cmVlIGNhbGxfYXJnID0gZ2ltcGxlX2NhbGxfYXJnIChjYWxsX3N0bXQsIDAp OworCQkJICB0cmVlIGNhbGxfbGhzID0gZ2ltcGxlX2NhbGxfbGhzIChjYWxs X3N0bXQpOworCisJCQkgIGlmIChoYXNfc2luZ2xlX3VzZSAoY2FsbF9saHMp KQorCQkJICAgIHsKKwkJCSAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGNh bGxfZ3NpID0gZ3NpX2Zvcl9zdG10IChjYWxsX3N0bXQpOworCQkJICAgICAg cmVwbGFjZV9jYWxsX2J5X2NtcCAoJmNhbGxfZ3NpLCBnaW1wbGVfbG9jYXRp b24gKGNhbGxfc3RtdCksCisJCQkJCQkgICBUUkVFX1RZUEUgKHJoczIpLCBj YWxsX2FyZywgcmhzMiwgVFJFRV9UWVBFIChjYWxsX2xocyksCisJCQkJCQkg ICBjb2RlKTsKKwkJCSAgICAgIGdpbXBsZV9hc3NpZ25fc2V0X3Joc193aXRo X29wcyAoZ3NpLCBDT05WRVJUX0VYUFIsIGNhbGxfbGhzKTsKKwkJCSAgICAg IHVwZGF0ZV9zdG10IChzdG10KTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9 CisJCX0KKwkgICAgfQorCX0KICAgICAgIGVsc2UgaWYgKFRSRUVfQ09ERSAo bGhzKSAhPSBTU0FfTkFNRSAmJiAhVFJFRV9TSURFX0VGRkVDVFMgKGxocykp CiAJewogCSAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChsaHMpOwpAQCAtMjUw NSw3ICsyNTU4LDcgQEAgY29uc3QgcGFzc19kYXRhIHBhc3NfZGF0YV9zdHJs ZW4gPQogICAwLCAvKiBwcm9wZXJ0aWVzX3Byb3ZpZGVkICovCiAgIDAsIC8q IHByb3BlcnRpZXNfZGVzdHJveWVkICovCiAgIDAsIC8qIHRvZG9fZmxhZ3Nf c3RhcnQgKi8KLSAgMCwgLyogdG9kb19mbGFnc19maW5pc2ggKi8KKyAgVE9E T191cGRhdGVfc3NhX29ubHlfdmlydHVhbHMsIC8qIHRvZG9fZmxhZ3NfZmlu aXNoICovCiB9OwogCiBjbGFzcyBwYXNzX3N0cmxlbiA6IHB1YmxpYyBnaW1w bGVfb3B0X3Bhc3MK --001a1140fbc49919b40539c9553c--