Hi Chris, On 20 August 2017 at 16:44, Christopher Li <sparse@xxxxxxxxxxx> wrote: > On Sun, Aug 20, 2017 at 10:54 AM, Dibyendu Majumdar > <mobile@xxxxxxxxxxxxxxx> wrote: >> I am trying to get to grips with the Sparse Linear format and the use >> of pseudos. >> >> 1) A Sparse document says that pseudos are akin to SSA variables. Is >> that a true statement - i.e. do pseudos follow the discipline that >> only one assignment to a pseudo is allowed. As pseudos have also >> different sub-types - does this statement apply to all pseudo types or >> only some sub types? > > The pseudo should be SSA, it apply to all types of pseudo. > You can thing of pseudos are similar to LLVM virtual registers. > I am wondering if this is true - please see my reply to Luc. In particular it seems that stores to local variables are represented by PSEUDO_SYMs and multiple assignments can occur to these. Hence the PSEUDO_SYMs and probably PSEUDO_ARGs too are not SSA? >> >> 2) In a recent conversation it was stated that the baseline Linear >> output from Sparse is already in SSA form. That implies that all >> pseudos used are in SSA form already. However we know that in the >> baseline line IR phi nodes may not be present. In LLVM the initial IR >> lacks phi nodes too - instead local stack memory and load/store >> sequences are used. However LLVM IR is still SSA at this stage. When >> it is said that the baseline Linear IR is already SSA is it in this >> sense? > > There are two different things happen here. For the IR that is > generated from linearizing, without the simplification, all the pseudo > is already SSA. It does not need phi node because all the internal > usage of the pseudo already dominated by the pseudo defines. > > There is a separate phase, in simplify symbol access, will try to promote > the memory load/store into the SSA pseudo registers. That is where > the phi nodes come it. > > LLVM is similar in that regard. The very first batch of the byte code > contain raw load/store on memory variables. You will not see the SSA > on the memory variable. Then there is a pass call "promote memory > to scalar". In this pass it will convert the memory access into SSA > virtual registers. > Agreed - however there is one difference it seems. LLVM explicits outputs alloca instructions for each memory location - and then does store/load on these. In Sparse though, a sub type of pseudo - PSEUDO_SYM is used for the same, right? Regards Dibyendu -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html