From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10239 invoked by alias); 24 Oct 2014 09:35:18 -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 10226 invoked by uid 89); 24 Oct 2014 09:35:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00 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; Fri, 24 Oct 2014 09:35:16 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 66118AAF3; Fri, 24 Oct 2014 09:35:13 +0000 (UTC) Message-ID: <544A1D50.5080200@suse.cz> Date: Fri, 24 Oct 2014 09:44:00 -0000 From: =?UTF-8?B?TWFydGluIExpxaFrYQ==?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.1.0 MIME-Version: 1.0 To: "gcc-patch >> GCC Patches" CC: "hubi >> Jan Hubicka" Subject: [PATCH] Fix for PR63595 Content-Type: multipart/mixed; boundary="------------030008010009070003060408" X-IsSubscribed: yes X-SW-Source: 2014-10/txt/msg02505.txt.bz2 This is a multi-part message in MIME format. --------------030008010009070003060408 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 171 Hello. Following patch contains addition of PHI result comparison in IPA ICF. Boostrap works on x86_64-linux-pc, no regression observed. Ready for trunk? Thanks, Martin --------------030008010009070003060408 Content-Type: text/plain; charset=UTF-8; name="PR63595.changelog" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="PR63595.changelog" Content-length: 334 Z2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoyMDE0LTEwLTI0ICBNYXJ0aW4g TGlza2EgIDxtbGlza2FAc3VzZS5jej4KCgkqIGdjYy5kZy9pcGEvcHI2MzU5 NS5jOiBOZXcgdGVzdC4KCgpnY2MvQ2hhbmdlTG9nOgoKMjAxNC0xMC0yNCAg TWFydGluIExpc2thICA8bWxpc2thQHN1c2UuY3o+CgoJKiBpcGEtaWNmLmMg KHNlbV9mdW5jdGlvbjo6Y29tcGFyZV9waGlfbm9kZSk6IFBISSByZXN1bHQg Y29tcGFyaXNvbgoJYWRkZWQuCg== --------------030008010009070003060408 Content-Type: text/x-patch; name="PR63595.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="PR63595.patch" Content-length: 3260 diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index d1238a4..7456fec 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -869,6 +869,12 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2) phi1 = gsi_stmt (si1); phi2 = gsi_stmt (si2); + tree phi_result1 = gimple_phi_result (phi1); + tree phi_result2 = gimple_phi_result (phi2); + + if (!m_checker->compare_operand (phi_result1, phi_result2)) + return return_false_with_msg ("PHI results are different"); + size1 = gimple_phi_num_args (phi1); size2 = gimple_phi_num_args (phi2); diff --git a/gcc/testsuite/gcc.dg/ipa/pr63595.c b/gcc/testsuite/gcc.dg/ipa/pr63595.c new file mode 100644 index 0000000..52851fb --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr63595.c @@ -0,0 +1,65 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-ipa-icf-details" } */ + +typedef int size_t; + +typedef struct TypHeader { + unsigned long size; + struct TypHeader * * ptr; + char name[3]; + unsigned char type; +} * TypHandle; + +__attribute__((noinline)) +static TypHandle Error(const char *str, unsigned long l1, unsigned long l2) +{ + return 0; +} + +extern TypHandle (* EvTab[81]) ( TypHandle hd ); +extern TypHandle (*TabProd[28][28]) ( TypHandle, TypHandle ); + +__attribute__((noinline)) +TypHandle FunOnRight (TypHandle hdCall) +{ + TypHandle hdRes; + TypHandle hdPnt; + TypHandle hdElm; + + + if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) ) + return Error("",0L,0L); + hdPnt = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? (((TypHandle*)((hdCall)->ptr))[1]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1]))); + hdElm = ((long)(((TypHandle*)((hdCall)->ptr))[2])&1 ? (((TypHandle*)((hdCall)->ptr))[2]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[2]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[2])->type))])((((TypHandle*)((hdCall)->ptr))[2]))); + + + hdRes = ((*TabProd[(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))][(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))])((hdPnt),(hdElm))); + return hdRes; +} + +__attribute__((noinline)) +TypHandle FunOnLeft (TypHandle hdCall) +{ + TypHandle hdRes; + TypHandle hdPnt; + TypHandle hdElm; + + + if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) ) + return Error("",0L,0L); + hdPnt = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? (((TypHandle*)((hdCall)->ptr))[1]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1]))); + hdElm = ((long)(((TypHandle*)((hdCall)->ptr))[2])&1 ? (((TypHandle*)((hdCall)->ptr))[2]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[2]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[2])->type))])((((TypHandle*)((hdCall)->ptr))[2]))); + + + hdRes = ((*TabProd[(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))][(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))])((hdElm),(hdPnt))); + return hdRes; +} + +int main() +{ + return 0; +} + +/* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */ +/* { dg-final { scan-ipa-dump "PHI results are different" "icf" } } */ +/* { dg-final { cleanup-ipa-dump "icf" } } */ --------------030008010009070003060408--