[LLVMdev] clang promoting local to global

Eli Friedman
Wed, 15 Aug 2012 23:10:51 -0000

On Wed, Aug 15, 2012 at 3:17 PM, Ryan Taylor <ryta1203 at gmail.com>
wrote:
> So there are some #define (defined outside the function scope) that use
> it_tab that are used inside the function, is this why it is promoting it to
> a global?

Macros shouldn't matter. Please give a complete testcase and steps to
reproduce.  And please don't top-post.

-Eli

>
> On Wed, Aug 15, 2012 at 2:57 PM, Ryan Taylor <ryta1203 at gmail.com>
wrote:
>>
>> #define r10(p,q,r,s) 0x##s##r##q##p
>>    #undef r
>>    #define r r10
>>     const word it_tab[4][256] = { r(const, const, const, const),
>> r(.......), r(.......) ....... };
>>
>> All of this is done inside the function I want the alloc in. The
variable
>> is not declared/defined/used anywhere else.
>>
>>
>>
>>
>> On Wed, Aug 15, 2012 at 12:00 PM, Eli Friedman <eli.friedman at
gmail.com>
>> wrote:
>>>
>>> On Wed, Aug 15, 2012 at 11:40 AM, Ryan Taylor <ryta1203 at
gmail.com> wrote:
>>> > Eli, thanks for responding, unfortunately, this did not
resolve my
>>> > issue.
>>> > It's a locally allocated array in the C code, but I'm
not seeing any
>>> > alloca
>>> > in the IR just geps from the variable, which is never setup.
>>>
>>> That's strange; I just checked, and -fno-merge-all-constants
>>> definitely does have an effect for a simple testcase like the
>>> following (just using clang -emit-llvm at -O0):
>>>
>>> void f() { const int x[5] = {1,2,3,4}; }
>>>
>>> What does your testcase look like?
>>>
>>> -Eli
>>
>>
>