Document the newly generalized model for constant globals.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20136 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-02-12 19:30:21 +00:00
parent e6f8c5a716
commit 3689a34489

View File

@ -423,12 +423,22 @@ to have any linkage type other than "externally visible".</a></p>
<div class="doc_text"> <div class="doc_text">
<p>Global variables define regions of memory allocated at compilation <p>Global variables define regions of memory allocated at compilation time
time instead of run-time. Global variables may optionally be instead of run-time. Global variables may optionally be initialized. A
initialized. A variable may be defined as a global "constant", which variable may be defined as a global "constant", which indicates that the
indicates that the contents of the variable will never be modified contents of the variable will <b>never</b> be modified (enabling better
(enabling better optimization, allowing the global data to be placed in the optimization, allowing the global data to be placed in the read-only section of
read-only section of an executable, etc).</p> an executable, etc). Note that variables that need runtime initialization
cannot be marked "constant", as there is a store to the variable.</p>
<p>
LLVM explicitly allows <em>declarations</em> of global variables to be marked
constant, even if the final definition of the global is not. This capability
can be used to enable slightly better optimization of the program, but requires
the language definition to guarantee that optimizations based on the
'constantness' are valid for the translation units that do not include the
definition.
</p>
<p>As SSA values, global variables define pointer values that are in <p>As SSA values, global variables define pointer values that are in
scope (i.e. they dominate) all basic blocks in the program. Global scope (i.e. they dominate) all basic blocks in the program. Global