From patchwork Tue Sep 5 09:27:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Takayuki 'January June' Suwa X-Patchwork-Id: 137494 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ab0a:0:b0:3f2:4152:657d with SMTP id m10csp1564300vqo; Tue, 5 Sep 2023 02:30:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGGpH1/av3YicZkwPw37olzjsXKcAxxAFhyWK5OuZILZfiYY2vo9Zu+RHQGlnmzLmPzdWgR X-Received: by 2002:a50:ed03:0:b0:522:1e24:afb6 with SMTP id j3-20020a50ed03000000b005221e24afb6mr10305655eds.0.1693906242612; Tue, 05 Sep 2023 02:30:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693906242; cv=none; d=google.com; s=arc-20160816; b=m1u8b9FSvSbgwpuevz9AZD7Bi0GvhyFk2CbPTQjOrTjUps6JfrjdbHtcvnCroKp6Hz vVHxiUFi6b8WGq7PxEbC1/eJZTGdPXI6B9WNisIV5YjSv2xAeRYmslpcITIw4VHF9gHO SG6PmvHvtzDgpMNAs0igQqGSRLYBmCcmwRIeyG3M6HBvaROL/p0JWnOqbewMjKioNRSa EaU1HzVivT0x1h0QbgoxUycS9TsmIDG+Gs+qt9ub6oxvgUvuOioFbZc+5WpSBCqbZ+YV 5DhYYDvvZDniOH2AZj8p7MjAZQnNBT58Fg/aZgIl2txakw7o5GJb8ASaI7OAyMOPWJT0 wYNg== 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:references :content-transfer-encoding:subject:to:user-agent:mime-version:date :message-id:dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=tr/MUowzDMBJcdaO6CpR78ps1Z78RPHwAhx4LBlA4HY=; fh=1L2/IiukS00vgiXcKREcvt+pFBEM8GuYOng2C1a9k1k=; b=ZKAVJPMa85UgsA+0kF17c0AkFyFHYdJjbUuoQeyz1hphXAYzhDia3g0Hi2UhATZLyN l8zxRfPBH7RDRNq9JIGbcLC+l9Y1Fs41WG+jRWJu0k1k7l9DTjVXbP1h4x8Yh3i+jUsX jje4sVz5dptN1BHec2sLzNe81DaIoMGlfpAPiio/AJpEg7ICayVBa0b5Z1nXNLKahfXA ZP1Y5Ty2OZMaDLNlDvLaugwuXxNrqWF6ha8U+Ra9iGTK6LvvtiEhOFWuO5A4TLJr0eU4 gcoNipVBHW89leacQK2EZQYV3dBitn/CMHY0jit89OMyx0zC62PtNBPncqugxo0qpsNW dI1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b="R6dwyQK/"; 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 (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id k5-20020aa7c385000000b0052e6ed5f56csi615183edq.606.2023.09.05.02.30.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Sep 2023 02:30:42 -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="R6dwyQK/"; 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 1AA453857713 for ; Tue, 5 Sep 2023 09:30:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1AA453857713 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1693906240; bh=tr/MUowzDMBJcdaO6CpR78ps1Z78RPHwAhx4LBlA4HY=; h=Date:To:Subject:References:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=R6dwyQK/cmRSllqNBZK2dtMHv8N83dtPAyIbT0agbNcuf0Oi+3KbiMbsPUAGUjgo9 89rA60uWuMiarQwMsvqWbxZXb7z6p/AjSrnqKk349bhAZnXOTyJOhcJqj1MMkFo3hx tL1/oJsuScQhBGQn0gN3MCsyqBlvJgRiYIgJIMAY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from omggw7013.mail.djm.yahoo.co.jp (omggw7013.mail.djm.yahoo.co.jp [183.79.54.35]) by sourceware.org (Postfix) with ESMTPS id 4ABD33858D35 for ; Tue, 5 Sep 2023 09:29:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4ABD33858D35 X-YMail-OSG: Y8jTiokVM1kmxz7Sk0aXZDvumQAP7yxMXYyVg3wPc_Y5mZuxAnVKC.MpJt1.q8v r.F8mRFcWZYyPc06I2tzVJjt1VIDKSno9v039BJ8nVkggQ0hbpN338wtl58r4ooEte91wzB9Cfw. rofU_FmVYngQM62qxnzjpZJnGb5AUM6anbO.Qs8awfCd7Exjb2nBwq7Y8iD31vox20IL0_PwhWov 1qRS882Ijpy60oIKNVJcFROYVBgBL.HOoh.PMziPkf4JacJSRvZNEhIkdNmR9DWGzeP9YedTyx_d rlqU_yICVsLrhcC3ciW3polLwSQX9Pw9GQ_GpZ79gMGVvhfD4LwFCyLftTCfzEm_FcF8XXYzfDwn 9Hg2x2LFz6Z3zmRfkg_iWHi8r2zkZY9n2OlV4ssiYTeJJszmFhAWyyGnfqAHzOe7uDHZuAHoiJ3l 7WD5FC1oi4f3o8WBWguryebP9toRb14Yk2Rt_iNBrXAtMmyVgBGjfU1Ysk0PWseex2SRHZnnD7dS gZA4O6ANlPWnoAjxR4wSP47hHwuiraGZ6q7iOsALpynQoDrZIIs0p91.U2gb9jyIJclZbplFxEwM 6ralnHy_1CB6OSNmgCCU5UkI2pjauXzd_jo1LVlSuBR_oOCvgn6KhdCG9YzGk2rIp3j5onB5YJQd AJEVcaYT9MJD0ayy4JcxZowRJ9UO25QU.BI_pWn3vvpDeK1c3l7Du5u9wqIP6zsnzHZ9IGNpKOeZ xH77OYyYNGG1kADCQaZvbyXrohpChEJCyPBSbRnsq9UMBd332Wjh_BhwYBltJ63HTBIX154A8cCT Wvl1xcHdyz41BcWhXjYPzsloQVVemg_q1P2ob6F7VX0447G510PeKKPMqrw6wJZ5qO6QMRuye3oI dNjDPmzRE7D0D0ZPnJ0jdL2JDkWJ.WS6zOZ2K2fXlJRvhUPMSby3AaY_UII0E6xNGFreahjU6NYx hdB0coCuP6mow8ZjH9qgPfNyH.CLALC8IdmjnX1D6jMcas7OWGGBGwfHSHD.T.VaUeOd7Gxx1gCL 0SYW5 Received: from sonicgw.mail.yahoo.co.jp by sonicconh5001.mail.kks.yahoo.co.jp with HTTP; Tue, 5 Sep 2023 09:29:50 +0000 Received: by smtphe5006.mail.kks.ynwp.yahoo.co.jp (YJ Hermes SMTP Server) with ESMTPA ID 5f6a437b40258bd8db82fe309c7dbea3; Tue, 05 Sep 2023 18:29:48 +0900 (JST) Message-ID: <0164dc5a-35a7-2848-8153-5016f7582576@yahoo.co.jp> Date: Tue, 5 Sep 2023 18:27:35 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 To: GCC Patches Subject: [PATCH] xtensa: Optimize boolean evaluation when SImode EQ/NE to zero if TARGET_MINMAX References: <0164dc5a-35a7-2848-8153-5016f7582576.ref@yahoo.co.jp> X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Takayuki 'January June' Suwa via Gcc-patches From: Takayuki 'January June' Suwa Reply-To: Takayuki 'January June' Suwa Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1776189432319872335 X-GMAIL-MSGID: 1776189432319872335 This patch optimizes the boolean evaluation for equality to 0 in SImode using the MINU (Minimum Value Unsigned) machine instruction available when TARGET_MINMAX is configured, for example, (x != 0) to MINU(x, 1) and (x == 0) to (MINU(x, 1) ^ 1). /* example */ int test0(int x) { return x == 0; } int test1(int x) { return x != 0; } ;; before test0: mov.n a10, a2 movi.n a9, 1 movi.n a2, 0 moveqz a2, a9, a10 ret.n test1: mov.n a10, a2 movi.n a9, 1 movi.n a2, 0 movnez a2, a9, a10 ret.n ;; after (prereq. TARGET_MINMAX) test0: movi.n a9, 1 minu a2, a2, a9 xor a2, a2, a9 ret.n test1: movi.n a9, 1 minu a2, a2, a9 ret.n gcc/ChangeLog: * config/xtensa/xtensa.cc (xtensa_expand_scc): Add code for particular constants (only 0 and INT_MIN for now) for EQ/NE boolean evaluation in SImode. * config/xtensa/xtensa.md (*eqne_INT_MIN): Remove because its implementation has been integrated into the above. --- gcc/config/xtensa/xtensa.cc | 43 +++++++++++++++++++++++++++++++------ gcc/config/xtensa/xtensa.md | 34 ----------------------------- 2 files changed, 37 insertions(+), 40 deletions(-) diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index af71e2179d0..1afaa1cc94e 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -994,15 +994,46 @@ xtensa_expand_scc (rtx operands[4], machine_mode cmp_mode) rtx cmp; rtx one_tmp, zero_tmp; rtx (*gen_fn) (rtx, rtx, rtx, rtx, rtx); + enum rtx_code code = GET_CODE (operands[1]); - if (!(cmp = gen_conditional_move (GET_CODE (operands[1]), cmp_mode, - operands[2], operands[3]))) + if (cmp_mode == SImode && CONST_INT_P (operands[3]) + && (code == EQ || code == NE)) + switch (INTVAL (operands[3])) + { + case 0: + if (TARGET_MINMAX) + { + one_tmp = force_reg (SImode, const1_rtx); + emit_insn (gen_uminsi3 (dest, operands[2], one_tmp)); + if (code == EQ) + emit_insn (gen_xorsi3 (dest, dest, one_tmp)); + return 1; + } + break; + case -2147483648: + if (TARGET_ABS) + { + emit_insn (gen_abssi2 (dest, operands[2])); + if (code == EQ) + emit_insn (gen_lshrsi3 (dest, dest, GEN_INT (31))); + else + { + emit_insn (gen_ashrsi3 (dest, dest, GEN_INT (31))); + emit_insn (gen_addsi3 (dest, dest, const1_rtx)); + } + return 1; + } + break; + default: + break; + } + + if (! (cmp = gen_conditional_move (code, cmp_mode, + operands[2], operands[3]))) return 0; - one_tmp = gen_reg_rtx (SImode); - zero_tmp = gen_reg_rtx (SImode); - emit_insn (gen_movsi (one_tmp, const_true_rtx)); - emit_insn (gen_movsi (zero_tmp, const0_rtx)); + one_tmp = force_reg (SImode, const1_rtx); + zero_tmp = force_reg (SImode, const0_rtx); gen_fn = (cmp_mode == SImode ? gen_movsicc_internal0 diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 5386e45b51d..d6505e7eb70 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -3188,40 +3188,6 @@ (const_int 5) (const_int 6)))]) - -(define_insn_and_split "*eqne_INT_MIN" - [(set (match_operand:SI 0 "register_operand" "=a") - (match_operator:SI 2 "boolean_operator" - [(match_operand:SI 1 "register_operand" "r") - (const_int -2147483648)]))] - "TARGET_ABS" - "#" - "&& 1" - [(set (match_dup 0) - (abs:SI (match_dup 1))) - (set (match_dup 0) - (match_op_dup:SI 2 - [(match_dup 0) - (const_int 31)])) - (match_dup 3)] -{ - enum rtx_code code = GET_CODE (operands[2]); - operands[2] = gen_rtx_fmt_ee ((code == EQ) ? LSHIFTRT : ASHIFTRT, - SImode, XEXP (operands[2], 0), - XEXP (operands[2], 1)); - operands[3] = (code != EQ) ? gen_addsi3 (operands[0], - operands[0], const1_rtx) - : const0_rtx; -} - [(set_attr "type" "move") - (set_attr "mode" "SI") - (set (attr "length") - (if_then_else (match_test "GET_CODE (operands[2]) == EQ") - (const_int 3) - (if_then_else (match_test "TARGET_DENSITY") - (const_int 5) - (const_int 6))))]) - (define_peephole2 [(set (match_operand:SI 0 "register_operand") (match_operand:SI 6 "reload_operand"))