On 8 March 2017 at 23:38, Dibyendu Majumdar <mobile@xxxxxxxxxxxxxxx> wrote: > 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; > } > I think by combining the symbol's identifier and address a unique reference can be created - thus whenever we encounter a symbol that is not extern or toplevel we should create a local object using the symbol's name + address as the LLVM identifier. 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