Hi Yuriy:

V2 is LGTM, thanks :)

On Wed, Feb 26, 2025 at 3:06 AM Yuriy Kolerov
<yuriy.kole...@synopsys.com> wrote:
>
> Hi Jeff,
>
> That check is performed in a lambda function:
>
>   {"zce", "zcf",
>    [] (const riscv_subset_list *subset_list) -> bool
>    {
>      return subset_list->xlen () == 32 && subset_list->lookup ("f");
>    }},
>
> The typo was in a rule itself:
>
> {"zcf", "f", ...
>
> So, with this fix zcf in implied by zce if this condition is passed:
>
> subset_list->xlen () == 32 && subset_list->lookup ("f")
>
> Before 9e12010b5e724277ea this rule was implemented in this code:
>
>   if (subset_list->lookup ("zce") != NULL
>         && subset_list->m_xlen == 32
>         && subset_list->lookup ("f") != NULL
>         && subset_list->lookup ("zcf") == NULL)
>     subset_list->add ("zcf", false);
>
> But it was accidentally refactored in a wrong way.
>
> Regards,
> Yuriy Kolerov
>
> -----Original Message-----
> From: Jeff Law <jeffreya...@gmail.com>
> Sent: Tuesday, February 25, 2025 4:46 PM
> To: Yuriy Kolerov <ykole...@synopsys.com>; gcc-patches@gcc.gnu.org
> Cc: Artemiy Volkov <arte...@synopsys.com>
> Subject: Re: [PATCH v2] RISC-V: Fix a typo in zce to zcf implication
>
>
>
> On 2/24/25 3:22 AM, Yuriy Kolerov wrote:
> > zce must imply zcf but this rule was corrupted after refactoring in
> > 9e12010b5e724277ea. This may be observed ater generating an .s file
> > from any source code file with -mriscv-attribute -march=rv32if_zce
> > -mabi=ilp32 -S options. A full march will be presented in arch
> > attribute:
> >
> >      rv32i2p1_f2p2_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0
> >
> > As you see, zcf is not presented here though f_zce pair is passed in
> > -march. According to The RISC-V Instruction Set Manual:
> >
> >      Specifying Zce on RV32 with F includes Zca, Zcb, Zcmp,
> >      Zcmt and Zcf.
> >
> >       PR target/118906
> >
> > gcc/ChangeLog:
> >
> >       * common/config/riscv/riscv-common.cc: fix zce to zcf
> >       implication.
> >
> > gcc/testsuite/ChangeLog:
> >
> >       * gcc.target/riscv/attribute-zce-1.c: New test.
> >       * gcc.target/riscv/attribute-zce-2.c: New test.
> >       * gcc.target/riscv/attribute-zce-3.c: New test.
> >       * gcc.target/riscv/attribute-zce-4.c: New test.
> I'm not 100% sure this is implementation is correct.  My understanding is 
> that zce implies zcf iff rv32 and f are also enabled.  So don't you need to 
> verify that rv32 and f are enabled?  Or is that done elsewhere?
>
> Though it looks like the other cases zce -> {zca, zcb, zcmp, zcmp} don't have 
> that check.
>
> It feels like I'm missing something in how all this works.
>
> Kito, you know this stuff better than I, thoughts?
>
>
> Jeff

Reply via email to