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

Abe Skolnik via llvm-dev llvm-dev at lists.llvm.org
Mon Jul 25 15:36:40 PDT 2016

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



More information about the llvm-dev mailing list