Note the relationship between C99 restrict and LLVM noalias, and
authorDan Gohman <gohman@apple.com>
Tue, 6 Jul 2010 15:26:33 +0000 (15:26 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 6 Jul 2010 15:26:33 +0000 (15:26 +0000)
clarify a few other things.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107659 91177308-0d34-0410-b5e6-96231b3b80d8

docs/GetElementPtr.html
docs/LangRef.html

index 1bf6f432de50f11b18603a6b4433a971fac9a712..3bf38a366d02c95928effd78bc79ba8567be2082 100644 (file)
@@ -64,7 +64,8 @@
 
 <div class="doc_text"> 
   <p>This document seeks to dispel the mystery and confusion surrounding LLVM's
-  GetElementPtr (GEP) instruction. Questions about the wily GEP instruction are
+  <a href="LangRef.html#i_getelementptr">GetElementPtr</a> (GEP) instruction.
+  Questions about the wily GEP instruction are
   probably the most frequently occurring questions once a developer gets down to
   coding with LLVM. Here we lay out the sources of confusion and show that the
   GEP instruction is really quite simple.
@@ -653,7 +654,8 @@ idx3 = (char*) &amp;MyVar + 8
      <li>Support C, C-like languages, and languages which can be
          conceptually lowered into C (this covers a lot).</li>
      <li>Support optimizations such as those that are common in
-         C compilers.</li>
+         C compilers. In particular, GEP is a cornerstone of LLVM's
+         <a href="LangRef.html#pointeraliasing">pointer aliasing model</a>.</li>
      <li>Provide a consistent method for computing addresses so that
          address computations don't need to be a part of load and
          store instructions in the IR.</li>
index ad730deffb85daf29bb55fcb5a85e91b462cf633..f8a2643803c28947193a691dd5b4419782b849ad 100644 (file)
@@ -1062,7 +1062,15 @@ declare signext i8 @returns_signed_char()
       The caller shares the responsibility with the callee for ensuring that
       these requirements are met.
       For further details, please see the discussion of the NoAlias response in
-      <a href="AliasAnalysis.html#MustMayNo">alias analysis</a>.</dd>
+      <a href="AliasAnalysis.html#MustMayNo">alias analysis</a>.<br>
+<br>
+      Note that this definition of <tt>noalias<tt> is intentionally
+      similar to the definition of <tt>restrict<tt> in C99 for function
+      arguments, thought it is slightly weaker.
+<br>
+      For function return values, C99's <tt>restrict</tt> is not meaningful,
+      while LLVM's <tt>noalias</tt> is.
+      </dd>
 
   <dt><tt><b><a name="nocapture">nocapture</a></b></tt></dt>
   <dd>This indicates that the callee does not make any copies of the pointer
@@ -2397,7 +2405,8 @@ has undefined behavior.</p>
 
 <li>An instruction with externally visible side effects depends on the most
     recent preceding instruction with externally visible side effects, following
-    the order in the IR. (This includes volatile loads and stores.)</li>
+    the order in the IR. (This includes
+    <a href="#volatile">volatile operations</a>.)</li>
 
 <li>An instruction <i>control-depends</i> on a
     <a href="#terminators">terminator instruction</a>