From: "Fei Gao" <gaofei@eswincomputing.com>
To: jeffreyalaw <jeffreyalaw@gmail.com>,
gcc-patches <gcc-patches@gcc.gnu.org>
Cc: "Kito Cheng" <kito.cheng@gmail.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>
Subject: Re: Re: [PATCH 4/4] [ifcvt] if convert x=c ? y&z : y by RISC-V Zicond like insns
Date: Tue, 28 Nov 2023 11:04:34 +0800 [thread overview]
Message-ID: <20231128110434034974151@eswincomputing.com> (raw)
In-Reply-To: <ea175f9c-2501-43bd-89f3-793df32b514c@gmail.com>
On 2023-11-20 15:10 Jeff Law <jeffreyalaw@gmail.com> wrote:
>
>
>
>On 10/30/23 01:25, Fei Gao wrote:
>
>> diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
>> index 6e341fc4d4b..cfa9bc4b850 100644
>> --- a/gcc/ifcvt.cc
>> +++ b/gcc/ifcvt.cc
>> @@ -2911,7 +2911,7 @@ noce_try_sign_mask (struct noce_if_info *if_info)
>> static bool
>> noce_cond_zero_binary_op_supported (enum rtx_code op)
>> {
>> - if (op == PLUS || op == MINUS || op == IOR || op == XOR)
>> + if (op == PLUS || op == MINUS || op == IOR || op == XOR || op == AND)
>> return true;
>Include ASHIFT, LSHIFTRT, ASHIFTRT, ROTATE, ROTATERT. That should pick
>up that critical conditional-shift-by-6 in leela.
Done.
>
>
>
>
>> + if (opcode == AND)
>> + {
>> + tmp
>> + = expand_simple_binop (mode, AND, common, z, NULL_RTX, 0, OPTAB_DIRECT);
>OPTAB_WIDEN here I think.
I restructured the codes to have a simple implementation. But AND is different from
others operations in czero based ifcvt, I kept the ugly codes locally. I will refine it and post
if current codes accepted.
>
>
>> + if (!tmp)
>> + {
>> + end_sequence ();
>> + return FALSE;
>> + }
>>
>> - /* If we have x = c ? x + z : x, use a new reg to avoid modifying x */
>> - if (common && rtx_equal_p (common, if_info->x))
>> - target = gen_reg_rtx (mode);
>> - else
>> - target = if_info->x;
>> + target = noce_emit_czero (if_info, czero_code, common, if_info->x);
>> + if (!target)
>> + {
>> + end_sequence ();
>> + return FALSE;
>Please try to be consistent with upper/lower case. In your prior
>patches you used lower case for true/false. In this patch you're using
>upper case. Lower case seems to be the standard in that file, so use
>lower case.
>
>> + }
>>
>> - target = noce_emit_czero (if_info, czero_code, z, target);
>> - if (!target)
>> - {
>> - end_sequence ();
>> - return false;
>> + target = expand_simple_binop (mode, IOR, tmp, target, if_info->x, 0,
>> + OPTAB_DIRECT);
>> }
>> + else
>> + {
>> + /* If we have x = c ? x + z : x, use a new reg to avoid modifying x */
>> + if (common && rtx_equal_p (common, if_info->x))
>> + target = gen_reg_rtx (mode);
>> + else
>> + target = if_info->x;
>As noted before you may not be able to generate a new register when
>ifcvt is run after register allocation. Your code needs to handle that
>correctly.
>
>
>> +
>> + target = noce_emit_czero (if_info, czero_code, z, target);
>> + if (!target)
>> + {
>> + end_sequence ();
>> + return false;
>> + }
>>
>> - target = expand_simple_binop (mode, opcode, common, target, if_info->x, 0,
>> - OPTAB_DIRECT);
>> + target = expand_simple_binop (mode, opcode, common, target, if_info->x, 0,
>> + OPTAB_DIRECT);
>OPTAB_WIDEN.
>
>And the usual comments about avoiding explicit registers in the tests.
>
>
>I would suggest you try to handle this case as well, I don't think it's
>handled by your current code:
>
>long
>eq2 (long a, long b)
>{
> if (a == 0)
> return b;
>
> return 0;
>}
I tried both in old and new series. Zicond insns could be generated.
BR,
Fei
>
>
>There's probably also a negated version of that to be handled as well.
>
>
>Overall I think we can go forward with your patches after things are
>fixed. I'm inclined to wait until after Maciej has integrated his
>changes before actually committing them. While I don't expect problems,
>I wouldn't want Maciej to have to respin a 40+ patch series.
>
>Note that while we transition to stage3 development today, your patch
>was posted while we were in stage1, so you've met the deadline. We just
>need to get the updates done relatively soon rather than having it drag
>late into stage3.
>
>Jeff
prev parent reply other threads:[~2023-11-28 3:04 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-30 7:25 [PATCH 0/4] add support for conditional zero operation Fei Gao
2023-10-30 7:25 ` [PATCH 1/4] [RISC-V]add hook to control Zicond based ifcvt opt Fei Gao
2023-10-30 15:12 ` Jeff Law
2023-10-30 7:25 ` [PATCH 2/4] [ifcvt] if convert x=c ? y+z : y by RISC-V Zicond like insns Fei Gao
2023-10-30 16:36 ` Jeff Law
2023-10-31 2:53 ` Fei Gao
2023-10-30 18:41 ` Jeff Law
2023-10-30 19:16 ` Jeff Law
2023-10-31 3:35 ` Fei Gao
2023-11-20 6:46 ` Jeff Law
2023-11-28 2:46 ` Fei Gao
2023-11-28 5:05 ` Jeff Law
2023-11-20 6:59 ` Jeff Law
2023-11-28 2:57 ` Fei Gao
2023-11-29 4:46 ` Jeff Law
2023-10-30 7:25 ` [PATCH 3/4] [ifcvt] if convert x=c ? y op z " Fei Gao
2023-11-20 7:02 ` Jeff Law
2023-10-30 7:25 ` [PATCH 4/4] [ifcvt] if convert x=c ? y&z " Fei Gao
2023-10-30 18:46 ` Jeff Law
2023-11-20 7:10 ` Jeff Law
2023-11-28 3:04 ` Fei Gao [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231128110434034974151@eswincomputing.com \
--to=gaofei@eswincomputing.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jeffreyalaw@gmail.com \
--cc=kito.cheng@gmail.com \
--cc=palmer@dabbelt.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).