From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 130442 invoked by alias); 4 May 2017 17:55:44 -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 130392 invoked by uid 89); 4 May 2017 17:55:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=34710 X-HELO: mail-ua0-f169.google.com Received: from mail-ua0-f169.google.com (HELO mail-ua0-f169.google.com) (209.85.217.169) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 04 May 2017 17:55:39 +0000 Received: by mail-ua0-f169.google.com with SMTP id e55so14197157uaa.2 for ; Thu, 04 May 2017 10:55:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=YM4cbQ+xDG/VrmHnL2aQbDCrYvvpz7jVZOKLCN5kYWU=; b=n7YS44D9Xmllaridh44Y5Sdy7Wk9ESQnCqrSMQFMWdbzFdDQ3KeEN9mFMxAhhi4hly 6HquD06AjuHWrfCjUANqovTjlidzRVJk7UjT3KwDDuaM4jgVPhmS9x8O26lEKu5hAXlH ushWTIL4SXJ3xOKM2HWKktvsxW3zzYrnO3rkABlWaw6DDQtSOBqQUafkiNtt2GjjtLeb VI3mQRc4p4lnYUrng0sAL3f+XCxQHmPwOGk3S88SW0z2eyvd4gF3eFDCHvRxXG0UvhbA 5J7Yg27A/lybynzIqohJcwi+CIn7+hS0a9gtyCGBCXgiGUN68mKzvELEOXxGvAI28nTi Z+gw== X-Gm-Message-State: AN3rC/7EQBMdLOXAMjTJIoPykmrjNga8Q9ULMpTEVV1ejNoNki+uWwMw WVCA7rgSj3JskKv/Ge36e+5BWPrCVw== X-Received: by 10.176.76.68 with SMTP id d4mr19669221uag.4.1493920540216; Thu, 04 May 2017 10:55:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.33.70 with HTTP; Thu, 4 May 2017 10:55:39 -0700 (PDT) In-Reply-To: References: From: "Bin.Cheng" Date: Thu, 04 May 2017 18:19:00 -0000 Message-ID: Subject: Re: [PATCH GCC8][17/33]Treat complex cand step as invriant expression To: Richard Biener Cc: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary=f40304361ce81fc272054eb67bf0 X-IsSubscribed: yes X-SW-Source: 2017-05/txt/msg00338.txt.bz2 --f40304361ce81fc272054eb67bf0 Content-Type: text/plain; charset=UTF-8 Content-length: 2940 On Wed, May 3, 2017 at 2:43 PM, Richard Biener wrote: > On Tue, Apr 18, 2017 at 12:46 PM, Bin Cheng wrote: >> Hi, >> We generally need to compute cand step in loop preheader and use it in loop body. >> Unless it's an SSA_NAME of constant integer, an invariant expression is needed. > > I'm confused as to what this patch does. Comments talk about "Handle step as" > but then we print "Depend on inv...". And we share bitmaps, well it seems > > + find_inv_vars (data, &step, &cand->inv_vars); > + > + iv_inv_expr_ent *inv_expr = get_loop_invariant_expr (data, step); > + /* Share bitmap between inv_vars and inv_exprs for cand. */ > + if (inv_expr != NULL) > + { > + cand->inv_exprs = cand->inv_vars; > + cand->inv_vars = NULL; > + if (cand->inv_exprs) > + bitmap_clear (cand->inv_exprs); > + else > + cand->inv_exprs = BITMAP_ALLOC (NULL); > + > + bitmap_set_bit (cand->inv_exprs, inv_expr->id); > > just shares the bitmap allocation (and leaks cand->inv_exprs?). > > Note that generally it might be cheaper to use bitmap_head instead of > bitmap in the various structures (and then bitmap_initialize ()), this > saves one indirection. > > Anyway, the relation between inv_vars and inv_exprs is what confuses me. > Maybe it's the same as for cost_pair? invariants vs. loop invariants? > whatever that means... > > That is, can you expand the comments in cost_pair / iv_cand for inv_vars > vs. inv_exprs, esp what "invariant" actually means? When we represent use with cand, there will be computation which is loop invariant. The invariant computation is an newly created invariant expression and is based on ssa_vars existed before ivopts. If the invariant expression is complicated, we handle and call it as invariant expression. We say the cost_pair depends on the inv.exprs. If the invariant expression is simple enough, we record all existing ssa_vars it based on in inv_vars. We say the cost_pair depends on the inv.vars. The same words stand for struct iv_cand. If cand.step is simple enough, we simply record the ssa_var it based on in inv_vars, otherwise, the step is a new invariant expression which doesn't exist before, we record it in cand.inv_exprs. Add comment for inv_vars/inv_exprs, is this OK? I noticed there is a redundant field cost_pair.inv_expr, I deleted it as obvious in a standalone patch. Thanks, bin > > Thanks, > Richard. > >> Thanks, >> bin >> >> 2017-04-11 Bin Cheng >> >> * tree-ssa-loop-ivopts.c (struct iv_cand): New field inv_exprs. >> (dump_cand): Support iv_cand.inv_exprs. >> (add_candidate_1): Record invariant exprs in iv_cand.inv_exprs >> for candidates. >> (iv_ca_set_no_cp, iv_ca_set_cp, free_loop_data): Support >> iv_cand.inv_exprs. --f40304361ce81fc272054eb67bf0 Content-Type: text/plain; charset=US-ASCII; name="0017-treat-cand_step-as-inv_expr-20170501.txt" Content-Disposition: attachment; filename="0017-treat-cand_step-as-inv_expr-20170501.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j2apniy30 Content-length: 4901 ZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1sb29wLWl2b3B0cy5jIGIvZ2Nj L3RyZWUtc3NhLWxvb3AtaXZvcHRzLmMKaW5kZXggOGEwMWUwYS4uOTNkNzk2 NiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLWxvb3AtaXZvcHRzLmMKKysr IGIvZ2NjL3RyZWUtc3NhLWxvb3AtaXZvcHRzLmMKQEAgLTM0Nyw5ICszNDcs MTAgQEAgc3RydWN0IGNvc3RfcGFpcgogICBzdHJ1Y3QgaXZfY2FuZCAqY2Fu ZDsJLyogVGhlIGNhbmRpZGF0ZS4gICovCiAgIGNvbXBfY29zdCBjb3N0Owkv KiBUaGUgY29zdC4gICovCiAgIGVudW0gdHJlZV9jb2RlIGNvbXA7CS8qIEZv ciBpdiBlbGltaW5hdGlvbiwgdGhlIGNvbXBhcmlzb24uICAqLwotICBiaXRt YXAgaW52X3ZhcnM7CS8qIFRoZSBsaXN0IG9mIGludmFyaWFudHMgdGhhdCBo YXZlIHRvIGJlCi0JCQkgICBwcmVzZXJ2ZWQuICAqLwotICBiaXRtYXAgaW52 X2V4cHJzOwkvKiBMb29wIGludmFyaWFudCBleHByZXNzaW9ucy4gICovCisg IGJpdG1hcCBpbnZfdmFyczsJLyogVGhlIGxpc3Qgb2YgaW52YXJpYW50IHNz YV92YXJzIHRoYXQgaGF2ZSB0byBiZQorCQkJICAgcHJlc2VydmVkIHdoZW4g cmVwcmVzZW50aW5nIGl2X3VzZSB3aXRoIGl2X2NhbmQuICAqLworICBiaXRt YXAgaW52X2V4cHJzOwkvKiBUaGUgbGlzdCBvZiBuZXdseSBjcmVhdGVkIGlu dmFyaWFudCBleHByZXNzaW9ucworCQkJICAgd2hlbiByZXByZXNlbnRpbmcg aXZfdXNlIHdpdGggaXZfY2FuZC4gICovCiAgIHRyZWUgdmFsdWU7CQkvKiBG b3IgZmluYWwgdmFsdWUgZWxpbWluYXRpb24sIHRoZSBleHByZXNzaW9uIGZv cgogCQkJICAgdGhlIGZpbmFsIHZhbHVlIG9mIHRoZSBpdi4gIEZvciBpdiBl bGltaW5hdGlvbiwKIAkJCSAgIHRoZSBuZXcgYm91bmQgdG8gY29tcGFyZSB3 aXRoLiAgKi8KQEAgLTQxOSw4ICs0MjAsMTEgQEAgc3RydWN0IGl2X2NhbmQK ICAgdW5zaWduZWQgY29zdF9zdGVwOwkvKiBDb3N0IG9mIHRoZSBjYW5kaWRh dGUncyBpbmNyZW1lbnQgb3BlcmF0aW9uLiAgKi8KICAgc3RydWN0IGl2X3Vz ZSAqYWluY191c2U7IC8qIEZvciBJUF97QkVGT1JFLEFGVEVSfV9VU0UgY2Fu ZGlkYXRlcywgdGhlIHBsYWNlCiAJCQkgICAgICB3aGVyZSBpdCBpcyBpbmNy ZW1lbnRlZC4gICovCi0gIGJpdG1hcCBpbnZfdmFyczsJLyogVGhlIGxpc3Qg b2YgaW52YXJpYW50cyB0aGF0IGFyZSB1c2VkIGluIHN0ZXAgb2YgdGhlCi0J CQkgICBiaXYuICAqLworICBiaXRtYXAgaW52X3ZhcnM7CS8qIFRoZSBsaXN0 IG9mIGludmFyaWFudCBzc2FfdmFycyB1c2VkIGluIHN0ZXAgb2YgdGhlCisJ CQkgICBpdl9jYW5kLiAgKi8KKyAgYml0bWFwIGludl9leHByczsJLyogSWYg c3RlcCBpcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gYSBzaW5nbGUgc3NhX3Zh ciwKKwkJCSAgIGhhbmxkZSBpdCBhcyBhIG5ldyBpbnZhcmlhbnQgZXhwcmVz c2lvbiB3aGljaCB3aWxsCisJCQkgICBiZSBob2lzdGVkIG91dCBvZiBsb29w LiAgKi8KICAgc3RydWN0IGl2ICpvcmlnX2l2OwkvKiBUaGUgb3JpZ2luYWwg aXYgaWYgdGhpcyBjYW5kIGlzIGFkZGVkIGZyb20gYml2IHdpdGgKIAkJCSAg IHNtYWxsZXIgdHlwZS4gICovCiB9OwpAQCAtNzkwLDYgKzc5NCwxMSBAQCBk dW1wX2NhbmQgKEZJTEUgKmZpbGUsIHN0cnVjdCBpdl9jYW5kICpjYW5kKQog ICAgICAgZnByaW50ZiAoZmlsZSwgIiAgRGVwZW5kIG9uIGludi52YXJzOiAi KTsKICAgICAgIGR1bXBfYml0bWFwIChmaWxlLCBjYW5kLT5pbnZfdmFycyk7 CiAgICAgfQorICBpZiAoY2FuZC0+aW52X2V4cHJzKQorICAgIHsKKyAgICAg IGZwcmludGYgKGZpbGUsICIgIERlcGVuZCBvbiBpbnYuZXhwcnM6ICIpOwor ICAgICAgZHVtcF9iaXRtYXAgKGZpbGUsIGNhbmQtPmludl9leHBycyk7Cisg ICAgfQogCiAgIGlmIChjYW5kLT52YXJfYmVmb3JlKQogICAgIHsKQEAgLTMw MjYsNyArMzAzNSwyMyBAQCBhZGRfY2FuZGlkYXRlXzEgKHN0cnVjdCBpdm9w dHNfZGF0YSAqZGF0YSwKICAgICAgIGRhdGEtPnZjYW5kcy5zYWZlX3B1c2gg KGNhbmQpOwogCiAgICAgICBpZiAoVFJFRV9DT0RFIChzdGVwKSAhPSBJTlRF R0VSX0NTVCkKLQlmaW5kX2ludl92YXJzIChkYXRhLCAmc3RlcCwgJmNhbmQt Pmludl92YXJzKTsKKwl7CisJICBmaW5kX2ludl92YXJzIChkYXRhLCAmc3Rl cCwgJmNhbmQtPmludl92YXJzKTsKKworCSAgaXZfaW52X2V4cHJfZW50ICpp bnZfZXhwciA9IGdldF9sb29wX2ludmFyaWFudF9leHByIChkYXRhLCBzdGVw KTsKKwkgIC8qIFNoYXJlIGJpdG1hcCBiZXR3ZWVuIGludl92YXJzIGFuZCBp bnZfZXhwcnMgZm9yIGNhbmQuICAqLworCSAgaWYgKGludl9leHByICE9IE5V TEwpCisJICAgIHsKKwkgICAgICBjYW5kLT5pbnZfZXhwcnMgPSBjYW5kLT5p bnZfdmFyczsKKwkgICAgICBjYW5kLT5pbnZfdmFycyA9IE5VTEw7CisJICAg ICAgaWYgKGNhbmQtPmludl9leHBycykKKwkJYml0bWFwX2NsZWFyIChjYW5k LT5pbnZfZXhwcnMpOworCSAgICAgIGVsc2UKKwkJY2FuZC0+aW52X2V4cHJz ID0gQklUTUFQX0FMTE9DIChOVUxMKTsKKworCSAgICAgIGJpdG1hcF9zZXRf Yml0IChjYW5kLT5pbnZfZXhwcnMsIGludl9leHByLT5pZCk7CisJICAgIH0K Kwl9CiAKICAgICAgIGlmIChwb3MgPT0gSVBfQUZURVJfVVNFIHx8IHBvcyA9 PSBJUF9CRUZPUkVfVVNFKQogCWNhbmQtPmFpbmNfdXNlID0gdXNlOwpAQCAt NTYwNCw2ICs1NjI5LDcgQEAgaXZfY2Ffc2V0X25vX2NwIChzdHJ1Y3QgaXZv cHRzX2RhdGEgKmRhdGEsIHN0cnVjdCBpdl9jYSAqaXZzLAogICAgICAgaXZz LT5uX2NhbmRzLS07CiAgICAgICBpdnMtPmNhbmRfY29zdCAtPSBjcC0+Y2Fu ZC0+Y29zdDsKICAgICAgIGl2X2NhX3NldF9yZW1vdmVfaW52cyAoaXZzLCBj cC0+Y2FuZC0+aW52X3ZhcnMsIGl2cy0+bl9pbnZfdmFyX3VzZXMpOworICAg ICAgaXZfY2Ffc2V0X3JlbW92ZV9pbnZzIChpdnMsIGNwLT5jYW5kLT5pbnZf ZXhwcnMsIGl2cy0+bl9pbnZfZXhwcl91c2VzKTsKICAgICB9CiAKICAgaXZz LT5jYW5kX3VzZV9jb3N0IC09IGNwLT5jb3N0OwpAQCAtNTY2MCw2ICs1Njg2 LDcgQEAgaXZfY2Ffc2V0X2NwIChzdHJ1Y3QgaXZvcHRzX2RhdGEgKmRhdGEs IHN0cnVjdCBpdl9jYSAqaXZzLAogCSAgaXZzLT5uX2NhbmRzKys7CiAJICBp dnMtPmNhbmRfY29zdCArPSBjcC0+Y2FuZC0+Y29zdDsKIAkgIGl2X2NhX3Nl dF9hZGRfaW52cyAoaXZzLCBjcC0+Y2FuZC0+aW52X3ZhcnMsIGl2cy0+bl9p bnZfdmFyX3VzZXMpOworCSAgaXZfY2Ffc2V0X2FkZF9pbnZzIChpdnMsIGNw LT5jYW5kLT5pbnZfZXhwcnMsIGl2cy0+bl9pbnZfZXhwcl91c2VzKTsKIAl9 CiAKICAgICAgIGl2cy0+Y2FuZF91c2VfY29zdCArPSBjcC0+Y29zdDsKQEAg LTcxNDEsNiArNzE2OCw4IEBAIGZyZWVfbG9vcF9kYXRhIChzdHJ1Y3QgaXZv cHRzX2RhdGEgKmRhdGEpCiAKICAgICAgIGlmIChjYW5kLT5pbnZfdmFycykK IAlCSVRNQVBfRlJFRSAoY2FuZC0+aW52X3ZhcnMpOworICAgICAgaWYgKGNh bmQtPmludl9leHBycykKKwlCSVRNQVBfRlJFRSAoY2FuZC0+aW52X2V4cHJz KTsKICAgICAgIGZyZWUgKGNhbmQpOwogICAgIH0KICAgZGF0YS0+dmNhbmRz LnRydW5jYXRlICgwKTsK --f40304361ce81fc272054eb67bf0--