From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 25EB73858D20 for ; Fri, 14 Apr 2023 10:08:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 25EB73858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33E9glIf002377; Fri, 14 Apr 2023 10:08:03 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=pp1; bh=9aObyad950b3b0tNQbJUkMsCDqZW9nKzlcyDEI3HQqw=; b=aICzOh/d7ySv8QVtuxhiFwwEommGxUYtsH8lYbySI0Mi9Pa3qlJVVIcdcqOJOiY5nw+P rAGRtkKZwaml0AA7wHvl+49G1tzRfjJRC4aKlEl1OJtJTBsYIBFowqUXF0m9Ce2m4D1i 1zlf2jy3mo+u96M4yKkiwF9D+1BTUua+SgvRJYuwpTuiGJZ7+GCVu87z+RkVql4Z39CZ 05NI/1R1CYy6R026Zk3p86w63amATA3Sb0oE4SqZCVdFdoNBTxgXSYMd1Iqr37ddd6VX 8Tix6EOVGN9y91OckR/GBI1N+pBe02FfUgQH/QpIY2T3MJWFOiPSqe9lsY9WsRIm+p7P iQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3pxuxbrsca-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Apr 2023 10:08:03 +0000 Received: from m0098419.ppops.net (m0098419.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 33E9gtM0003168; Fri, 14 Apr 2023 10:08:02 GMT Received: from ppma01wdc.us.ibm.com (fd.55.37a9.ip4.static.sl-reverse.com [169.55.85.253]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3pxuxbrsc1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Apr 2023 10:08:02 +0000 Received: from pps.filterd (ppma01wdc.us.ibm.com [127.0.0.1]) by ppma01wdc.us.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 33E9MNNo013554; Fri, 14 Apr 2023 10:08:02 GMT Received: from smtprelay05.wdc07v.mail.ibm.com ([9.208.129.117]) by ppma01wdc.us.ibm.com (PPS) with ESMTPS id 3pu0m705d5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Apr 2023 10:08:02 +0000 Received: from smtpav01.dal12v.mail.ibm.com (smtpav01.dal12v.mail.ibm.com [10.241.53.100]) by smtprelay05.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 33EA80o430081546 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Apr 2023 10:08:01 GMT Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C494B58057; Fri, 14 Apr 2023 10:08:00 +0000 (GMT) Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9DF3358059; Fri, 14 Apr 2023 10:07:58 +0000 (GMT) Received: from [9.43.65.25] (unknown [9.43.65.25]) by smtpav01.dal12v.mail.ibm.com (Postfix) with ESMTP; Fri, 14 Apr 2023 10:07:58 +0000 (GMT) Message-ID: <575418e4-7d40-3d56-044b-fdd91a7c657a@linux.ibm.com> Date: Fri, 14 Apr 2023 15:37:56 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: PATCH] tree-ssa-sink: Add heuristics for code sinking Content-Language: en-US To: Richard Biener Cc: gcc-patches , Segher Boessenkool , Peter Bergner , Jeff Law References: <1d4c9e6c-85e4-7eff-0833-aca7f874fbda@linux.ibm.com> From: Ajit Agarwal In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: ivzucv8DEvlg2NFAzwx11R0B4UoN3LmA X-Proofpoint-GUID: wO_2_DSidYoOmDHncVVg9seGqKe0P8yj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-14_03,2023-04-13_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 mlxlogscore=999 adultscore=0 mlxscore=0 spamscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 priorityscore=1501 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304140086 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hello Richard: On 14/04/23 2:29 pm, Richard Biener wrote: > On Fri, Apr 14, 2023 at 10:42 AM Ajit Agarwal via Gcc-patches > wrote: >> >> Hello All: >> >> This patch add heuristics for code sinking opportunities. >> Bootstrapped and regtested for powerpc64-linux-gnu. >> >> Thanks & Regards >> Ajit >> >> tree-ssa-sink: Add heuristics for code sinking. >> >> Add following code sinking heuristics: >> >> 1. from code block dominates the call. >> 2. To Code block have uses inside the function call. >> 3. Loop headers. >> 4. Sinking from code block after call increases register >> pressure. >> 5. Sinking calls. >> >> 2023-04-14 Ajit Kumar Agarwal >> >> gcc/ChangeLog: >> >> * tree-ssa-sink.cc (statement_sink_location): Add heuristics >> for code sinking. >> --- >> gcc/tree-ssa-sink.cc | 33 +++++++++++++++++++++++++++++++++ >> 1 file changed, 33 insertions(+) >> >> diff --git a/gcc/tree-ssa-sink.cc b/gcc/tree-ssa-sink.cc >> index 87b1d40c174..8de88b259a3 100644 >> --- a/gcc/tree-ssa-sink.cc >> +++ b/gcc/tree-ssa-sink.cc >> @@ -465,6 +465,39 @@ statement_sink_location (gimple *stmt, basic_block frombb, >> if (sinkbb == frombb) >> return false; >> >> + auto_vec h; >> + h = get_all_dominated_blocks (CDI_DOMINATORS, >> + frombb); >> + bool is_call = false; >> + while (h.length ()) >> + { >> + basic_block bb = h.pop (); >> + >> + if (bb == frombb) >> + continue; >> + >> + for (gimple_stmt_iterator gsi = gsi_last_bb (bb); !gsi_end_p (gsi);) >> + { >> + gimple *stmt = gsi_stmt (gsi); >> + >> + if (is_gimple_call (stmt)) >> + { >> + is_call = true; >> + break; >> + } >> + >> + if (!gsi_end_p (gsi)) >> + gsi_prev (&gsi); >> + } >> + } >> + >> + if (!is_gimple_call (stmt) >> + && (gimple_bb (use) != frombb) >> + && !is_gimple_call (use) >> + && dominated_by_p (CDI_DOMINATORS, sinkbb, frombb) >> + && is_call) >> + return false; >> + > > Sorry, but this lacks a comment, it doesn't explain why the existing heuristics > are not enough (select_best_block), it repeats dominance computing. > > More so it lacks a testcase demonstrating the effect. > Added testscases and comments in the code. The heuristics are added to relieve from register pressure. Thanks & Regards Ajit Here is the patch. tree-ssa-sink: Add heuristics for code sinking. Add following code sinking heuristics: 1. from code block dominates the call. 2. To Code block have uses inside the function call. 3. Loop headers. 4. Sinking from code block after call increases register pressure. 5. Sinking calls. 2023-04-14 Ajit Kumar Agarwal gcc/ChangeLog: * tree-ssa-sink.cc (statement_sink_location): Add heuristics for code sinking. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/ssa-sink-20.c: New testcase. * gcc.dg/tree-ssa/ssa-sink-21.c: New testcase. --- gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-20.c | 16 ++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-21.c | 20 ++++++++++++++++++++ gcc/tree-ssa-sink.cc | 6 ++++++ 3 files changed, 42 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-20.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-21.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-20.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-20.c new file mode 100644 index 00000000000..ed2aefc01aa --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-20.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-sink -fdump-tree-optimized" } */ + +void bar(); +int j; +void foo(int a, int b, int c, int d, int e, int f) +{ + int l; + l = a + b + c + d +e + f; + if (a != 5) + { + bar(); + j = l; + } +} +/* { dg-final { scan-tree-dump-times "Sunk statements: 1" 0 "sink1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-21.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-21.c new file mode 100644 index 00000000000..a39724df8ec --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-21.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-sink-stats" } */ + +void bar(); +int j, x; +void foo(int a, int b, int c, int d, int e, int f) +{ + int l; + l = a + b + c + d +e + f; + if (a != 5) + { + bar(); + if (b != 3) + x = 3; + else + x = 5; + j = l; + } +} +/* { dg-final { scan-tree-dump-times "Sunk statements: 1" 0 "sink1" } } */ diff --git a/gcc/tree-ssa-sink.cc b/gcc/tree-ssa-sink.cc index 8de88b259a3..932fd71bec2 100644 --- a/gcc/tree-ssa-sink.cc +++ b/gcc/tree-ssa-sink.cc @@ -465,6 +465,12 @@ statement_sink_location (gimple *stmt, basic_block frombb, if (sinkbb == frombb) return false; + /* The below heuristics describes the following. + a) If the candidate to sink has call in the dominator basic + basic blocks. + b) statement to sink doesn't have use in the call. + c) candidate block dominates sink block. + In the above cases are true then don't do code sinking. */ auto_vec h; h = get_all_dominated_blocks (CDI_DOMINATORS, frombb); -- 2.31.1 > Richard. > >> if (sinkbb == gimple_bb (use)) >> *togsi = gsi_for_stmt (use); >> else >> -- >> 2.31.1 >>