From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by sourceware.org (Postfix) with ESMTPS id F08C43858C41 for ; Sat, 20 May 2023 05:05:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F08C43858C41 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-1ae408f4d1aso31621155ad.0 for ; Fri, 19 May 2023 22:05:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684559144; x=1687151144; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=nGFfSsJUadXppeQNL9rUmxKD24ykEwRILzA9yogMtdA=; b=BeVkYk9qENw64OMGk3dyVSxMjSfvPWfFoNGB6nAlOnbzWZvaB8wTnUVG1PxhvW5XRj 4P33cPI+HW6FmwY6MLEEPddoSAZrVp9g051PTcblvSpjQzkaIcorydGguZnlqZ4mibTt HSfwARUeGcQPmsZbYGQUQ23l4G9wBi1zlta5s4eiSJvUV2WDe3g7lIYF+/gziRRVRkSi OmZ61Aby8EDU/6WjWbaMwmIg0D/GyWwj4UuizuJPX8m7fU/LmCmBWVQGW18k2SroHT4L xHlktiA/xcrpxJUTn2QVrLUYDjjVxevzaPjQs+i+UaA7weJyfkLwaVVBIUrMnYFaVp/O NPrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684559144; x=1687151144; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nGFfSsJUadXppeQNL9rUmxKD24ykEwRILzA9yogMtdA=; b=YFWNx0o3bNBZSF/w/RglYCY+fen4m/Mi9+4dzH408FJI0tLHWDnQn09mrt+aJyluZA S0X+TT2tkkD4B0/dIvdASgPidxamJIprQYhVEOAD7+MPXabKKLO+3LxNJRM4gQzmpAnd 1fIGxRbkAkYxM5R2ZGIaBzfEpgZCybV0EDQ3E107erQ1JALXBZZ5L3zGl6+TQ/Ifscqm kE/pVAXwxYfshfmvfK4UlL9hK/uWrxqXm4NdLLEF7xqVb0VQjIrI1cAEZJNgTd2WIXGs CBRxlIad7Bp5d3SeePUuuXxf7xk1jGnQmy8W93CeAs7TrqDNvf0dffCXeUq45fQwd5+Q n1ug== X-Gm-Message-State: AC+VfDzo4H5+OXoU0hZm30mhPh/ZvA8lnoSDfKgwE9JQ7FS6DIyGcD6x Fm8KyrZ2CQj23pcbPfeL+QtEPgry3YjlEw== X-Google-Smtp-Source: ACHHUZ7ZKBSqm0EvMeW9sQMOeX3f13dnz3yvHipmS8gLhsfRMS06wxDam13MjADeh+mIwcdiePdBww== X-Received: by 2002:a17:902:dad1:b0:1ac:86b5:70eb with SMTP id q17-20020a170902dad100b001ac86b570ebmr6044975plx.39.1684559143637; Fri, 19 May 2023 22:05:43 -0700 (PDT) Received: from ?IPV6:2601:681:8d00:265::f0a? ([2601:681:8d00:265::f0a]) by smtp.gmail.com with ESMTPSA id c10-20020a170903234a00b001a96496f250sm516832plh.34.2023.05.19.22.05.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 May 2023 22:05:42 -0700 (PDT) Message-ID: <323d7721-9508-14ea-47e5-1f6421d89967@gmail.com> Date: Fri, 19 May 2023 23:05:41 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: [PATCH] [RISC-V] Fix riscv_expand_conditional_move. Content-Language: en-US To: Die Li , gcc-patches@gcc.gnu.org Cc: kito.cheng@gmail.com, palmer@dabbelt.com, gaofei@eswincomputing.com References: <20230428022141.2080-1-lidie@eswincomputing.com> From: Jeff Law In-Reply-To: <20230428022141.2080-1-lidie@eswincomputing.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,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: On 4/27/23 20:21, Die Li wrote: > Two issues have been observed in current riscv_expand_conditional_move > implementation. > 1. Before introduction of TARGET_XTHEADCONDMOV, op0 of comparision expression > is used for mode comparision with word_mode, but after TARGET_XTHEADCONDMOV > megered with TARGET_SFB_ALU, dest of if-then-else is used for mode comparision with > word_mode, and from md file mode of dest is DI or SI which can be different with > word_mode in RV64. > > 2. TARGET_XTHEADCONDMOV cannot be generated when the mode of the comparison is E_VOID. > > This patch solves the issues above. > > Provide an example from the newly added test case. > > Testcase: > int ConNmv_reg_reg_reg(int x, int y, int z, int n){ > if (x != y) return z; > return n; > } > > Cflags: > -O2 -march=rv64gc_xtheadcondmov -mabi=lp64d > > before patch: > ConNmv_reg_reg_reg: > bne a0,a1,.L23 > mv a2,a3 > .L23: > mv a0,a2 > ret > > after patch: > ConNmv_reg_reg_reg: > sub a1,a0,a1 > th.mveqz a2,zero,a1 > th.mvnez a3,zero,a1 > or a0,a2,a3 > ret > > Co-Authored by: Fei Gao > Signed-off-by: Die Li > > gcc/ChangeLog: > > * config/riscv/riscv.cc (riscv_expand_conditional_move): Fix mode checking. > > gcc/testsuite/ChangeLog: > > * gcc.target/riscv/xtheadcondmov-indirect-rv32.c: New test. > * gcc.target/riscv/xtheadcondmov-indirect-rv64.c: New test. > --- > gcc/config/riscv/riscv.cc | 4 +- > .../riscv/xtheadcondmov-indirect-rv32.c | 116 ++++++++++++++++++ > .../riscv/xtheadcondmov-indirect-rv64.c | 116 ++++++++++++++++++ > 3 files changed, 234 insertions(+), 2 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadcondmov-indirect-rv32.c > create mode 100644 gcc/testsuite/gcc.target/riscv/xtheadcondmov-indirect-rv64.c > > diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc > index 1529855a2b4..30ace45dc5f 100644 > --- a/gcc/config/riscv/riscv.cc > +++ b/gcc/config/riscv/riscv.cc > @@ -3411,7 +3411,7 @@ riscv_expand_conditional_move (rtx dest, rtx op, rtx cons, rtx alt) > && GET_MODE_CLASS (mode) == MODE_INT > && reg_or_0_operand (cons, mode) > && reg_or_0_operand (alt, mode) > - && GET_MODE (op) == mode > + && (GET_MODE (op) == mode || GET_MODE (op) == E_VOIDmode) So I nearly suggested we just drop this check. In general comparisons don't have modes. But I don't think it's going to hurt and it lines up with the predicates that test for conditions. Note that some of the new tests are still failing (though they certainly do much better after your patch) . > FAIL: gcc.target/riscv/xtheadcondmov-indirect-rv32.c -O1 check-function-bodies ConNmv_imm_imm_r > FAIL: gcc.target/riscv/xtheadcondmov-indirect-rv32.c -O2 check-function-bodies ConNmv_imm_imm_reg > FAIL: gcc.target/riscv/xtheadcondmov-indirect-rv32.c -O2 -flto -fno-use-linker-plugin -flto-partition=none check-function-bodies ConNmv_imm_imm_reg > FAIL: gcc.target/riscv/xtheadcondmov-indirect-rv32.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects check-function-bodies ConNmv_imm_imm_reg > FAIL: gcc.target/riscv/xtheadcondmov-indirect-rv32.c -O3 -g check-function-bodies ConNmv_imm_imm_reg [ ... and a few more instances omitted ... ] I went ahead and pushed the patch, but you might want to double-check the state of those failing tests. Jeff