Richard Biener <rguent...@suse.de> writes: > tree.h already contains combined_fn handling at the top and moving > code_helper away from gimple-match.h makes improving the gimple_build > API easier.
Nice. Thanks for doing this. Richard > > Bootstrapped on x86_64-unknown-linux-gnu. > > Will push this if there are no comments when I've finished > enhancing the gimple_build API (and moving pieces out from > gimple-match.h). > > Richard. > > 2022-05-16 Richard Biener <rguent...@suse.de> > > * gimple-match.h (code_helper): Move class ... > * tree.h (code_helper): ... here. > --- > gcc/gimple-match.h | 49 ---------------------------------------------- > gcc/tree.h | 49 ++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 49 insertions(+), 49 deletions(-) > > diff --git a/gcc/gimple-match.h b/gcc/gimple-match.h > index d7b0b676059..e96c31ed09f 100644 > --- a/gcc/gimple-match.h > +++ b/gcc/gimple-match.h > @@ -23,55 +23,6 @@ along with GCC; see the file COPYING3. If not see > #define GCC_GIMPLE_MATCH_H > > > -/* Helper to transparently allow tree codes and builtin function codes > - exist in one storage entity. */ > -class code_helper > -{ > -public: > - code_helper () {} > - code_helper (tree_code code) : rep ((int) code) {} > - code_helper (combined_fn fn) : rep (-(int) fn) {} > - code_helper (internal_fn fn) : rep (-(int) as_combined_fn (fn)) {} > - explicit operator tree_code () const { return (tree_code) rep; } > - explicit operator combined_fn () const { return (combined_fn) -rep; } > - explicit operator internal_fn () const; > - explicit operator built_in_function () const; > - bool is_tree_code () const { return rep > 0; } > - bool is_fn_code () const { return rep < 0; } > - bool is_internal_fn () const; > - bool is_builtin_fn () const; > - int get_rep () const { return rep; } > - bool operator== (const code_helper &other) { return rep == other.rep; } > - bool operator!= (const code_helper &other) { return rep != other.rep; } > - bool operator== (tree_code c) { return rep == code_helper (c).rep; } > - bool operator!= (tree_code c) { return rep != code_helper (c).rep; } > - > -private: > - int rep; > -}; > - > -inline code_helper::operator internal_fn () const > -{ > - return as_internal_fn (combined_fn (*this)); > -} > - > -inline code_helper::operator built_in_function () const > -{ > - return as_builtin_fn (combined_fn (*this)); > -} > - > -inline bool > -code_helper::is_internal_fn () const > -{ > - return is_fn_code () && internal_fn_p (combined_fn (*this)); > -} > - > -inline bool > -code_helper::is_builtin_fn () const > -{ > - return is_fn_code () && builtin_fn_p (combined_fn (*this)); > -} > - > /* Represents the condition under which an operation should happen, > and the value to use otherwise. The condition applies elementwise > (as for VEC_COND_EXPR) if the values are vectors. */ > diff --git a/gcc/tree.h b/gcc/tree.h > index 5f4b03dc5df..c92c5bf344b 100644 > --- a/gcc/tree.h > +++ b/gcc/tree.h > @@ -75,6 +75,55 @@ as_internal_fn (combined_fn code) > return internal_fn (int (code) - int (END_BUILTINS)); > } > > +/* Helper to transparently allow tree codes and builtin function codes > + exist in one storage entity. */ > +class code_helper > +{ > +public: > + code_helper () {} > + code_helper (tree_code code) : rep ((int) code) {} > + code_helper (combined_fn fn) : rep (-(int) fn) {} > + code_helper (internal_fn fn) : rep (-(int) as_combined_fn (fn)) {} > + explicit operator tree_code () const { return (tree_code) rep; } > + explicit operator combined_fn () const { return (combined_fn) -rep; } > + explicit operator internal_fn () const; > + explicit operator built_in_function () const; > + bool is_tree_code () const { return rep > 0; } > + bool is_fn_code () const { return rep < 0; } > + bool is_internal_fn () const; > + bool is_builtin_fn () const; > + int get_rep () const { return rep; } > + bool operator== (const code_helper &other) { return rep == other.rep; } > + bool operator!= (const code_helper &other) { return rep != other.rep; } > + bool operator== (tree_code c) { return rep == code_helper (c).rep; } > + bool operator!= (tree_code c) { return rep != code_helper (c).rep; } > + > +private: > + int rep; > +}; > + > +inline code_helper::operator internal_fn () const > +{ > + return as_internal_fn (combined_fn (*this)); > +} > + > +inline code_helper::operator built_in_function () const > +{ > + return as_builtin_fn (combined_fn (*this)); > +} > + > +inline bool > +code_helper::is_internal_fn () const > +{ > + return is_fn_code () && internal_fn_p (combined_fn (*this)); > +} > + > +inline bool > +code_helper::is_builtin_fn () const > +{ > + return is_fn_code () && builtin_fn_p (combined_fn (*this)); > +} > + > /* Macros for initializing `tree_contains_struct'. */ > #define MARK_TS_BASE(C) \ > (tree_contains_struct[C][TS_BASE] = true)