Re: sparse-llvm incorrect definition of local variables

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux