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 > >