On Fri, Apr 5, 2024 at 3:44 PM Pierrick Philippe <pierrick.phili...@irisa.fr> wrote: > > On 05/04/2024 14:46, Richard Biener wrote: > > On Fri, Apr 5, 2024 at 1:59 PM Pierrick Philippe > <pierrick.phili...@irisa.fr> wrote: > > Hi all, > > I do have a question regarding ssa_name and result_decl. > > For example on the following gimple function: > > int f () > { > int x; > int D.2747; > int _2; > > <bb 2> : > x_1 = 42; > _2 = x_1; > > <bb 3> : > <L0>: > return _2; > > } > > On the above example, using the macro SSA_NAME_VAR() on _2 does not > yield anything usable. > Neither to call ssa_default_def() on the result of the result_decl > obtain through macro DECL_RESULT(). > > Is there a way to get the ssa_name corresponding to the result_decl of a > function obtained through the use of macro DECL_RESULT() on a fn_decl? > And/or the other way around? I.e., from the returned ssa_name of a > function to the result_decl of that function? > > I totally might be missing something here, but I cannot figure out what. > > DECL_RESULT isn't always used (as in your example). Not all SSA names > have corresponding declarations, we have "anonymous" SSA names which > have a NULL_TREE SSA_NAME_VAR (such as the _2 in your example). > > I see, that makes so much more sense to me now. > > What do you try to find in the end? If you want to find all returns you can > walk predecessors of EXIT_BLOCK and look at their last stmt whether they > are greturn statements. > > I am implementing a state_machine within the analyzer, and I am trying to > understand where would be the best place to propagate the state of the return > value. > I intuitively thought it would be best to do so in the > state_machine::on_pop_frame() method, which is called by the analyzer between > the two frames of the caller and the callee. What I do have access to is the > struct function of the callee/caller, the gcall instruction in the caller and > the callee have been processed by my analysis.
It might make sense to record the analysis of the return value in meta-data that the analyzer keeps and access it that way. Other than that you'd have to do it the way I said with finding the greturn stmts again and look at what is returned there. > And to illustrate, here I do have the _2 ssa_name and its state which I know > in that case should be propagate to the lhs of the caller gcall instruction. > > Again I might be taking this in a wrong way. > > Richard. > > Thanks for your time, > > Pierrick