[llvm-dev] grouping global variables by alignment: safe to do at LLVM level, or only at Clang level?

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Mon Jul 25 18:55:22 PDT 2016


I do not believe that we guarantee any order of globals.  Unless someone else points out a case where we do, we should not intro extra complexity to provide a choice here.  

You may want to take a look an unnamed_addr flag on globals.  It may be relevant here.  (*may*)

Philip



> On Jul 25, 2016, at 3:36 PM, Abe Skolnik via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Dear all,
> 
> Howdy! ;-)  This is Abe of the Samsung Austin R&D Center`s compilers team.
> 
> As an early part of a project that should help performance on some CPUs, I would like to cause global variables [at least from C and C++ programs] to be grouped together according to their alignment needs, which should help to slightly reduce RAM requirements in some cases.  IMO this should be done at "-O3" and higher levels of optimization [maybe "-O2" and higher?] and at "-Oz" [and maybe also at "-Os"].  This change is likely to break some poorly-written programs which rely on undefined behavior by assuming that consecutively-{declared/defined} global variables are allocated consecutively in RAM, so I propose to allow those programs to go on compiling to code that works as the author expected when there is no strong optimization imperative for either RAM savings or performance.
> 
> My question this time is this: is re-ordering globals at the LLVM level both possible [without massive rewriting of LLVM] and safe?  I don`t know whether or not it`s safe because perhaps some languages -- unlike C and C++ -- _explicitly_ allow programmers to make the assumption that consecutively-written globals at the source-code level map to consecutively-allocated globals at run-time.  If so, and if any such language is using LLVM as a back-end, then changing that behavior at the LLVM level with _any_ optimization flag may break programs that _are_ well-formed according to the rules of their respective source language[s].
> 
> Regards,
> 
> Abe
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list