[LLVMdev] clang promoting local to global

Ryan Taylor ryta1203 at gmail.com
Wed Aug 15 16:20:20 PDT 2012


On Wed, Aug 15, 2012 at 4:10 PM, Eli Friedman <eli.friedman at gmail.com>wrote:

> 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
> >>
> >>
> >
>

#define other_def(x, tab, vf, rf, c)     (x ^ tab[0][x ^ c0 ^ vf ^ rf ^ c)
#define my_def(y,x,k,c)      defs(y,c) = (k}[c] ^ other_def(x, it_tab,
inv_var, rf1, c)
void my_func() {
     #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(.......) ....... };
}

You prefer bottom posting? Ok.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120815/17e9f4f4/attachment.html>


More information about the llvm-dev mailing list