On Mon, Apr 28, 2025 at 1:13 AM Richard Biener
<richard.guent...@gmail.com> wrote:
>
> On Sun, Apr 27, 2025 at 12:51 AM Andrew Pinski <quic_apin...@quicinc.com> 
> wrote:
> >
> > While looking into adding __ROTATE_LEFT and __ROTATE_RIGHT, I noticed
> > this code is just a bunch of if statments repeated. Instead we could just
> > use a simple lookup array to do the same thinga and it would be easier to
> > add to the array instead of duplicating the if sequence again.
> >
> > Bootstrapped and tested on x86_64-linux-gnu.
> >
> > gcc/c/ChangeLog:
> >
> >         * gimple-parser.cc (gimple_binary_identifier_code): New variable.
> >         (c_parser_gimple_binary_expression): Use 
> > gimple_binary_identifier_code
> >         instead of doing if statements on the strings.
> >
> > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> > ---
> >  gcc/c/gimple-parser.cc | 107 +++++++++++------------------------------
> >  1 file changed, 29 insertions(+), 78 deletions(-)
> >
> > diff --git a/gcc/c/gimple-parser.cc b/gcc/c/gimple-parser.cc
> > index 90b9beb1e9f..34850d7c359 100644
> > --- a/gcc/c/gimple-parser.cc
> > +++ b/gcc/c/gimple-parser.cc
> > @@ -963,6 +963,27 @@ c_parser_gimple_statement (gimple_parser &parser, 
> > gimple_seq *seq)
> >    return;
> >  }
> >
> > +/* A mapping between an identifier to a tree code for binary operations. */
> > +static const std::pair<const char *, tree_code> 
> > gimple_binary_identifier_code[] =
>
> Does this get us a compile-time initializer?
>
> If so, OK.

yes this gets up compile time initializers. I double checked that
before I submitted the patch.
0000000000000420 r _ZL29gimple_binary_identifier_code

Which shows the symbol is in the read only section and there are no
global initializers either.

Thanks,
Andrew

>
> Richard.
>
> > +  {
> > +    {"__MULT_HIGHPART", MULT_HIGHPART_EXPR},
> > +    {"__UNLT", UNLT_EXPR},
> > +    {"__UNLE", UNLE_EXPR},
> > +    {"__UNGT", UNGT_EXPR},
> > +    {"__UNGE", UNGE_EXPR},
> > +    {"__UNEQ", UNEQ_EXPR},
> > +    {"__UNORDERED", UNORDERED_EXPR},
> > +    {"__ORDERED", ORDERED_EXPR},
> > +    {"__LTGT", LTGT_EXPR},
> > +    {"__FLOOR_DIV", FLOOR_DIV_EXPR},
> > +    {"__ROUND_DIV", ROUND_DIV_EXPR},
> > +    {"__EXACT_DIV", EXACT_DIV_EXPR},
> > +    {"__CEIL_DIV", CEIL_DIV_EXPR},
> > +    {"__FLOOR_MOD", FLOOR_MOD_EXPR},
> > +    {"__ROUND_MOD", ROUND_MOD_EXPR},
> > +    {"__CEIL_MOD", CEIL_MOD_EXPR},
> > +  };
> > +
> >  /* Parse gimple binary expr.
> >
> >     gimple-binary-expression:
> > @@ -1061,86 +1082,16 @@ c_parser_gimple_binary_expression (gimple_parser 
> > &parser, tree ret_type)
> >      case CPP_NAME:
> >        {
> >         tree id = c_parser_peek_token (parser)->value;
> > -       if (strcmp (IDENTIFIER_POINTER (id), "__MULT_HIGHPART") == 0)
> > -         {
> > -           code = MULT_HIGHPART_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__UNLT") == 0)
> > -         {
> > -           code = UNLT_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__UNLE") == 0)
> > -         {
> > -           code = UNLE_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__UNGT") == 0)
> > -         {
> > -           code = UNGT_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__UNGE") == 0)
> > -         {
> > -           code = UNGE_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__UNEQ") == 0)
> > -         {
> > -           code = UNEQ_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__UNORDERED") == 0)
> > -         {
> > -           code = UNORDERED_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__ORDERED") == 0)
> > -         {
> > -           code = ORDERED_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__LTGT") == 0)
> > +       for (auto &p : gimple_binary_identifier_code)
> >           {
> > -           code = LTGT_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__FLOOR_DIV") == 0)
> > -         {
> > -           code = FLOOR_DIV_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__ROUND_DIV") == 0)
> > -         {
> > -           code = ROUND_DIV_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__EXACT_DIV") == 0)
> > -         {
> > -           code = EXACT_DIV_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__CEIL_DIV") == 0)
> > -         {
> > -           code = CEIL_DIV_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__FLOOR_MOD") == 0)
> > -         {
> > -           code = FLOOR_MOD_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__ROUND_MOD") == 0)
> > -         {
> > -           code = ROUND_MOD_EXPR;
> > -           break;
> > -         }
> > -       else if (strcmp (IDENTIFIER_POINTER (id), "__CEIL_MOD") == 0)
> > -         {
> > -           code = CEIL_MOD_EXPR;
> > -           break;
> > +           if (strcmp (IDENTIFIER_POINTER (id), p.first) == 0)
> > +             {
> > +               code = p.second;
> > +               break;
> > +             }
> >           }
> > +       if (code != ERROR_MARK)
> > +         break;
> >        }
> >        /* Fallthru.  */
> >      default:
> > --
> > 2.43.0
> >

Reply via email to