This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

gimple build interface


First attempt bounced from gcc-patches for some reason.... trying one more time.

I'm looking at pulling ssa specific bits out of gimple.c so that it doesn't require the ssa headers, and can concentrate on basic gimple support. I stumbled across the "new" build interface in gimple.c consisting of these routines:


* Helper functions to build GIMPLE statements.  */
tree create_gimple_tmp (tree, enum ssa_mode = M_SSA);
gimple build_assign (enum tree_code, tree, int, enum ssa_mode = M_SSA);
gimple build_assign (enum tree_code, gimple, int, enum ssa_mode = M_SSA);
gimple build_assign (enum tree_code, tree, tree, enum ssa_mode = M_SSA);
gimple build_assign (enum tree_code, gimple, tree, enum ssa_mode = M_SSA);
gimple build_assign (enum tree_code, tree, gimple, enum ssa_mode = M_SSA);
gimple build_assign (enum tree_code, gimple, gimple, enum ssa_mode = M_SSA);
gimple build_type_cast (tree, tree, enum ssa_mode = M_SSA);
gimple build_type_cast (tree, gimple, enum ssa_mode = M_SSA);



currently only used in asan.c

the routine giving me trouble is:

tree
create_gimple_tmp (tree type, enum ssa_mode mode)
{
  return (mode == M_SSA)
         ? make_ssa_name (type, NULL)
         : create_tmp_var (type, NULL);
}


Other than one other routine that doesn't belong in gimple.c anyway, this call to make_ssa_name() is the only thing preventing gimple.c from not requiring tree-ssa.h.

This new interface is really trying to bridge the gap between gimple and ssa and simplify the life of anyone needing to generate a series of instructions. Before actually making any code changes, I wanted to get a consensus on the future direction of this interface.

I see the benefit in the streamlined asan.c code, but I detest that ssa_mode flag. And as long as it supports SSA, I don't think it should be in gimple.c.

I think this is of most use to ssa passes that need to construct code snippets, so I propose we make this ssa specific and put it in tree-ssa.c (renaming it ssa_build_assign), *OR* we could leave it general purpose and put it in its own set of files, gimple-ssa-build.[ch] or something that crosses the border between the two representations.

I'd also suggest that the final optional parameter be changed to tree *lhs = NULL_TREE, which would allow the caller to specify the LHS if they want, otherwise make_ssa_name would be called. If we want to leave it supporting both gimple and ssa, then anyone from gimple land could pass in a gimple LHS variable thus avoiding the call to make_ssa_name....

Thoughts?
Andrew


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]