I was creating a new gimple/folding interface and wanted some opinions on the interface.
typedef double_int (*nonzerobits_t)(tree var); typedef tree (*valueizer_t)(tree var); class gimple_combine { public: gimple_combine(nonzerobits_t a, valueizer_t b) : nonzerobitsf(a), valueizerv(b), allow_full_reassiocation(false) {} gimple_combine() : nonzerobitsf(NULL), valueizerv(NULL), allow_full_reassiocation(false) {} gimple_combine(bool reas) : nonzerobitsf(NULL), valueizerv(NULL), allow_full_reassiocation(reas) {} tree build2 (location_t, enum tree_code, tree, tree, tree); tree build1 (location_t, enum tree_code, tree, tree); tree build3 (location_t, enum tree_code, tree, tree, tree, tree); tree combine (gimple); private: nonzerobits_t nonzerobitsf; valueizer_t valueizerv; bool allow_full_reassiocation; tree binary (location_t, enum tree_code, tree, tree, tree); tree unary (location_t, enum tree_code, tree, tree); tree ternary (location_t, enum tree_code, tree, tree, tree, tree); }; bool replace_rhs_after_ssa_combine (gimple_stmt_iterator *, tree); This is what I have so far and wonder if there is anything else I should include. This will be used to replace the folding code in fold-const.c and gimple-fold.c. Thanks, Andrew Pinski