From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=yahoo.co.jp Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.co.jp 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 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1693906190; s=yj20110701; d=yahoo.co.jp; h=Message-ID:Date:MIME-Version:To:Cc:From:Subject:Content-Type:Content-Transfer-Encoding:References; bh=tr/MUowzDMBJcdaO6CpR78ps1Z78RPHwAhx4LBlA4HY=; b=C2gQLHKorr7LY/zlPTVfjzH+s5NGUnP1Y8u4fwku3eKOC1truhMP4in3zWM0Hqdb iCd/RgrAot1FF6x1TY3433gqku3JFNvkM4rEcwtzDqwbmOPVnBnljk8KLFCJ2fYUf/y 2VeGsby/IgZwyNUaQWRDAMCm0L2ztVDNTzV/iS48= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=yj20110701; d=yahoo.co.jp; h=Message-ID:Date:MIME-Version:Cc:From:Content-Type:Content-Transfer-Encoding:References; b=CIUitFT2sXwzsLCfHIUjvynKN20oyoeQ8Edin7MzzwpEHRDYEDluXzyu29jj6wYP d7zDIQnY/3YGI+O2ietJdKfvI2VU/CNK4qmx8ToDAjvBbeYntPk4NQkFUrltWgR8Adm e9CzTCIEZsFpy6D5gW63wDOZKK0CDCFKY8DUXVVY=; 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 Cc: Max Filippov From: Takayuki 'January June' Suwa Subject: [PATCH] xtensa: Optimize boolean evaluation when SImode EQ/NE to zero if TARGET_MINMAX Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit 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 List-Id: 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")) -- 2.30.2