Hi everyone,
I was working around with the analyzer, but I usually dump the SSA-tree
to get a view of the analyzed code.
This is how I noticed something wrong, at least in the sense of the
definition of SSA form.
I'm using a version of gcc build from a /trunk/ branch (/20230309/).
Here is an example code:
'''
int main(void) {
int x = 42;
int * y = &x;
x = 6;
return x;
}
'''
And here is the output from -fdump-tree-ssa-vops:
'''
;; Function main (main, funcdef_no=0, decl_uid=2739, cgraph_uid=1,
symbol_order=0)
int main ()
{
int * y;
int x;
int D.2744;
int _5;
<bb 2> :
# .MEM_2 = VDEF <.MEM_1(D)>
x = 42; // First assignment
to var_decl x
y_3 = &x;
# .MEM_4 = VDEF <.MEM_2>
x = 6; // Second
assignment to var_decl x
# VUSE <.MEM_4>
_5 = x;
# .MEM_6 = VDEF <.MEM_4>
x ={v} {CLOBBER(eol)};
<bb 3> :
<L1>:
# VUSE <.MEM_6>
return _5;
}
'''
The thing is, there is two distinct assignment to the same LHS tree at
two different gimple statement, which is by definition not supposed to
happened in SSA form.
Is there any particular reason this happen? Is that because the address
of x is taken and stored?
I have to precise, I did not dig into the SSA form transformation and am
a newbie to gcc source code.
So maybe my question is a bit naive or a known issue.
Thank you for your time,
Pierrick