Thanks! I'll have to see what conditions led to everything working
before and change them to meet reality.

On Thu, 15 Jul 2021 at 10:35, Richard Biener <richard.guent...@gmail.com> wrote:
>
> On Thu, Jul 15, 2021 at 10:22 AM Erick Ochoa via Gcc <gcc@gcc.gnu.org> wrote:
> >
> > Hi,
> >
> > I was sorting SSA trees and DECL_P trees into different buckets. I
> > used DECL_P as a proxy for it being a local/global variable/function
> > (essentially a declaration). It seems that "probabilistically", I'm
> > kinda right. Normally there is no tree that is both an SSA_VAR_P and a
> > DECL_P at the same time, but there appears to be at least one in a
> > couple of large benchmarks.
> >
> > What could lead to a tree being declared both SSA_VAR_P and DECL_P?
>
> /* Nonzero if DECL represents an SSA name or a variable that can possibly
>    have an associated SSA name.  */
> #define SSA_VAR_P(DECL)                                                 \
>         (TREE_CODE (DECL) == VAR_DECL                                   \
>          || TREE_CODE (DECL) == PARM_DECL                               \
>          || TREE_CODE (DECL) == RESULT_DECL                             \
>          || TREE_CODE (DECL) == SSA_NAME)
>
> there's your answer.  SSA_VAR_P and DECL_P are not related in a way
> you think.
>
> > The first instance I've looked at where this happens the variable in
> > the source is a static class member. But are there other cases? And
> > why would it be the case that for smaller benchmarks there seems to be
> > no instance of trees that are both SSA_VAR_P and DECL_P at the same
> > time?
> >
> > I've been interpreting DECL_P as any variable that actually takes up
> > memory. E.g., for every DECL_P variable there will be space allocated
> > on the stack. But SSA_VAR_P does not need space allocated since they
> > are just an abstraction to think about the flow of assignments. For
> > example, we might have the following pseudo-gimple:
> >
> > PARM cond // variable cond is a boolean parameter (also DECL_P)
> > DECL int i. // variable i is a local integer declaration
> > // stack space is reserved for int i
> > if (cond)
> > {
> >   i_0 = 0 // i_0 is an SSA variable that corresponds to i
> > }
> > else
> > {
> >   i_1 = 1 // same
> > }
> > i_2 = phi(i_0, i_1)
> >
> > In the end i_x will refer to the stack location reserved for i. I
> > think that this is a somewhat naive view of the execution model but it
> > is not until now that I found a counter example.
> >
> > Is the above not the case?
> >
> > As another note, I have not gone through the details on how static
> > class member variables are implemented, so perhaps there are some
> > details there where it would make sense to have a variable be both
> > SSA_VAR_P and DECL_P.
> >
> > Can someone shed some light on this? Thanks!
> >
> > Thanks!

Reply via email to