Hi Luc, On 8 March 2017 at 06:53, Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> wrote: > On Tue, Mar 07, 2017 at 07:31:34AM +0000, Dibyendu Majumdar wrote: >> >> Here 'values' has been defined above as external global, whereas it >> >> should be allocated on the stack. >> > >> > Mmmh, I'll need to look a bit further at this one. >> > >> >> It appears that sparse-llvm only creates a local stack object for each >> OP_PHI instruction. What should be the general approach for >> identifying local stack objects in sparse linearized output? > > I've looked a bit at this and there is several issues at hand. > It's also not something LLVM specific. > So I can't answer to this for now. Hopefully, I'll be able to tell > you more in a few days. > Thank you for looking into this. It would be good to know what issues you have discovered. I was wondering if a simple solution is to check whether the symbol is marked as toplevel / extern - and if not then define it as a local symbol in LLVM. However we would need to handle scope - i.e. if the same symbol occurs multiple times in a function in different scopes then these need to be defined accordingly. Example: extern void init(int *v); int main(const char *argv[]) { int n = 0; { int x[5]; init(x); n += x[0]; } { int x[6]; init(x); n += x[0]; } return n; } 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