On 16/03/2023 17:30, Martin Jambor wrote:
Hello Pierrick,

On Thu, Mar 16 2023, Pierrick Philippe wrote:
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.
please note that only some DECLs are put into a SSA form in GCC, these
are sometimes referred to as "gimple registers" and you can query the
predicate is_gimple_reg to figure out whether a DECL is one (putting
aside "virtual operands" which are a special construct of alias
analysis, are in an SSA form but the predicate returns false for them
for some reason).

This means that global variables, volatile variables, aggregates,
variables which are not considered aggregates but are nevertheless
partially modified (think insertion into a vector) or variables which
need to live in memory (most probably because their address was taken)
are not put into an SSA form.  It may not be easily possible.

Alright, I understand, but I honestly find it confusing.

I mean, aren't they any passes relying on the pure SSA form properties to analyze code?
For example to DSE or DCE.

[stripping]
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.
I think it is now clear that x is not in SSA form because (at this stage
of the compilation) it is still considered to need to live in memory.
I think that I get your point.
It would be a heavy design change to be able to write it in pure 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.
No worries, we know these important details are not straightforward when
you see them for the first time.

Good luck with your gcc hacking!

Thanks! :)

Pierrick


Reply via email to