From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 55169 invoked by alias); 24 Mar 2015 14:29:01 -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 55152 invoked by uid 89); 24 Mar 2015 14:28:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.0 required=5.0 tests=AWL,BAYES_50 autolearn=ham version=3.3.2 X-HELO: mx2.suse.de Received: from cantor2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Tue, 24 Mar 2015 14:28:56 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 391FEABB1; Tue, 24 Mar 2015 14:28:53 +0000 (UTC) Message-ID: <551174A3.2070400@suse.cz> Date: Tue, 24 Mar 2015 14:29:00 -0000 From: =?UTF-8?B?TWFydGluIExpxaFrYQ==?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: GCC Patches CC: Jan Hubicka Subject: [PATCH] IPA ICF: make hash values finer Content-Type: multipart/mixed; boundary="------------000009070306090103090800" X-IsSubscribed: yes X-SW-Source: 2015-03/txt/msg01250.txt.bz2 This is a multi-part message in MIME format. --------------000009070306090103090800 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 606 Hello. Following patch should be final speed-up patch for IPA ICF. It just basically enhances hash values of a symbol, computed in a TU. Having finer hash values, we do not spend so much time in WPA phase. It shows, we can reduce utilization from 14% -> 9% (_w/o_ WPA streaming out). Time report and ICF dump are added as attachment. Second, very small, part of the patch replaces add_ptr with add_int (for ultimate_alias_target). Can boostrap on ppc64le-linux-pc and no regression seen on x86_64-linux-pc. I've been running LTO builds for chrome, firefox and inkscape. Ready for trunk? Thanks, Martin --------------000009070306090103090800 Content-Type: text/plain; charset=UTF-8; name="chrome-icf-hash-before.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="chrome-icf-hash-before.txt" Content-length: 9634 ICAgICAgMSAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29tcGFyZV9waGlfbm9k ZToxNDI2KQogICAgICA0ICAgZmFsc2UgcmV0dXJuZWQ6ICcnIChjb21wYXJl X29wZXJhbmQ6NDkwKQogICAgICA0ICAgZmFsc2UgcmV0dXJuZWQ6ICdkaWZm ZXJlbnQgZGVwZW5kZW5jZSBpbmZvJyAoY29tcGFyZV9tZW1vcnlfb3BlcmFu ZDozNTEpCiAgICAgIDUgICBmYWxzZSByZXR1cm5lZDogJ2FsaWdubWVudCBt aXNtYXRjaCcgKGVxdWFsc193cGE6MTUzMCkKICAgICAxMSAgIGZhbHNlIHJl dHVybmVkOiAnVFJFRV9DT0RFIG1pc21hdGNoJyAoZXF1YWxzOjE2MjUpCiAg ICAgMTkgICBmYWxzZSByZXR1cm5lZDogJ3N3aXRjaCBsYWJlbF9leHBycyBh cmUgZGlmZmVyZW50JyAoY29tcGFyZV9naW1wbGVfc3dpdGNoOjk1MCkKICAg ICA0MiAgIGZhbHNlIHJldHVybmVkOiAnSU5URUdFUl9DU1QgcHJlY2lzaW9u IG1pc21hdGNoJyAoZXF1YWxzOjE3MDgpCiAgICAgNDkgICBmYWxzZSByZXR1 cm5lZDogJ0FTTSBzdHJpbmdzIGFyZSBkaWZmZXJlbnQnIChjb21wYXJlX2dp bXBsZV9hc206MTAyNykKICAgICA1NyAgIGZhbHNlIHJldHVybmVkOiAnY2Fz ZSBoaWdoIHZhbHVlcyBhcmUgZGlmZmVyZW50JyAoY29tcGFyZV9naW1wbGVf c3dpdGNoOjk0MSkKICAgICA1NyAgIGZhbHNlIHJldHVybmVkOiAnb3BlcmF0 b3IgbmV3IGZsYWdzIGFyZSBkaWZmZXJlbnQnIChlcXVhbHNfd3BhOjQyMikK ICAgIDE2MyAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29tcGFyZV9vcGVyYW5k OjQ5MykKICAgIDE5NSAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29tcGFyZV9w aGlfbm9kZToxNDQ5KQogICAgMTk2ICAgZmFsc2UgcmV0dXJuZWQ6ICdQSEkg bm9kZSBjb21wYXJpc29uIHJldHVybnMgZmFsc2UnIChlcXVhbHNfcHJpdmF0 ZTo3NzQpCiAgICAyODIgICBmYWxzZSByZXR1cm5lZDogJ2RpZmZlcmVudCBv cGVyYW5kIHZvbGF0aWxpdHknIChjb21wYXJlX21lbW9yeV9vcGVyYW5kOjMx MikKICAgIDI4MyAgIGZhbHNlIHJldHVybmVkOiAnYW8gYWxpYXMgc2V0cyBh cmUgZGlmZmVyZW50JyAoY29tcGFyZV9tZW1vcnlfb3BlcmFuZDozMTYpCiAg ICAzOTkgICBmYWxzZSByZXR1cm5lZDogJ3ZhcmlhYmxlcyB0eXBlcyBhcmUg ZGlmZmVyZW50JyAoZXF1YWxzOjE1OTYpCiAgICA0NDggICBmYWxzZSByZXR1 cm5lZDogJ1Vua25vd24gVFJFRSBjb2RlIHJlYWNoZWQnIChjb21wYXJlX29w ZXJhbmQ6NTcyKQogICAgNDc3ICAgZmFsc2UgcmV0dXJuZWQ6ICdEZWNsYXJh dGlvbiBtaXNtYXRjaCcgKGVxdWFsczoxNzA0KQogICAgNDc4ICAgZmFsc2Ug cmV0dXJuZWQ6ICdjYXNlIGxvdyB2YWx1ZXMgYXJlIGRpZmZlcmVudCcgKGNv bXBhcmVfZ2ltcGxlX3N3aXRjaDo5MzUpCiAgICA2MjQgICBmYWxzZSByZXR1 cm5lZDogJycgKGNvbXBhcmVfb3BlcmFuZDo0NzIpCiAgICA2ODkgICBmYWxz ZSByZXR1cm5lZDogJ2RpZmZlcmVudCBudW1iZXIgb2YgYXJndW1lbnRzJyAo ZXF1YWxzX3dwYTo0MDcpCiAgICA5MTUgICBmYWxzZSByZXR1cm5lZDogJ21l bW9yeSBvcGVyYW5kcyBhcmUgZGlmZmVyZW50JyAoY29tcGFyZV9naW1wbGVf Y2FsbDo4MDUpCiAgIDE0NjkgICBmYWxzZSByZXR1cm5lZDogJ0RFQ0xfRElT UkVHQVJEX0lOTElORV9MSU1JVFMgYXJlIGRpZmZlcmVudCcgKGVxdWFsc193 cGE6NDE2KQogICAzMjk4ICAgZmFsc2UgcmV0dXJuZWQ6ICcnIChjb21wYXJl X29wZXJhbmQ6NDM3KQogICA0OTE4ICAgZmFsc2UgcmV0dXJuZWQ6ICdUYXJn ZXQgZmxhZ3MgYXJlIGRpZmZlcmVudCcgKGVxdWFsc193cGE6NDY3KQogICA2 MDM2ICAgZmFsc2UgcmV0dXJuZWQ6ICdkaWZmZXJlbnQgYWNjZXNzIGFsaWdu bWVudCcgKGNvbXBhcmVfbWVtb3J5X29wZXJhbmQ6MzM0KQogICA3MjA5ICAg ZmFsc2UgcmV0dXJuZWQ6ICdvbmUgdHlwZSBpcyBub3QgcG9seW1vcnBoaWMn IChjb21wYXRpYmxlX3BvbHltb3JwaGljX3R5cGVzX3A6MjU4KQogIDEwMTc3 ICAgZmFsc2UgcmV0dXJuZWQ6ICcnIChlcXVhbHNfcHJpdmF0ZTo3MTkpCiAg MTA5NzkgICBmYWxzZSByZXR1cm5lZDogJ09CSl9UWVBFX1JFRiBPVFIgdHlw ZSBtaXNtYXRjaCcgKGNvbXBhcmVfb3BlcmFuZDo1MjMpCiAgMTEyNzEgICBm YWxzZSByZXR1cm5lZDogJycgKGVxdWFsc19wcml2YXRlOjY5NCkKICAxMTI4 MiAgIGZhbHNlIHJldHVybmVkOiAnREVMQ19DWFhfQ09OU1RSVUNUT1IgbWlz bWF0Y2gnIChlcXVhbHNfd3BhOjQzMykKICAxMTYyNCAgIGZhbHNlIHJldHVy bmVkOiAnYWxpYXMgc2V0cyBhcmUgZGlmZmVyZW50JyAoY29tcGF0aWJsZV90 eXBlc19wOjI3OCkKICAxMTY2MiAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29t cGFyZV9naW1wbGVfY2FsbDo3NjcpCiAgMTYzMjcgICBmYWxzZSByZXR1cm5l ZDogJ3ZpcnR1YWwgb3IgZmluYWwgZmxhZyBtaXNtYXRjaCcgKGVxdWFsc193 cGE6MTU3MSkKICAyMTEwNCAgIGZhbHNlIHJldHVybmVkOiAnTUVUSE9EX1RZ UEUgYW5kIEZVTkNUSU9OX1RZUEUgbWlzbWF0Y2gnIChlcXVhbHNfd3BhOjUy MykKICAyNjMwMSAgIGZhbHNlIHJldHVybmVkOiAncmVzdWx0IHR5cGVzIGFy ZSBkaWZmZXJlbnQnIChlcXVhbHNfd3BhOjQ4NykKICAzMjUxMyAgIGZhbHNl IHJldHVybmVkOiAnZGlmZmVyZW50IHJlZmVyZW5jZXMnIChjb21wYXJlX2Nn cmFwaF9yZWZlcmVuY2VzOjM3NCkKICA2MDMyNyAgIGZhbHNlIHJldHVybmVk OiAnREVMQ19DWFhfREVTVFJVQ1RPUiBtaXNtYXRjaCcgKGVxdWFsc193cGE6 NDM2KQogIDczNzQ2ICAgZmFsc2UgcmV0dXJuZWQ6ICdkZWNsX29yX3R5cGUg ZmxhZ3MgYXJlIGRpZmZlcmVudCcgKGVxdWFsc193cGE6NDM5KQogIDkxODU2 ICAgZmFsc2UgcmV0dXJuZWQ6ICdyZWZlcmVuY2VzIHRvIHZpcnR1YWwgdGFi bGVzIGNhbiBub3QgYmUgbWVyZ2VkJyAoY29tcGFyZV9jZ3JhcGhfcmVmZXJl bmNlczozNjApCiAxOTUyNzYgICBmYWxzZSByZXR1cm5lZDogJ2FyZ3VtZW50 IHR5cGUgaXMgZGlmZmVyZW50JyAoZXF1YWxzX3dwYTo0OTgpCiAyMDk2MTkg ICBmYWxzZSByZXR1cm5lZDogJ2NhbGwgZnVuY3Rpb24gdHlwZXMgYXJlIG5v dCBjb21wYXRpYmxlJyAoY29tcGFyZV9naW1wbGVfY2FsbDo3ODkpCiAyMjMz NTAgICBmYWxzZSByZXR1cm5lZDogJ2RpZmZlcmVudCB0cmVlIHR5cGVzJyAo Y29tcGF0aWJsZV90eXBlc19wOjI2OSkKIDQyNzE2OCAgIGZhbHNlIHJldHVy bmVkOiAnY3RvciBwb2x5bW9ycGhpYyB0eXBlIG1pc21hdGNoJyAoZXF1YWxz X3dwYTo0NTIpCiA1MDc0OTUgICBmYWxzZSByZXR1cm5lZDogJ3R5cGVzIGFy ZSBub3QgY29tcGF0aWJsZScgKGNvbXBhdGlibGVfdHlwZXNfcDoyNzUpCiA1 Njc1OTYgICBmYWxzZSByZXR1cm5lZDogJ21lbW9yeSBvcGVyYW5kcyBhcmUg ZGlmZmVyZW50JyAoY29tcGFyZV9naW1wbGVfYXNzaWduOjg0NCkKIDYyODg0 NiAgIGZhbHNlIHJldHVybmVkOiAnb3B0aW1pemF0aW9uIGZsYWdzIGFyZSBk aWZmZXJlbnQnIChlcXVhbHNfd3BhOjQ4MSkKIDgxNTQ2NSAgIGZhbHNlIHJl dHVybmVkOiAnJyAoZXF1YWxzX3ByaXZhdGU6NzM3KQoxNTcwNzMyOCAgIGZh bHNlIHJldHVybmVkOiAnaW5saW5lIGF0dHJpYnV0ZXMgYXJlIGRpZmZlcmVu dCcgKGVxdWFsc193cGE6NDE5KQoxODg5MTE3OCAgIGZhbHNlIHJldHVybmVk OiAnVEhJUyBwb2ludGVyIE9EUiB0eXBlIG1pc21hdGNoJyAoZXF1YWxzX3dw YTo1MjcpCjE5MzExMTM3ICAgZmFsc2UgcmV0dXJuZWQ6ICd0eXBlcyBhcmUg bm90IHNhbWUgZm9yIE9EUicgKGNvbXBhdGlibGVfcG9seW1vcnBoaWNfdHlw ZXNfcDoyNjApCgpFeGVjdXRpb24gdGltZXMgKHNlY29uZHMpCiBwaGFzZSBz ZXR1cCAgICAgICAgICAgICA6ICAgMC4wMCAoIDAlKSB1c3IgICAwLjAwICgg MCUpIHN5cyAgIDAuMDAgKCAwJSkgd2FsbCAgICAxOTc4IGtCICggMCUpIGdn YwogcGhhc2Ugb3B0IGFuZCBnZW5lcmF0ZSAgOiAgOTYuNDMgKDQ1JSkgdXNy ICAgMi4xMyAoNDYlKSBzeXMgIDk4LjUyICg0NSUpIHdhbGwgMjQ5Nzc1MyBr QiAoMTIlKSBnZ2MKIHBoYXNlIHN0cmVhbSBpbiAgICAgICAgIDogMTIwLjEy ICg1NSUpIHVzciAgIDIuNTQgKDU0JSkgc3lzIDEyMi42MSAoNTUlKSB3YWxs MTg3MDA3NjYga0IgKDg4JSkgZ2djCiBjYWxsZ3JhcGggb3B0aW1pemF0aW9u ICA6ICAgMC44MSAoIDAlKSB1c3IgICAwLjAwICggMCUpIHN5cyAgIDAuODIg KCAwJSkgd2FsbCAgICAgIDE0IGtCICggMCUpIGdnYwogaXBhIGRlYWQgY29k ZSByZW1vdmFsICAgOiAgIDYuODUgKCAzJSkgdXNyICAgMC4wNCAoIDElKSBz eXMgICA2Ljc2ICggMyUpIHdhbGwgICAgICAgMCBrQiAoIDAlKSBnZ2MKIGlw YSB2aXJ0dWFsIGNhbGwgdGFyZ2V0IDogICA0LjA0ICggMiUpIHVzciAgIDAu MDcgKCAxJSkgc3lzICAgNC4wOCAoIDIlKSB3YWxsICAgICAgIDAga0IgKCAw JSkgZ2djCiBpcGEgZGV2aXJ0dWFsaXphdGlvbiAgICA6ICAgMC4zMCAoIDAl KSB1c3IgICAwLjAwICggMCUpIHN5cyAgIDAuMzMgKCAwJSkgd2FsbCAgIDM0 NjY2IGtCICggMCUpIGdnYwogaXBhIGNwICAgICAgICAgICAgICAgICAgOiAg IDUuNzAgKCAzJSkgdXNyICAgMC4zOCAoIDglKSBzeXMgICA2LjA4ICggMyUp IHdhbGwgIDkxOTIyNSBrQiAoIDQlKSBnZ2MKIGlwYSBpbmxpbmluZyBoZXVy aXN0aWNzIDogIDI3LjA1ICgxMiUpIHVzciAgIDAuNDAgKCA5JSkgc3lzICAy Ny42MSAoMTIlKSB3YWxsICA4MTE3ODQga0IgKCA0JSkgZ2djCiBpcGEgY29t ZGF0cyAgICAgICAgICAgICA6ICAgMC42MiAoIDAlKSB1c3IgICAwLjAwICgg MCUpIHN5cyAgIDAuNjIgKCAwJSkgd2FsbCAgICAgICAwIGtCICggMCUpIGdn YwogaXBhIGx0byBnaW1wbGUgaW4gICAgICAgOiAgIDUuNzQgKCAzJSkgdXNy ICAgMC45NSAoMjAlKSBzeXMgICA2LjY3ICggMyUpIHdhbGwgMTE2MTQyMiBr QiAoIDUlKSBnZ2MKIGlwYSBsdG8gZGVjbCBpbiAgICAgICAgIDogMTAzLjY2 ICg0OCUpIHVzciAgIDEuNjMgKDM1JSkgc3lzIDEwNS4yNSAoNDglKSB3YWxs MTY4MzAwMTMga0IgKDc5JSkgZ2djCiBpcGEgbHRvIGNvbnN0cnVjdG9ycyBp biA6ICAgMC40OSAoIDAlKSB1c3IgICAwLjA1ICggMSUpIHN5cyAgIDAuNTIg KCAwJSkgd2FsbCAgIDI3MzE1IGtCICggMCUpIGdnYwogaXBhIGx0byBjZ3Jh cGggSS9PICAgICAgOiAgIDIuMjAgKCAxJSkgdXNyICAgMC4yOSAoIDYlKSBz eXMgICAyLjQ4ICggMSUpIHdhbGwgIDk1NDUxNyBrQiAoIDUlKSBnZ2MKIGlw YSBsdG8gZGVjbCBtZXJnZSAgICAgIDogICA0LjEzICggMiUpIHVzciAgIDAu MDAgKCAwJSkgc3lzICAgNC4xMyAoIDIlKSB3YWxsICAgMTYzODMga0IgKCAw JSkgZ2djCiBpcGEgbHRvIGNncmFwaCBtZXJnZSAgICA6ICAgNS42NSAoIDMl KSB1c3IgICAwLjAxICggMCUpIHN5cyAgIDUuNjMgKCAzJSkgd2FsbCAgIDIx NzM4IGtCICggMCUpIGdnYwogd2hvcHIgd3BhICAgICAgICAgICAgICAgOiAg IDEuOTkgKCAxJSkgdXNyICAgMC4wMCAoIDAlKSBzeXMgICAyLjAxICggMSUp IHdhbGwgICAgICAgMiBrQiAoIDAlKSBnZ2MKIHdob3ByIHBhcnRpdGlvbmlu ZyAgICAgIDogICA1LjIzICggMiUpIHVzciAgIDAuMDEgKCAwJSkgc3lzICAg NS4yMiAoIDIlKSB3YWxsICAgIDg5MzYga0IgKCAwJSkgZ2djCiBpcGEgcmVm ZXJlbmNlICAgICAgICAgICA6ICAgMy41NyAoIDIlKSB1c3IgICAwLjAxICgg MCUpIHN5cyAgIDMuNTcgKCAyJSkgd2FsbCAgICAgICAwIGtCICggMCUpIGdn YwogaXBhIHByb2ZpbGUgICAgICAgICAgICAgOiAgIDAuNTAgKCAwJSkgdXNy ICAgMC4wMyAoIDElKSBzeXMgICAwLjUzICggMCUpIHdhbGwgICAgICAgMCBr QiAoIDAlKSBnZ2MKIGlwYSBwdXJlIGNvbnN0ICAgICAgICAgIDogICA0LjQz ICggMiUpIHVzciAgIDAuMDcgKCAxJSkgc3lzICAgNC40OSAoIDIlKSB3YWxs ICAgICAgIDAga0IgKCAwJSkgZ2djCiBpcGEgaWNmICAgICAgICAgICAgICAg ICA6ICAzMC40OSAoMTQlKSB1c3IgICAwLjI3ICggNiUpIHN5cyAgMzAuODIg KDE0JSkgd2FsbCAgIDMxODkzIGtCICggMCUpIGdnYwogdHJlZSBTU0EgcmV3 cml0ZSAgICAgICAgOiAgIDAuMjQgKCAwJSkgdXNyICAgMC4wOCAoIDIlKSBz eXMgICAwLjM4ICggMCUpIHdhbGwgICA0NzAwMCBrQiAoIDAlKSBnZ2MKIHRy ZWUgU1NBIG90aGVyICAgICAgICAgIDogICAwLjAwICggMCUpIHVzciAgIDAu MDAgKCAwJSkgc3lzICAgMC4wMSAoIDAlKSB3YWxsICAgICAgIDAga0IgKCAw JSkgZ2djCiB0cmVlIFNTQSBpbmNyZW1lbnRhbCAgICA6ICAgMC41OCAoIDAl KSB1c3IgICAwLjExICggMiUpIHN5cyAgIDAuNTIgKCAwJSkgd2FsbCAgIDMw NDUzIGtCICggMCUpIGdnYwogdHJlZSBvcGVyYW5kIHNjYW4gICAgICAgOiAg IDAuNDYgKCAwJSkgdXNyICAgMC4wOSAoIDIlKSBzeXMgICAwLjU3ICggMCUp IHdhbGwgIDMwMjU5OSBrQiAoIDElKSBnZ2MKIGRvbWluYW5jZSBmcm9udGll cnMgICAgIDogICAwLjAxICggMCUpIHVzciAgIDAuMDAgKCAwJSkgc3lzICAg MC4wMyAoIDAlKSB3YWxsICAgICAgIDAga0IgKCAwJSkgZ2djCiBkb21pbmFu Y2UgY29tcHV0YXRpb24gICA6ICAgMC4zNCAoIDAlKSB1c3IgICAwLjA2ICgg MSUpIHN5cyAgIDAuMzUgKCAwJSkgd2FsbCAgICAgICAwIGtCICggMCUpIGdn YwogdmFyY29uc3QgICAgICAgICAgICAgICAgOiAgIDAuMDMgKCAwJSkgdXNy ICAgMC4wNCAoIDElKSBzeXMgICAwLjA5ICggMCUpIHdhbGwgICAgICAgMCBr QiAoIDAlKSBnZ2MKIGxvb3AgaW5pdCAgICAgICAgICAgICAgIDogICAwLjAy ICggMCUpIHVzciAgIDAuMDAgKCAwJSkgc3lzICAgMC4wMiAoIDAlKSB3YWxs ICAgICA1NDYga0IgKCAwJSkgZ2djCiBsb29wIGZpbmkgICAgICAgICAgICAg ICA6ICAgMC4xMiAoIDAlKSB1c3IgICAwLjAwICggMCUpIHN5cyAgIDAuMTUg KCAwJSkgd2FsbCAgICAgICAwIGtCICggMCUpIGdnYwogdW5hY2NvdW50ZWQg dG9kbyAgICAgICAgOiAgIDEuMjMgKCAxJSkgdXNyICAgMC4wMCAoIDAlKSBz eXMgICAxLjIzICggMSUpIHdhbGwgICAgICAgMCBrQiAoIDAlKSBnZ2MKIFRP VEFMICAgICAgICAgICAgICAgICA6IDIxNi41NSAgICAgICAgICAgICA0LjY3 ICAgICAgICAgICAyMjEuMTMgICAgICAgICAgIDIxMjAwNDk4IGtCCgo= --------------000009070306090103090800 Content-Type: text/plain; charset=UTF-8; name="chrome-icf-hash-enhancement.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="chrome-icf-hash-enhancement.txt" Content-length: 9427 ICAgICAgMSAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29tcGFyZV9waGlfbm9k ZToxNTM0KQogICAgICAyICAgZmFsc2UgcmV0dXJuZWQ6ICdvcGVyYXRvciBu ZXcgZmxhZ3MgYXJlIGRpZmZlcmVudCcgKGVxdWFsc193cGE6NDQyKQogICAg ICA0ICAgZmFsc2UgcmV0dXJuZWQ6ICcnIChjb21wYXJlX29wZXJhbmQ6NDkw KQogICAgICA0ICAgZmFsc2UgcmV0dXJuZWQ6ICdkaWZmZXJlbnQgZGVwZW5k ZW5jZSBpbmZvJyAoY29tcGFyZV9tZW1vcnlfb3BlcmFuZDozNTEpCiAgICAg IDUgICBmYWxzZSByZXR1cm5lZDogJ2FsaWdubWVudCBtaXNtYXRjaCcgKGVx dWFsc193cGE6MTYzOCkKICAgICAxMSAgIGZhbHNlIHJldHVybmVkOiAnVFJF RV9DT0RFIG1pc21hdGNoJyAoZXF1YWxzOjE3MzMpCiAgICAgMTggICBmYWxz ZSByZXR1cm5lZDogJ3N3aXRjaCBsYWJlbF9leHBycyBhcmUgZGlmZmVyZW50 JyAoY29tcGFyZV9naW1wbGVfc3dpdGNoOjk1MCkKICAgICA0MiAgIGZhbHNl IHJldHVybmVkOiAnSU5URUdFUl9DU1QgcHJlY2lzaW9uIG1pc21hdGNoJyAo ZXF1YWxzOjE4MTYpCiAgICAgNDkgICBmYWxzZSByZXR1cm5lZDogJ0FTTSBz dHJpbmdzIGFyZSBkaWZmZXJlbnQnIChjb21wYXJlX2dpbXBsZV9hc206MTAy NykKICAgICA1NyAgIGZhbHNlIHJldHVybmVkOiAnY2FzZSBoaWdoIHZhbHVl cyBhcmUgZGlmZmVyZW50JyAoY29tcGFyZV9naW1wbGVfc3dpdGNoOjk0MSkK ICAgICA3NiAgIGZhbHNlIHJldHVybmVkOiAnb25lIHR5cGUgaXMgbm90IHBv bHltb3JwaGljJyAoY29tcGF0aWJsZV9wb2x5bW9ycGhpY190eXBlc19wOjI1 OCkKICAgIDEyNCAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29tcGFyZV9vcGVy YW5kOjQ5MykKICAgIDE0NSAgIGZhbHNlIHJldHVybmVkOiAnYW8gYWxpYXMg c2V0cyBhcmUgZGlmZmVyZW50JyAoY29tcGFyZV9tZW1vcnlfb3BlcmFuZDoz MTYpCiAgICAxNzkgICBmYWxzZSByZXR1cm5lZDogJ2RpZmZlcmVudCBvcGVy YW5kIHZvbGF0aWxpdHknIChjb21wYXJlX21lbW9yeV9vcGVyYW5kOjMxMikK ICAgIDE5NSAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29tcGFyZV9waGlfbm9k ZToxNTU3KQogICAgMTk2ICAgZmFsc2UgcmV0dXJuZWQ6ICdQSEkgbm9kZSBj b21wYXJpc29uIHJldHVybnMgZmFsc2UnIChlcXVhbHNfcHJpdmF0ZTo3OTQp CiAgICAzODIgICBmYWxzZSByZXR1cm5lZDogJ0RFQ0xfQ1hYX0RFU1RSVUNU T1IgbWlzbWF0Y2gnIChlcXVhbHNfd3BhOjQ1NikKICAgIDM5OSAgIGZhbHNl IHJldHVybmVkOiAndmFyaWFibGVzIHR5cGVzIGFyZSBkaWZmZXJlbnQnIChl cXVhbHM6MTcwNCkKICAgIDQ0NyAgIGZhbHNlIHJldHVybmVkOiAnVW5rbm93 biBUUkVFIGNvZGUgcmVhY2hlZCcgKGNvbXBhcmVfb3BlcmFuZDo1NzIpCiAg ICA0NzcgICBmYWxzZSByZXR1cm5lZDogJ0RlY2xhcmF0aW9uIG1pc21hdGNo JyAoZXF1YWxzOjE4MTIpCiAgICA0NzggICBmYWxzZSByZXR1cm5lZDogJ2Nh c2UgbG93IHZhbHVlcyBhcmUgZGlmZmVyZW50JyAoY29tcGFyZV9naW1wbGVf c3dpdGNoOjkzNSkKICAgIDU1OCAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29t cGFyZV9vcGVyYW5kOjQ3MikKICAgIDY5NCAgIGZhbHNlIHJldHVybmVkOiAn ZGlmZmVyZW50IG51bWJlciBvZiBhcmd1bWVudHMnIChlcXVhbHNfd3BhOjQy NykKICAgIDgzNiAgIGZhbHNlIHJldHVybmVkOiAnY3RvciBwb2x5bW9ycGhp YyB0eXBlIG1pc21hdGNoJyAoZXF1YWxzX3dwYTo0NzIpCiAgICA5MTUgICBm YWxzZSByZXR1cm5lZDogJ21lbW9yeSBvcGVyYW5kcyBhcmUgZGlmZmVyZW50 JyAoY29tcGFyZV9naW1wbGVfY2FsbDo4MDUpCiAgIDE0NjIgICBmYWxzZSBy ZXR1cm5lZDogJ0RFQ0xfRElTUkVHQVJEX0lOTElORV9MSU1JVFMgYXJlIGRp ZmZlcmVudCcgKGVxdWFsc193cGE6NDM2KQogICAyMDEyICAgZmFsc2UgcmV0 dXJuZWQ6ICdNRVRIT0RfVFlQRSBhbmQgRlVOQ1RJT05fVFlQRSBtaXNtYXRj aCcgKGVxdWFsc193cGE6NTQzKQogICAyMTMyICAgZmFsc2UgcmV0dXJuZWQ6 ICdERUNMX0NYWF9DT05TVFJVQ1RPUiBtaXNtYXRjaCcgKGVxdWFsc193cGE6 NDUzKQogICAyOTM3ICAgZmFsc2UgcmV0dXJuZWQ6ICdkaWZmZXJlbnQgYWNj ZXNzIGFsaWdubWVudCcgKGNvbXBhcmVfbWVtb3J5X29wZXJhbmQ6MzM0KQog ICAzMjkxICAgZmFsc2UgcmV0dXJuZWQ6ICcnIChjb21wYXJlX29wZXJhbmQ6 NDM3KQogICA0NDQ2ICAgZmFsc2UgcmV0dXJuZWQ6ICdkZWNsX29yX3R5cGUg ZmxhZ3MgYXJlIGRpZmZlcmVudCcgKGVxdWFsc193cGE6NDU5KQogICA0NDk4 ICAgZmFsc2UgcmV0dXJuZWQ6ICdyZXN1bHQgdHlwZXMgYXJlIGRpZmZlcmVu dCcgKGVxdWFsc193cGE6NTA3KQogICA2MTc2ICAgZmFsc2UgcmV0dXJuZWQ6 ICdhbGlhcyBzZXRzIGFyZSBkaWZmZXJlbnQnIChjb21wYXRpYmxlX3R5cGVz X3A6Mjc4KQogIDEwMTc1ICAgZmFsc2UgcmV0dXJuZWQ6ICcnIChlcXVhbHNf cHJpdmF0ZTo3MzkpCiAgMTA5NzUgICBmYWxzZSByZXR1cm5lZDogJ09CSl9U WVBFX1JFRiBPVFIgdHlwZSBtaXNtYXRjaCcgKGNvbXBhcmVfb3BlcmFuZDo1 MjMpCiAgMTEyNzEgICBmYWxzZSByZXR1cm5lZDogJycgKGVxdWFsc19wcml2 YXRlOjcxNCkKICAxMTQ3MiAgIGZhbHNlIHJldHVybmVkOiAnJyAoY29tcGFy ZV9naW1wbGVfY2FsbDo3NjcpCiAgMTYzMjcgICBmYWxzZSByZXR1cm5lZDog J3ZpcnR1YWwgb3IgZmluYWwgZmxhZyBtaXNtYXRjaCcgKGVxdWFsc193cGE6 MTY3OSkKICAzMDg3MSAgIGZhbHNlIHJldHVybmVkOiAnb3B0aW1pemF0aW9u IGZsYWdzIGFyZSBkaWZmZXJlbnQnIChlcXVhbHNfd3BhOjUwMSkKICAzMjIx MCAgIGZhbHNlIHJldHVybmVkOiAnZGlmZmVyZW50IHJlZmVyZW5jZXMnIChj b21wYXJlX2NncmFwaF9yZWZlcmVuY2VzOjM5NCkKICA2MTg0MyAgIGZhbHNl IHJldHVybmVkOiAnVEhJUyBwb2ludGVyIE9EUiB0eXBlIG1pc21hdGNoJyAo ZXF1YWxzX3dwYTo1NDcpCiAgNjI2MDMgICBmYWxzZSByZXR1cm5lZDogJ3R5 cGVzIGFyZSBub3Qgc2FtZSBmb3IgT0RSJyAoY29tcGF0aWJsZV9wb2x5bW9y cGhpY190eXBlc19wOjI2MCkKICA2NTQ3MSAgIGZhbHNlIHJldHVybmVkOiAn YXJndW1lbnQgdHlwZSBpcyBkaWZmZXJlbnQnIChlcXVhbHNfd3BhOjUxOCkK ICA3MjExMyAgIGZhbHNlIHJldHVybmVkOiAnZGlmZmVyZW50IHRyZWUgdHlw ZXMnIChjb21wYXRpYmxlX3R5cGVzX3A6MjY5KQogIDgyMjk5ICAgZmFsc2Ug cmV0dXJuZWQ6ICdyZWZlcmVuY2VzIHRvIHZpcnR1YWwgdGFibGVzIGNhbiBu b3QgYmUgbWVyZ2VkJyAoY29tcGFyZV9jZ3JhcGhfcmVmZXJlbmNlczozODAp CiAxNDk4NDcgICBmYWxzZSByZXR1cm5lZDogJ2lubGluZSBhdHRyaWJ1dGVz IGFyZSBkaWZmZXJlbnQnIChlcXVhbHNfd3BhOjQzOSkKIDIwOTYwNiAgIGZh bHNlIHJldHVybmVkOiAnY2FsbCBmdW5jdGlvbiB0eXBlcyBhcmUgbm90IGNv bXBhdGlibGUnIChjb21wYXJlX2dpbXBsZV9jYWxsOjc4OSkKIDQ4OTAxOCAg IGZhbHNlIHJldHVybmVkOiAndHlwZXMgYXJlIG5vdCBjb21wYXRpYmxlJyAo Y29tcGF0aWJsZV90eXBlc19wOjI3NSkKIDU0MDg0NyAgIGZhbHNlIHJldHVy bmVkOiAnbWVtb3J5IG9wZXJhbmRzIGFyZSBkaWZmZXJlbnQnIChjb21wYXJl X2dpbXBsZV9hc3NpZ246ODQ0KQogNzY1NjIwICAgZmFsc2UgcmV0dXJuZWQ6 ICcnIChlcXVhbHNfcHJpdmF0ZTo3NTcpCgpFcXVhbCBzeW1ib2xzOiA4NDU3 MQoKRXhlY3V0aW9uIHRpbWVzIChzZWNvbmRzKQogcGhhc2Ugc2V0dXAgICAg ICAgICAgICAgOiAgIDAuMDAgKCAwJSkgdXNyICAgMC4wMCAoIDAlKSBzeXMg ICAwLjAwICggMCUpIHdhbGwgICAgMTk3OCBrQiAoIDAlKSBnZ2MKIHBoYXNl IG9wdCBhbmQgZ2VuZXJhdGUgIDogIDcwLjA5ICg0MyUpIHVzciAgIDEuNTQg KDQxJSkgc3lzICA3MS42MCAoNDMlKSB3YWxsIDI0NjM3MTkga0IgKDEyJSkg Z2djCiBwaGFzZSBzdHJlYW0gaW4gICAgICAgICA6ICA5NC4wNCAoNTclKSB1 c3IgICAyLjI2ICg1OSUpIHN5cyAgOTYuNTMgKDU3JSkgd2FsbDE4NzAwNzY2 IGtCICg4OCUpIGdnYwogY2FsbGdyYXBoIG9wdGltaXphdGlvbiAgOiAgIDAu NzMgKCAwJSkgdXNyICAgMC4wMCAoIDAlKSBzeXMgICAwLjczICggMCUpIHdh bGwgICAgICAxNCBrQiAoIDAlKSBnZ2MKIGlwYSBkZWFkIGNvZGUgcmVtb3Zh bCAgIDogICA2LjA3ICggNCUpIHVzciAgIDAuMDIgKCAxJSkgc3lzICAgNS44 NSAoIDMlKSB3YWxsICAgICAgIDAga0IgKCAwJSkgZ2djCiBpcGEgdmlydHVh bCBjYWxsIHRhcmdldCA6ICAgMy4wNSAoIDIlKSB1c3IgICAwLjA1ICggMSUp IHN5cyAgIDMuNDQgKCAyJSkgd2FsbCAgICAgICAwIGtCICggMCUpIGdnYwog aXBhIGRldmlydHVhbGl6YXRpb24gICAgOiAgIDAuMjUgKCAwJSkgdXNyICAg MC4wMCAoIDAlKSBzeXMgICAwLjI0ICggMCUpIHdhbGwgICAzNDY2NiBrQiAo IDAlKSBnZ2MKIGlwYSBjcCAgICAgICAgICAgICAgICAgIDogICA0Ljg2ICgg MyUpIHVzciAgIDAuMjUgKCA3JSkgc3lzICAgNS4wOCAoIDMlKSB3YWxsICA5 MTkyMjUga0IgKCA0JSkgZ2djCiBpcGEgaW5saW5pbmcgaGV1cmlzdGljcyA6 ICAyMi4yNCAoMTQlKSB1c3IgICAwLjI1ICggNyUpIHN5cyAgMjIuNDQgKDEz JSkgd2FsbCAgODExNzcwIGtCICggNCUpIGdnYwogaXBhIGNvbWRhdHMgICAg ICAgICAgICAgOiAgIDAuNTUgKCAwJSkgdXNyICAgMC4wMCAoIDAlKSBzeXMg ICAwLjU2ICggMCUpIHdhbGwgICAgICAgMCBrQiAoIDAlKSBnZ2MKIGlwYSBs dG8gZ2ltcGxlIGluICAgICAgIDogICA0LjI3ICggMyUpIHVzciAgIDAuNzAg KDE4JSkgc3lzICAgNS4wMSAoIDMlKSB3YWxsIDExMzYwOTYga0IgKCA1JSkg Z2djCiBpcGEgbHRvIGRlY2wgaW4gICAgICAgICA6ICA4MC4zMCAoNDklKSB1 c3IgICAxLjQ0ICgzOCUpIHN5cyAgODEuOTcgKDQ5JSkgd2FsbDE2ODMwMDEz IGtCICg4MCUpIGdnYwogaXBhIGx0byBjb25zdHJ1Y3RvcnMgaW4gOiAgIDAu MzUgKCAwJSkgdXNyICAgMC4wNiAoIDIlKSBzeXMgICAwLjM4ICggMCUpIHdh bGwgICAyNzMxNSBrQiAoIDAlKSBnZ2MKIGlwYSBsdG8gY2dyYXBoIEkvTyAg ICAgIDogICAxLjUxICggMSUpIHVzciAgIDAuMjcgKCA3JSkgc3lzICAgMS43 OCAoIDElKSB3YWxsICA5NTQ1MTcga0IgKCA1JSkgZ2djCiBpcGEgbHRvIGRl Y2wgbWVyZ2UgICAgICA6ICAgMy41NiAoIDIlKSB1c3IgICAwLjAwICggMCUp IHN5cyAgIDMuNTYgKCAyJSkgd2FsbCAgIDE2MzgzIGtCICggMCUpIGdnYwog aXBhIGx0byBjZ3JhcGggbWVyZ2UgICAgOiAgIDQuODkgKCAzJSkgdXNyICAg MC4wMCAoIDAlKSBzeXMgICA0Ljg5ICggMyUpIHdhbGwgICAyMTczOCBrQiAo IDAlKSBnZ2MKIHdob3ByIHdwYSAgICAgICAgICAgICAgIDogICAxLjgzICgg MSUpIHVzciAgIDAuMDAgKCAwJSkgc3lzICAgMS44NyAoIDElKSB3YWxsICAg ICAgIDIga0IgKCAwJSkgZ2djCiB3aG9wciBwYXJ0aXRpb25pbmcgICAgICA6 ICAgNC44NyAoIDMlKSB1c3IgICAwLjAxICggMCUpIHN5cyAgIDQuODcgKCAz JSkgd2FsbCAgICA4OTM2IGtCICggMCUpIGdnYwogaXBhIHJlZmVyZW5jZSAg ICAgICAgICAgOiAgIDIuNzcgKCAyJSkgdXNyICAgMC4wMSAoIDAlKSBzeXMg ICAyLjc4ICggMiUpIHdhbGwgICAgICAgMCBrQiAoIDAlKSBnZ2MKIGlwYSBw cm9maWxlICAgICAgICAgICAgIDogICAwLjQ5ICggMCUpIHVzciAgIDAuMDMg KCAxJSkgc3lzICAgMC41NCAoIDAlKSB3YWxsICAgICAgIDAga0IgKCAwJSkg Z2djCiBpcGEgcHVyZSBjb25zdCAgICAgICAgICA6ICAgMy4yMyAoIDIlKSB1 c3IgICAwLjA1ICggMSUpIHN5cyAgIDMuMjggKCAyJSkgd2FsbCAgICAgICAw IGtCICggMCUpIGdnYwogaXBhIGljZiAgICAgICAgICAgICAgICAgOiAgMTUu NTkgKCA5JSkgdXNyICAgMC4yOSAoIDglKSBzeXMgIDE1LjcxICggOSUpIHdh bGwgICAzMTg5NyBrQiAoIDAlKSBnZ2MKIHRyZWUgU1NBIHJld3JpdGUgICAg ICAgIDogICAwLjMwICggMCUpIHVzciAgIDAuMDYgKCAyJSkgc3lzICAgMC4y NiAoIDAlKSB3YWxsICAgNDU4MDEga0IgKCAwJSkgZ2djCiB0cmVlIFNTQSBp bmNyZW1lbnRhbCAgICA6ICAgMC4zNyAoIDAlKSB1c3IgICAwLjA3ICggMiUp IHN5cyAgIDAuNTQgKCAwJSkgd2FsbCAgIDI5NDUyIGtCICggMCUpIGdnYwog dHJlZSBvcGVyYW5kIHNjYW4gICAgICAgOiAgIDAuMzEgKCAwJSkgdXNyICAg MC4wOSAoIDIlKSBzeXMgICAwLjUxICggMCUpIHdhbGwgIDI5NjEwMyBrQiAo IDElKSBnZ2MKIGRvbWluYW5jZSBmcm9udGllcnMgICAgIDogICAwLjAxICgg MCUpIHVzciAgIDAuMDAgKCAwJSkgc3lzICAgMC4wMiAoIDAlKSB3YWxsICAg ICAgIDAga0IgKCAwJSkgZ2djCiBkb21pbmFuY2UgY29tcHV0YXRpb24gICA6 ICAgMC4zMCAoIDAlKSB1c3IgICAwLjA0ICggMSUpIHN5cyAgIDAuMzEgKCAw JSkgd2FsbCAgICAgICAwIGtCICggMCUpIGdnYwogdmFyY29uc3QgICAgICAg ICAgICAgICAgOiAgIDAuMDQgKCAwJSkgdXNyICAgMC4wMSAoIDAlKSBzeXMg ICAwLjA3ICggMCUpIHdhbGwgICAgICAgMCBrQiAoIDAlKSBnZ2MKIGxvb3Ag aW5pdCAgICAgICAgICAgICAgIDogICAwLjAxICggMCUpIHVzciAgIDAuMDAg KCAwJSkgc3lzICAgMC4wMCAoIDAlKSB3YWxsICAgICA1NDYga0IgKCAwJSkg Z2djCiBsb29wIGZpbmkgICAgICAgICAgICAgICA6ICAgMC4xMiAoIDAlKSB1 c3IgICAwLjAwICggMCUpIHN5cyAgIDAuMTQgKCAwJSkgd2FsbCAgICAgICAw IGtCICggMCUpIGdnYwogdW5hY2NvdW50ZWQgdG9kbyAgICAgICAgOiAgIDEu MjAgKCAxJSkgdXNyICAgMC4wMCAoIDAlKSBzeXMgICAxLjE1ICggMSUpIHdh bGwgICAgICAgMCBrQiAoIDAlKSBnZ2MKIFRPVEFMICAgICAgICAgICAgICAg ICA6IDE2NC4xMyAgICAgICAgICAgICAzLjgwICAgICAgICAgICAxNjguMTMg ICAgICAgICAgIDIxMTY2NDY1IGtCCgoK --------------000009070306090103090800 Content-Type: text/x-patch; name="0001-IPA-ICF-enhance-hash-value-calculated-in-TU.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-IPA-ICF-enhance-hash-value-calculated-in-TU.patch" Content-length: 11291 >From 1943aa293c1ff7622cf9090a834d7bd9dfaaf086 Mon Sep 17 00:00:00 2001 From: mliska Date: Mon, 23 Mar 2015 15:36:11 +0100 Subject: [PATCH] IPA ICF: enhance hash value calculated in TU gcc/ChangeLog: 2015-03-23 Jan Hubicka Martin Liska * ipa-icf-gimple.h (return_with_result): Add missing colon to dump. * ipa-icf.c (sem_function::get_hash): Hash new declaration properties. (sem_item::add_type): New function. (sem_function::hash_stmt): Add TREE_TYPE of gimple_op. (sem_function::compare_polymorphic_p): Do not consider indirect calls. (sem_item_optimizer::update_hash_by_addr_refs): Add ODR type to hash. (sem_function::equals_wpa): Fix typo. * ipa-icf.h (sem_item::add_type): New function. (symbol_compare_hashmap_traits): Replace hashing of pointer with symbol order. --- gcc/ipa-icf-gimple.h | 2 +- gcc/ipa-icf.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++----- gcc/ipa-icf.h | 10 +++- 3 files changed, 154 insertions(+), 18 deletions(-) diff --git a/gcc/ipa-icf-gimple.h b/gcc/ipa-icf-gimple.h index 53a1bfe..6a9cbed 100644 --- a/gcc/ipa-icf-gimple.h +++ b/gcc/ipa-icf-gimple.h @@ -75,7 +75,7 @@ static inline bool return_with_result (bool result, const char *func, unsigned int line) { if (!result && dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, " false returned (%s:%u)\n", func, line); + fprintf (dump_file, " false returned: (%s:%u)\n", func, line); return result; } diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index 48a7d3d..ad868e1 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -128,6 +128,11 @@ using namespace ipa_icf_gimple; namespace ipa_icf { +/* Initialization and computation of symtab node hash, there data + are propagated later on. */ + +static sem_item_optimizer *optimizer = NULL; + /* Constructor. */ symbol_compare_collection::symbol_compare_collection (symtab_node *node) @@ -328,6 +333,21 @@ sem_function::get_hash (void) for (unsigned i = 0; i < bb_sizes.length (); i++) hstate.add_int (bb_sizes[i]); + + /* Add common features of declaration itself. */ + if (DECL_FUNCTION_SPECIFIC_TARGET (decl)) + hstate.add_wide_int + (cl_target_option_hash + (TREE_TARGET_OPTION (DECL_FUNCTION_SPECIFIC_TARGET (decl)))); + if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)) + (cl_optimization_hash + (TREE_OPTIMIZATION (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)))); + hstate.add_flag (DECL_DISREGARD_INLINE_LIMITS (decl)); + hstate.add_flag (DECL_DECLARED_INLINE_P (decl)); + hstate.add_flag (DECL_IS_OPERATOR_NEW (decl)); + hstate.add_flag (DECL_CXX_CONSTRUCTOR_P (decl)); + hstate.add_flag (DECL_CXX_DESTRUCTOR_P (decl)); + hash = hstate.end (); } @@ -430,10 +450,10 @@ sem_function::equals_wpa (sem_item *item, return return_false_with_msg ("no stack limit attributes are different"); if (DECL_CXX_CONSTRUCTOR_P (decl) != DECL_CXX_CONSTRUCTOR_P (item->decl)) - return return_false_with_msg ("DELC_CXX_CONSTRUCTOR mismatch"); + return return_false_with_msg ("DECL_CXX_CONSTRUCTOR mismatch"); if (DECL_CXX_DESTRUCTOR_P (decl) != DECL_CXX_DESTRUCTOR_P (item->decl)) - return return_false_with_msg ("DELC_CXX_DESTRUCTOR mismatch"); + return return_false_with_msg ("DECL_CXX_DESTRUCTOR mismatch"); if (flags_from_decl_or_type (decl) != flags_from_decl_or_type (item->decl)) return return_false_with_msg ("decl_or_type flags are different"); @@ -1283,6 +1303,80 @@ sem_item::add_expr (const_tree exp, inchash::hash &hstate) } } +/* Accumulate to HSTATE a hash of type t. + TYpes that may end up being compatible after LTO type merging needs to have + the same hash. */ + +void +sem_item::add_type (const_tree type, inchash::hash &hstate) +{ + if (type == NULL_TREE) + { + hstate.merge_hash (0); + return; + } + + type = TYPE_MAIN_VARIANT (type); + if (TYPE_CANONICAL (type)) + type = TYPE_CANONICAL (type); + + if (!AGGREGATE_TYPE_P (type)) + hstate.add_int (TYPE_MODE (type)); + + if (TREE_CODE (type) == COMPLEX_TYPE) + { + hstate.add_int (COMPLEX_TYPE); + sem_item::add_type (TREE_TYPE (type), hstate); + } + else if (INTEGRAL_TYPE_P (type)) + { + hstate.add_int (INTEGER_TYPE); + hstate.add_flag (TYPE_UNSIGNED (type)); + hstate.add_int (TYPE_PRECISION (type)); + } + else if (VECTOR_TYPE_P (type)) + { + hstate.add_int (VECTOR_TYPE); + hstate.add_int (TYPE_PRECISION (type)); + sem_item::add_type (TREE_TYPE (type), hstate); + } + else if (TREE_CODE (type) == ARRAY_TYPE) + { + hstate.add_int (ARRAY_TYPE); + /* Do not hash size, so complete and incomplete types can match. */ + sem_item::add_type (TREE_TYPE (type), hstate); + } + else if (RECORD_OR_UNION_TYPE_P (type)) + { + hashval_t *val = optimizer->m_type_hash_cache.get (type); + + if (!val) + { + inchash::hash hstate2; + unsigned nf; + tree f; + hashval_t hash; + + hstate2.add_int (RECORD_TYPE); + gcc_assert (COMPLETE_TYPE_P (type)); + + for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f)) + if (TREE_CODE (f) == FIELD_DECL) + { + add_type (TREE_TYPE (f), hstate2); + nf++; + } + + hstate2.add_int (nf); + hash = hstate2.end (); + hstate.add_wide_int (hash); + optimizer->m_type_hash_cache.put (type, hash); + } + else + hstate.add_wide_int (*val); + } +} + /* Improve accumulated hash for HSTATE based on a gimple statement STMT. */ void @@ -1294,16 +1388,27 @@ sem_function::hash_stmt (gimple stmt, inchash::hash &hstate) switch (code) { + case GIMPLE_SWITCH: + add_expr (gimple_switch_index (as_a (stmt)), hstate); + break; case GIMPLE_ASSIGN: + hstate.add_int (gimple_assign_rhs_code (stmt)); if (commutative_tree_code (gimple_assign_rhs_code (stmt)) || commutative_ternary_tree_code (gimple_assign_rhs_code (stmt))) { inchash::hash one, two; add_expr (gimple_assign_rhs1 (stmt), one); + add_type (TREE_TYPE (gimple_assign_rhs1 (stmt)), one); add_expr (gimple_assign_rhs2 (stmt), two); hstate.add_commutative (one, two); + if (commutative_ternary_tree_code (gimple_assign_rhs_code (stmt))) + { + add_expr (gimple_assign_rhs3 (stmt), hstate); + add_type (TREE_TYPE (gimple_assign_rhs3 (stmt)), hstate); + } add_expr (gimple_assign_lhs (stmt), hstate); + add_type (TREE_TYPE (gimple_assign_lhs (stmt)), two); break; } /* ... fall through ... */ @@ -1314,7 +1419,11 @@ sem_function::hash_stmt (gimple stmt, inchash::hash &hstate) case GIMPLE_RETURN: /* All these statements are equivalent if their operands are. */ for (unsigned i = 0; i < gimple_num_ops (stmt); ++i) - add_expr (gimple_op (stmt, i), hstate); + { + add_expr (gimple_op (stmt, i), hstate); + if (gimple_op (stmt, i)) + add_type (TREE_TYPE (gimple_op (stmt, i)), hstate); + } default: break; } @@ -1328,14 +1437,13 @@ sem_function::compare_polymorphic_p (void) { struct cgraph_edge *e; - if (!opt_for_fn (decl, flag_devirtualize)) + if (!opt_for_fn (get_node ()->decl, flag_devirtualize)) return false; - if (get_node ()->indirect_calls != NULL - || m_compared_func->get_node ()->indirect_calls != NULL) + if (get_node ()->indirect_calls != NULL) return true; /* TODO: We can do simple propagation determining what calls may lead to a polymorphic call. */ - for (e = m_compared_func->get_node ()->callees; e; e = e->next_callee) + for (e = get_node ()->callees; e; e = e->next_callee) if (e->callee->definition && opt_for_fn (e->callee->decl, flag_devirtualize)) return true; @@ -2386,9 +2494,38 @@ sem_item_optimizer::add_item_to_class (congruence_class *cls, sem_item *item) void sem_item_optimizer::update_hash_by_addr_refs () { - /* First, append to hash sensitive references. */ + /* First, append to hash sensitive references and class type if it need to + be matched for ODR. */ for (unsigned i = 0; i < m_items.length (); i++) - m_items[i]->update_hash_by_addr_refs (m_symtab_node_map); + { + m_items[i]->update_hash_by_addr_refs (m_symtab_node_map); + if (m_items[i]->type == FUNC) + { + if (TREE_CODE (TREE_TYPE (m_items[i]->decl)) == METHOD_TYPE + && contains_polymorphic_type_p + (method_class_type (TREE_TYPE (m_items[i]->decl))) + && (DECL_CXX_CONSTRUCTOR_P (m_items[i]->decl) + || ((!flag_ipa_cp + || ipa_is_param_used ( + IPA_NODE_REF + (dyn_cast (m_items[i]->node)), 0)) + && static_cast (m_items[i]) + ->compare_polymorphic_p ()))) + { + tree class_type + = method_class_type (TREE_TYPE (m_items[i]->decl)); + inchash::hash hstate (m_items[i]->hash); + + if (TYPE_NAME (class_type) + && DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (class_type))) + hstate.add_wide_int + (IDENTIFIER_HASH_VALUE + (DECL_ASSEMBLER_NAME (TYPE_NAME (class_type)))); + + m_items[i]->hash = hstate.end (); + } + } + } /* Once all symbols have enhanced hash value, we can append hash values of symbols that are seen by IPA ICF and are @@ -3123,11 +3260,6 @@ congruence_class::is_class_used (void) return false; } -/* Initialization and computation of symtab node hash, there data - are propagated later on. */ - -static sem_item_optimizer *optimizer = NULL; - /* Generate pass summary for IPA ICF pass. */ static void diff --git a/gcc/ipa-icf.h b/gcc/ipa-icf.h index cd21cac..7eb9f27 100644 --- a/gcc/ipa-icf.h +++ b/gcc/ipa-icf.h @@ -96,12 +96,12 @@ struct symbol_compare_hashmap_traits: default_hashmap_traits hstate.add_int (v->m_references.length ()); for (unsigned i = 0; i < v->m_references.length (); i++) - hstate.add_ptr (v->m_references[i]->ultimate_alias_target ()); + hstate.add_int (v->m_references[i]->ultimate_alias_target ()->order); hstate.add_int (v->m_interposables.length ()); for (unsigned i = 0; i < v->m_interposables.length (); i++) - hstate.add_ptr (v->m_interposables[i]->ultimate_alias_target ()); + hstate.add_int (v->m_interposables[i]->ultimate_alias_target ()->order); return hstate.end (); } @@ -243,8 +243,10 @@ public: protected: /* Cached, once calculated hash for the item. */ - /* Accumulate to HSTATE a hash of constructor expression EXP. */ + /* Accumulate to HSTATE a hash of expression EXP. */ static void add_expr (const_tree exp, inchash::hash &hstate); + /* Accumulate to HSTATE a hash of type T. */ + static void add_type (const_tree t, inchash::hash &hstate); /* For a given symbol table nodes N1 and N2, we check that FUNCTION_DECLs point to a same function. Comparison can be skipped if IGNORED_NODES @@ -505,6 +507,8 @@ public: congruence_class_group *get_group_by_hash (hashval_t hash, sem_item_type type); + /* Because types can be arbitrarily large, avoid quadratic bottleneck. */ + hash_map m_type_hash_cache; private: /* For each semantic item, append hash values of references. */ -- 2.1.4 --------------000009070306090103090800--