From patchwork Sun May 7 04:43:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 90817 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1394291vqo; Sat, 6 May 2023 22:06:05 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5AnS7414ptSCZM2PtJ9vb7v9ZO5MCjWm4zmcKE7RnR8ft6C11pdSaucV0kz/y4xi2rlZ/c X-Received: by 2002:a17:907:608c:b0:962:582d:89c3 with SMTP id ht12-20020a170907608c00b00962582d89c3mr6246502ejc.22.1683435965701; Sat, 06 May 2023 22:06:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683435965; cv=none; d=google.com; s=arc-20160816; b=e8XsyAIdBTnNxafE8OHcSz9Eq4aAxKeiNFfkWSOW44FXV8Bp2KqNSTaoOOgpNxEpYR K5MOvSHep52M/pbHM6GM20M9fKqzbyoSAo/0z98CkEMkgzMDI2+IadAOnzhQ2EWrPoFy dc5UxbF1SaHa/RhVG7dWJUlOgU/FpXL+jd1xfU1Y8b0T7FHiR7VHD7Bz+QFufgcGCoQG N2XXOcFShsiORMT/SVmfxLBde1mJAk6QHLeH7WPCGdnFjOR5WMVLSluTwvaKHjR03dam +jbrpnocXrK49oE50Y7BTmXq2y2Mz7gzvU8SQkGetEN0ZR47HENeppLC3qMZZqZtcV3J HgDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:cc :to:dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=TuZLrK28IvFOuVxzORB2xwMwZRV3WoiHIGw9b6HAtlk=; b=sbgwJyDADrEOSJfcf+dtEhgJs0vQh18jHHdqQKcFB2OC76RMnljj6iPt13JnlJwbTK w5GtNhoHOJdGY0F36RMYz1odowda+qk6qteb+YJsVCNJVpKPZlbThmmR7TPMVbKcDuC0 Hz1LWGGNmq+Z6reGKDKATEzhZHvrou/3Cg4GZrLdxNL93P1+7KGpIRWS2mVXq5UOgO/u hWvw8Cn6tCKjGNhbnQMUrTnaAMAc8F4MdYxbIlBZoaqYiG+t1LCGlnEPOTatZmPXsY/h 7hcc3rbyBazbwagnwpYHytjhSWhjaz93iCLy8WLALeZizL7by338dbCU3pREEB1WkaTd 1C4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=To1BswSf; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id r7-20020a1709064d0700b00957c0cf514csi3735216eju.772.2023.05.06.22.06.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 May 2023 22:06:05 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=To1BswSf; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4E1793858401 for ; Sun, 7 May 2023 05:06:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4E1793858401 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1683435964; bh=TuZLrK28IvFOuVxzORB2xwMwZRV3WoiHIGw9b6HAtlk=; h=To:CC:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=To1BswSfAjxcBYC/Tc+m7nP2WG+dzJB+YFbdfu70MBKuZrHCszDpmI+3ZYIHGxs1h yvMCwpkJ4mGeHkr8FD0G6jVy9PPtNfxJqEw4n5WwwBF3VWopnuCkUJQGir+XGQbPlW KR/EkyJmLTmLwPf23iPug0pxxj4UMpa8EPspzSXg= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by sourceware.org (Postfix) with ESMTPS id D89DE3858D35 for ; Sun, 7 May 2023 05:05:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D89DE3858D35 Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3474rJnh023426 for ; Sat, 6 May 2023 22:05:20 -0700 Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3qdpdphcge-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Sat, 06 May 2023 22:05:19 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Sat, 6 May 2023 22:05:16 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Sat, 6 May 2023 22:05:16 -0700 Received: from vpnclient.wrightpinski.org.com (unknown [10.69.242.187]) by maili.marvell.com (Postfix) with ESMTP id 1B6C5626A73; Sat, 6 May 2023 21:43:41 -0700 (PDT) To: CC: Andrew Pinski Subject: [PATCH 1/3] PHIOPT: Add diamond bb form to factor_out_conditional_conversion Date: Sat, 6 May 2023 21:43:30 -0700 Message-ID: <20230507044332.1122612-1-apinski@marvell.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Proofpoint-GUID: as2nOVdWPP4JjEkdIRne5aUYFa415nHm X-Proofpoint-ORIG-GUID: as2nOVdWPP4JjEkdIRne5aUYFa415nHm 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-05-07_02,2023-05-05_01,2023-02-09_01 X-Spam-Status: No, score=-14.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andrew Pinski via Gcc-patches From: Andrew Pinski Reply-To: Andrew Pinski Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765210551407169251?= X-GMAIL-MSGID: =?utf-8?q?1765210551407169251?= So the function factor_out_conditional_conversion already supports diamond shaped bb forms, just need to be called for such a thing. harden-cond-comp.c needed to be changed as we would optimize out the conversion now and that causes the compare hardening not needing to split the block which it was testing. So change it such that there would be no chance of optimization. Also add two testcases that showed the improvement. PR 103771 is solved in ifconvert also for the vectorizer but now it is solved in a general sense. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. PR tree-optimization/49959 PR tree-optimization/103771 gcc/ChangeLog: * tree-ssa-phiopt.cc (pass_phiopt::execute): Support Diamond shapped bb form for factor_out_conditional_conversion. gcc/testsuite/ChangeLog: * c-c++-common/torture/harden-cond-comp.c: Change testcase slightly to avoid the new phiopt optimization. * gcc.dg/tree-ssa/abs-2.c: New test. * gcc.dg/tree-ssa/pr103771.c: New test. --- .../c-c++-common/torture/harden-cond-comp.c | 6 +++--- gcc/testsuite/gcc.dg/tree-ssa/abs-2.c | 20 +++++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/pr103771.c | 18 +++++++++++++++++ gcc/tree-ssa-phiopt.cc | 2 +- 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/abs-2.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr103771.c diff --git a/gcc/testsuite/c-c++-common/torture/harden-cond-comp.c b/gcc/testsuite/c-c++-common/torture/harden-cond-comp.c index 5aad890a1d3..dcf364ee993 100644 --- a/gcc/testsuite/c-c++-common/torture/harden-cond-comp.c +++ b/gcc/testsuite/c-c++-common/torture/harden-cond-comp.c @@ -1,11 +1,11 @@ /* { dg-do compile } */ /* { dg-options "-fharden-conditional-branches -fharden-compares -fdump-tree-hardcbr -fdump-tree-hardcmp -ffat-lto-objects" } */ -int f(int i, int j) { +int f(int i, int j, int k, int l) { if (i == 0) - return j != 0; + return (j != 0) + l; else - return i * j != 0; + return (i * j != 0) * k; } /* { dg-final { scan-tree-dump-times "Splitting edge" 2 "hardcbr" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/abs-2.c b/gcc/testsuite/gcc.dg/tree-ssa/abs-2.c new file mode 100644 index 00000000000..328b1802541 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/abs-2.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/49959 */ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-phiopt1-details" } */ + +#define ABS(X) (((X)>0)?(X):-(X)) +unsigned long +test_abs(int *cur) +{ + unsigned long sad = 0; + if (cur[0] > 0) + sad = cur[0]; + else + sad = -cur[0]; + return sad; +} + +/* We should figure out that test_abs has an ABS_EXPR in it. */ +/* { dg-final { scan-tree-dump " = ABS_EXPR" "phiopt1"} } */ +/* { dg-final { scan-tree-dump-times "changed to factor conversion out from" 1 "phiopt1"} } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr103771.c b/gcc/testsuite/gcc.dg/tree-ssa/pr103771.c new file mode 100644 index 00000000000..97c9db846cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr103771.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-phiopt1-details" } */ +/* { dg-final { scan-tree-dump-times "changed to factor conversion out from COND_EXPR." 1 "phiopt1" } } */ + +typedef unsigned char uint8_t; + +static uint8_t x264_clip_uint8 (int x) +{ + return x & (~255) ? (-x) >> 31 : x; +} + +void +mc_weight (uint8_t* __restrict dst, uint8_t* __restrict src, + int i_width,int i_scale) +{ + for(int x = 0; x < i_width; x++) + dst[x] = x264_clip_uint8 (src[x] * i_scale); +} diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index f14b7e8b7e6..41fea78dc8d 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -4087,7 +4087,7 @@ pass_phiopt::execute (function *) gphi *newphi; if (single_pred_p (bb1) - && !diamond_p + && EDGE_COUNT (merge->preds) == 2 && (newphi = factor_out_conditional_conversion (e1, e2, phi, arg0, arg1, cond_stmt))) From patchwork Sun May 7 04:43:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 90816 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1388568vqo; Sat, 6 May 2023 21:45:29 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5jLCXP1n+8RoUIRJ2lZf9det8fw6/2btRbnJLJ3DM6XCyBioLm13Bao5qCJmqBn41xn5sS X-Received: by 2002:a17:907:94cf:b0:8b8:c06e:52d8 with SMTP id dn15-20020a17090794cf00b008b8c06e52d8mr6141425ejc.36.1683434728837; Sat, 06 May 2023 21:45:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683434728; cv=none; d=google.com; s=arc-20160816; b=uF9bdU1vtmsBFX2IgvTedy799YJT/bwJhmyB3noh/L+dYAta6aIk12/1itp1ytNYDV vfaHdMRgTn3VTaH8J0Mvsnw10pjvzix0m0pTA8brqsB8T/sQKHAoqeud9EEO6ygP+N4I +CZ76hhJADArzWxpobA6hszsZg14jDbUH6ycVeoWv1crFor4ufRk3he2Lumq3XOJXpbl dKGD/r/tfmfcXYTyLda3aiMH9o1fx0QIRtKgTqP/rQw73MJulatQ2lYcjNPsRRTRVAg8 ahlViUn6/Gw35DrZFMxWxga0mlySbftDriZZXwSvDHgvFMkNUknUU1skbXx9DM1XxNk2 yB0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=uXJGM4YLeNzkLeHqSEZS0DvCvq8qfUDQ+OryTszePQc=; b=j/sEyHzd2HhVoSLj88iO1nI1/r7R8WiUeo2ExBkrh2Lrn9Jtmy5nd6Vv26sZx12cvN 1gAInQsJk/gavpJxabmqH+nycGaP/tAF3x3cU5uEO9+s3ohq9/7LO4Gthy54ahoVOz99 Z2IAaOrpJ/6q4BEazdcSq/7dtjskderM9xqOvFztbXC+oSmgWY3xbb1kKiYXZRLl0ULv jH30so0HP7YVs2x2/lpJZOAcPr5jZD4AUgo/0gxy+uC93j8+k7VXaJcInE5BjWTN/o9a P8ERs2bjkYbOq6ivQTGjxJ/IJcDM3bmJ4vyu4kIBs1KQtDLsaiEzCD70UTkQ2WKWfYIk OtIw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vHj54QaZ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id c1-20020a17090603c100b009598c12f792si3785926eja.1039.2023.05.06.21.45.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 May 2023 21:45:28 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vHj54QaZ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1C5AA3858416 for ; Sun, 7 May 2023 04:45:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1C5AA3858416 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1683434727; bh=uXJGM4YLeNzkLeHqSEZS0DvCvq8qfUDQ+OryTszePQc=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=vHj54QaZr2S6Cw/3Ly8suAZgXJfGslQQkuTMi/j5iKL71NC+U70yKJiVQNZ1aAy2N 9mMQ0HOzVYWkGncUD6SS/IFwWUVx2JqrY5z5cwxkUZYCtk+AUsBkzdzLGAraMZCrPT ZyKYmHpy9s6E7aHYho5ju1x+hNcrdsUjIEU3sO+g= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by sourceware.org (Postfix) with ESMTPS id BDCDF3858D35 for ; Sun, 7 May 2023 04:43:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BDCDF3858D35 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3474RIRJ011589 for ; Sat, 6 May 2023 21:43:43 -0700 Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3qdm8t25qr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Sat, 06 May 2023 21:43:43 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Sat, 6 May 2023 21:43:42 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Sat, 6 May 2023 21:43:42 -0700 Received: from vpnclient.wrightpinski.org.com (unknown [10.69.242.187]) by maili.marvell.com (Postfix) with ESMTP id 9E67B626A71; Sat, 6 May 2023 21:43:41 -0700 (PDT) To: CC: Andrew Pinski Subject: [PATCH 2/3] PHIOPT: Loop over calling factor_out_conditional_conversion Date: Sat, 6 May 2023 21:43:31 -0700 Message-ID: <20230507044332.1122612-2-apinski@marvell.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230507044332.1122612-1-apinski@marvell.com> References: <20230507044332.1122612-1-apinski@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: Rn2OAjCc5yB7qwVXPo0eAzW-lTBr4xD8 X-Proofpoint-ORIG-GUID: Rn2OAjCc5yB7qwVXPo0eAzW-lTBr4xD8 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-05-07_02,2023-05-05_01,2023-02-09_01 X-Spam-Status: No, score=-14.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andrew Pinski via Gcc-patches From: Andrew Pinski Reply-To: Andrew Pinski Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765209254076443593?= X-GMAIL-MSGID: =?utf-8?q?1765209254076443593?= After adding diamond shaped bb support to factor_out_conditional_conversion, we can get a case where we have two conversions that needs factored out and then would have another phiopt happen. An example is: ``` static inline unsigned long long g(int t) { unsigned t1 = t; return t1; } unsigned long long f(int c, int d, int e) { unsigned long long t; if (c > d) t = g(c); else t = g(d); return t; } ``` In this case we should get a MAX_EXPR in phiopt1 with two casts. Before this patch, we would just factor out the outer cast and then wait till phiopt2 to factor out the inner cast. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. gcc/ChangeLog: * tree-ssa-phiopt.cc (pass_phiopt::execute): Loop over factor_out_conditional_conversion. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/minmax-17.c: New test. --- gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c | 21 ++++++++++++++++++ gcc/tree-ssa-phiopt.cc | 27 +++++++++++++---------- 2 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c new file mode 100644 index 00000000000..bd737e6b4cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-phiopt1-details" } */ + +static inline unsigned long long g(int t) +{ + unsigned t1 = t; + return t1; +} +unsigned long long test_max(int c, int d, int e) +{ + unsigned long long t; + if (c > d) + t = g(c); + else + t = g(d); + return t; +} + +/* We should figure out that test_max has an MAX_EXPR in it. */ +/* { dg-final { scan-tree-dump " = MAX_EXPR" "phiopt1"} } */ +/* { dg-final { scan-tree-dump-times "changed to factor conversion out from" 2 "phiopt1"} } */ diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index 41fea78dc8d..7fe088b13ff 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -4085,20 +4085,23 @@ pass_phiopt::execute (function *) node. */ gcc_assert (arg0 != NULL_TREE && arg1 != NULL_TREE); - gphi *newphi; if (single_pred_p (bb1) - && EDGE_COUNT (merge->preds) == 2 - && (newphi = factor_out_conditional_conversion (e1, e2, phi, - arg0, arg1, - cond_stmt))) + && EDGE_COUNT (merge->preds) == 2) { - phi = newphi; - /* factor_out_conditional_conversion may create a new PHI in - BB2 and eliminate an existing PHI in BB2. Recompute values - that may be affected by that change. */ - arg0 = gimple_phi_arg_def (phi, e1->dest_idx); - arg1 = gimple_phi_arg_def (phi, e2->dest_idx); - gcc_assert (arg0 != NULL_TREE && arg1 != NULL_TREE); + gphi *newphi = phi; + while (newphi) + { + phi = newphi; + /* factor_out_conditional_conversion may create a new PHI in + BB2 and eliminate an existing PHI in BB2. Recompute values + that may be affected by that change. */ + arg0 = gimple_phi_arg_def (phi, e1->dest_idx); + arg1 = gimple_phi_arg_def (phi, e2->dest_idx); + gcc_assert (arg0 != NULL_TREE && arg1 != NULL_TREE); + newphi = factor_out_conditional_conversion (e1, e2, phi, + arg0, arg1, + cond_stmt); + } } /* Do the replacement of conditional if it can be done. */ From patchwork Sun May 7 04:43:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 90815 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1388292vqo; Sat, 6 May 2023 21:44:30 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6w+yjMyX18TEs1siwElP0gbLJ+Qh2rNsuO6zNpY8M/d4SZJjzFpPPBDwgO4VqkIZxLSxi3 X-Received: by 2002:a17:906:5d08:b0:965:9d20:a41b with SMTP id g8-20020a1709065d0800b009659d20a41bmr5544891ejt.16.1683434670623; Sat, 06 May 2023 21:44:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683434670; cv=none; d=google.com; s=arc-20160816; b=Tf37PkSGVVLExWJ0eLoEMuaETK4fRmCzmMOUfcYMl6CRyu2YNSOC0AJtcsUk0kqktP qOXLVdU6FueGJ3WcTgT907MX+NJUz8Nbeqs7CNTYIfQoTASCst5MSF/ryjCzZb7dyKGD kTtxIIESQ7vO7HfUNpn/6rYgSXs78PEBaC8nCzKTh/vp3EzOxsdqgfwSPk1qCa+NkSMh oR9klzdL5h4cY/QY3yJZAzSTVqhOTICXg1YFUonIK3L6GyS6mkZcl8YEj8GdhVLgy7hR n7RwpGA1YqoyTOekiTatjlLi8YpdTqsh5xnXgBg63kT/NfcooFHaABmzN4CSSft+2V7V Rl2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=JDMsz5YHOqOZkhzMyU7CcoI0mHJ4hl5IwsicTt4QssE=; b=GJvRjqDAdakiX+ZuNt6Jmu8n1dBW4WO/RlXfk/5bzHZY90RRVH4ho6jTp604+A18RR LR5PiD2iZPoqKK6VZLgi9VG/BUDlQF9AMVPk1YPLx9fXtFLFxPZ9pJtCxGJE+MSCJJgc 7cHw7fg5fFPthl5FyJNGBieHuLN5/nbNNiyzkEQxWVHlywL877zU7FPodeXDOW8uohUk q98TO2PbT7X3MStE/QvsZJgiDcGgCqMvJN4H29CWyMDE+YYsBSW+licWZSobWWJQKU7h Jgi2+XYLTR9RBy1x6yDJLe7VnqCJe3SzbuQdEycvUclg3Z/8hKspED4Zz5essJRjhSTB /M5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sgHlKQu3; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id pk19-20020a170906d7b300b0094f1de9030dsi3858446ejb.897.2023.05.06.21.44.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 May 2023 21:44:30 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sgHlKQu3; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 613EC3858401 for ; Sun, 7 May 2023 04:44:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 613EC3858401 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1683434669; bh=JDMsz5YHOqOZkhzMyU7CcoI0mHJ4hl5IwsicTt4QssE=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=sgHlKQu3xDRi27TkDJVqo3jrb8SwoUE8amxdRUbbFRyvHg6xv9tpbY/DABvSpTy8x AqctgF9PU+q/Vmor/wCzSII6fgW/kXoWRX5FPRFYisUxeLBBYqydhyafSvO3hSWWKA Vdl8Etsd187z6uFblHbFuSQjwYzUBVXO4OzdIEdo= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by sourceware.org (Postfix) with ESMTPS id D29D43858D3C for ; Sun, 7 May 2023 04:43:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D29D43858D3C Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3474RIRK011589 for ; Sat, 6 May 2023 21:43:44 -0700 Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3qdm8t25qr-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Sat, 06 May 2023 21:43:43 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Sat, 6 May 2023 21:43:42 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Sat, 6 May 2023 21:43:42 -0700 Received: from vpnclient.wrightpinski.org.com (unknown [10.69.242.187]) by maili.marvell.com (Postfix) with ESMTP id 216CE626A75; Sat, 6 May 2023 21:43:42 -0700 (PDT) To: CC: Andrew Pinski Subject: [PATCH 3/3] PHIOPT: factor out unary operations instead of just conversions Date: Sat, 6 May 2023 21:43:32 -0700 Message-ID: <20230507044332.1122612-3-apinski@marvell.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230507044332.1122612-1-apinski@marvell.com> References: <20230507044332.1122612-1-apinski@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: 5F2KbH29FlhX96sgv9UnDCQ95plTeZMF X-Proofpoint-ORIG-GUID: 5F2KbH29FlhX96sgv9UnDCQ95plTeZMF 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-05-07_02,2023-05-05_01,2023-02-09_01 X-Spam-Status: No, score=-14.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andrew Pinski via Gcc-patches From: Andrew Pinski Reply-To: Andrew Pinski Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765209193214950144?= X-GMAIL-MSGID: =?utf-8?q?1765209193214950144?= After using factor_out_conditional_conversion with diamond bb, we should be able do use it also for all normal unary gimple and not just conversions. This allows to optimize PR 59424 for an example. This is also a start to optimize PR 64700 and a few others. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. An example of this is: ``` static inline unsigned long long g(int t) { unsigned t1 = t; return t1; } static int abs1(int a) { if (a < 0) a = -a; return a; } unsigned long long f(int c, int d, int e) { unsigned long long t; if (d > e) t = g(abs1(d)); else t = g(abs1(e)); return t; } ``` Which should be optimized to: _9 = MAX_EXPR ; _4 = ABS_EXPR <_9>; t_3 = (long long unsigned intD.16) _4; gcc/ChangeLog: * tree-ssa-phiopt.cc (factor_out_conditional_conversion): Rename to ... (factor_out_conditional_operation): This and add support for all unary operations. (pass_phiopt::execute): Update call to factor_out_conditional_conversion to call factor_out_conditional_operation instead. PR tree-optimization/109424 PR tree-optimization/59424 gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/abs-2.c: Update tree scan for details change in wording. * gcc.dg/tree-ssa/minmax-17.c: Likewise. * gcc.dg/tree-ssa/pr103771.c: Likewise. * gcc.dg/tree-ssa/minmax-18.c: New test. * gcc.dg/tree-ssa/minmax-19.c: New test. --- gcc/testsuite/gcc.dg/tree-ssa/abs-2.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/minmax-18.c | 27 +++++++++++ gcc/testsuite/gcc.dg/tree-ssa/minmax-19.c | 10 ++++ gcc/testsuite/gcc.dg/tree-ssa/pr103771.c | 2 +- gcc/tree-ssa-phiopt.cc | 56 +++++++++++++---------- 6 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/minmax-18.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/minmax-19.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/abs-2.c b/gcc/testsuite/gcc.dg/tree-ssa/abs-2.c index 328b1802541..f8bbeb43237 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/abs-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/abs-2.c @@ -16,5 +16,5 @@ test_abs(int *cur) /* We should figure out that test_abs has an ABS_EXPR in it. */ /* { dg-final { scan-tree-dump " = ABS_EXPR" "phiopt1"} } */ -/* { dg-final { scan-tree-dump-times "changed to factor conversion out from" 1 "phiopt1"} } */ +/* { dg-final { scan-tree-dump-times "changed to factor operation out from" 1 "phiopt1"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c index bd737e6b4cb..7c76cfc62a9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-17.c @@ -18,4 +18,4 @@ unsigned long long test_max(int c, int d, int e) /* We should figure out that test_max has an MAX_EXPR in it. */ /* { dg-final { scan-tree-dump " = MAX_EXPR" "phiopt1"} } */ -/* { dg-final { scan-tree-dump-times "changed to factor conversion out from" 2 "phiopt1"} } */ +/* { dg-final { scan-tree-dump-times "changed to factor operation out from" 2 "phiopt1"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-18.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-18.c new file mode 100644 index 00000000000..c8e1670f64a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-18.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-phiopt1-details" } */ + +static inline unsigned long long g(int t) +{ + unsigned t1 = t; + return t1; +} +static inline int abs1(int a) +{ + if (a < 0) + a = -a; + return a; +} +unsigned long long f(int c, int d, int e) +{ + unsigned long long t; + if (d > e) + t = g(abs1(d)); + else + t = g(abs1(e)); + return t; +} + +/* { dg-final { scan-tree-dump " = MAX_EXPR" "phiopt1"} } */ +/* { dg-final { scan-tree-dump-times " = ABS_EXPR" 2 "phiopt1"} } */ +/* { dg-final { scan-tree-dump-times "changed to factor operation out from" 3 "phiopt1"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-19.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-19.c new file mode 100644 index 00000000000..5ed55fe2e23 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-19.c @@ -0,0 +1,10 @@ +/* PR tree-optimization/109424 */ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-phiopt1-details" } */ + +int f2(int x, int y) +{ + return (x > y) ? ~x : ~y; +} +/* { dg-final { scan-tree-dump " = MAX_EXPR" "phiopt1"} } */ +/* { dg-final { scan-tree-dump-times "changed to factor operation out from" 1 "phiopt1"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr103771.c b/gcc/testsuite/gcc.dg/tree-ssa/pr103771.c index 97c9db846cb..8faa45a8222 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr103771.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr103771.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fdump-tree-phiopt1-details" } */ -/* { dg-final { scan-tree-dump-times "changed to factor conversion out from COND_EXPR." 1 "phiopt1" } } */ +/* { dg-final { scan-tree-dump-times "changed to factor operation out from COND_EXPR." 1 "phiopt1" } } */ typedef unsigned char uint8_t; diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index 7fe088b13ff..2fb28b4e60e 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -209,13 +209,13 @@ replace_phi_edge_with_variable (basic_block cond_block, bb->index); } -/* PR66726: Factor conversion out of COND_EXPR. If the arguments of the PHI +/* PR66726: Factor operations out of COND_EXPR. If the arguments of the PHI stmt are CONVERT_STMT, factor out the conversion and perform the conversion to the result of PHI stmt. COND_STMT is the controlling predicate. Return the newly-created PHI, if any. */ static gphi * -factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, +factor_out_conditional_operation (edge e0, edge e1, gphi *phi, tree arg0, tree arg1, gimple *cond_stmt) { gimple *arg0_def_stmt = NULL, *arg1_def_stmt = NULL, *new_stmt; @@ -224,7 +224,7 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, gphi *newphi; gimple_stmt_iterator gsi, gsi_for_def; location_t locus = gimple_location (phi); - enum tree_code convert_code; + enum tree_code op_code; /* Handle only PHI statements with two arguments. TODO: If all other arguments to PHI are INTEGER_CST or if their defining @@ -246,15 +246,17 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, return NULL; /* Check if arg0 is an SSA_NAME and the stmt which defines arg0 is - a conversion. */ + an unary operation. */ arg0_def_stmt = SSA_NAME_DEF_STMT (arg0); - if (!gimple_assign_cast_p (arg0_def_stmt)) + if (!is_gimple_assign (arg0_def_stmt) + || (gimple_assign_rhs_class (arg0_def_stmt) != GIMPLE_UNARY_RHS + && gimple_assign_rhs_code (arg0_def_stmt) != VIEW_CONVERT_EXPR)) return NULL; /* Use the RHS as new_arg0. */ - convert_code = gimple_assign_rhs_code (arg0_def_stmt); + op_code = gimple_assign_rhs_code (arg0_def_stmt); new_arg0 = gimple_assign_rhs1 (arg0_def_stmt); - if (convert_code == VIEW_CONVERT_EXPR) + if (op_code == VIEW_CONVERT_EXPR) { new_arg0 = TREE_OPERAND (new_arg0, 0); if (!is_gimple_reg_type (TREE_TYPE (new_arg0))) @@ -267,10 +269,10 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, if (TREE_CODE (arg1) == SSA_NAME) { /* Check if arg1 is an SSA_NAME and the stmt which defines arg1 - is a conversion. */ + is an unary operation. */ arg1_def_stmt = SSA_NAME_DEF_STMT (arg1); - if (!is_gimple_assign (arg1_def_stmt) - || gimple_assign_rhs_code (arg1_def_stmt) != convert_code) + if (!is_gimple_assign (arg1_def_stmt) + || gimple_assign_rhs_code (arg1_def_stmt) != op_code) return NULL; /* Either arg1_def_stmt or arg0_def_stmt should be conditional. */ @@ -281,7 +283,7 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, /* Use the RHS as new_arg1. */ new_arg1 = gimple_assign_rhs1 (arg1_def_stmt); - if (convert_code == VIEW_CONVERT_EXPR) + if (op_code == VIEW_CONVERT_EXPR) new_arg1 = TREE_OPERAND (new_arg1, 0); if (TREE_CODE (new_arg1) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_arg1)) @@ -289,6 +291,10 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, } else { + /* TODO: handle more than just casts here. */ + if (!gimple_assign_cast_p (arg0_def_stmt)) + return NULL; + /* arg0_def_stmt should be conditional. */ if (dominated_by_p (CDI_DOMINATORS, gimple_bb (phi), gimple_bb (arg0_def_stmt))) return NULL; @@ -366,13 +372,13 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, fprintf (dump_file, "PHI "); print_generic_expr (dump_file, gimple_phi_result (phi)); fprintf (dump_file, - " changed to factor conversion out from COND_EXPR.\n"); - fprintf (dump_file, "New stmt with CAST that defines "); + " changed to factor operation out from COND_EXPR.\n"); + fprintf (dump_file, "New stmt with OPERATION that defines "); print_generic_expr (dump_file, result); fprintf (dump_file, ".\n"); } - /* Remove the old cast(s) that has single use. */ + /* Remove the old operation(s) that has single use. */ gsi_for_def = gsi_for_stmt (arg0_def_stmt); gsi_remove (&gsi_for_def, true); release_defs (arg0_def_stmt); @@ -387,14 +393,14 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, add_phi_arg (newphi, new_arg0, e0, locus); add_phi_arg (newphi, new_arg1, e1, locus); - /* Create the conversion stmt and insert it. */ - if (convert_code == VIEW_CONVERT_EXPR) + /* Create the operation stmt and insert it. */ + if (op_code == VIEW_CONVERT_EXPR) { temp = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (result), temp); new_stmt = gimple_build_assign (result, temp); } else - new_stmt = gimple_build_assign (result, convert_code, temp); + new_stmt = gimple_build_assign (result, op_code, temp); gsi = gsi_after_labels (gimple_bb (phi)); gsi_insert_before (&gsi, new_stmt, GSI_SAME_STMT); @@ -402,7 +408,7 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, gsi = gsi_for_stmt (phi); gsi_remove (&gsi, true); - statistics_counter_event (cfun, "factored out cast", 1); + statistics_counter_event (cfun, "factored out operation", 1); return newphi; } @@ -3847,11 +3853,11 @@ gate_hoist_loads (void) This pass also performs a fifth transformation of a slightly different flavor. - Factor conversion in COND_EXPR + Factor operations in COND_EXPR ------------------------------ - This transformation factors the conversion out of COND_EXPR with - factor_out_conditional_conversion. + This transformation factors the unary operations out of COND_EXPR with + factor_out_conditional_operation. For example: if (a <= CST) goto ; else goto ; @@ -4092,15 +4098,15 @@ pass_phiopt::execute (function *) while (newphi) { phi = newphi; - /* factor_out_conditional_conversion may create a new PHI in + /* factor_out_conditional_operation may create a new PHI in BB2 and eliminate an existing PHI in BB2. Recompute values that may be affected by that change. */ arg0 = gimple_phi_arg_def (phi, e1->dest_idx); arg1 = gimple_phi_arg_def (phi, e2->dest_idx); gcc_assert (arg0 != NULL_TREE && arg1 != NULL_TREE); - newphi = factor_out_conditional_conversion (e1, e2, phi, - arg0, arg1, - cond_stmt); + newphi = factor_out_conditional_operation (e1, e2, phi, + arg0, arg1, + cond_stmt); } }