Clarify that shifts that are too large are undefined.
authorChris Lattner <sabre@nondot.org>
Wed, 3 Oct 2007 21:01:14 +0000 (21:01 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 3 Oct 2007 21:01:14 +0000 (21:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42588 91177308-0d34-0410-b5e6-96231b3b80d8

docs/LangRef.html

index 308dd207e5d51158a2f2ac5d77047068d19918d1..10fb2e6a6c7b6209b3eeee42dabb5c0ee58b4a79 100644 (file)
@@ -2168,18 +2168,28 @@ Instruction</a> </div>
 <h5>Syntax:</h5>
 <pre>  &lt;result&gt; = shl &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
 </pre>
+
 <h5>Overview:</h5>
+
 <p>The '<tt>shl</tt>' instruction returns the first operand shifted to
 the left a specified number of bits.</p>
+
 <h5>Arguments:</h5>
+
 <p>Both arguments to the '<tt>shl</tt>' instruction must be the same <a
  href="#t_integer">integer</a> type.</p>
 <h5>Semantics:</h5>
-<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.</p>
+
+<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.  If
+<tt>var2</tt> is (statically or dynamically) equal to or larger than the number
+of bits in <tt>var1</tt>, the result is undefined.</p>
+
 <h5>Example:</h5><pre>
   &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
   &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
   &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
+  &lt;result&gt; = shl i32 1, 32     <i>; undefined</i>
 </pre>
 </div>
 <!-- _______________________________________________________________________ -->
@@ -2199,9 +2209,11 @@ operand shifted to the right a specified number of bits with zero fill.</p>
 <a href="#t_integer">integer</a> type.</p>
 
 <h5>Semantics:</h5>
+
 <p>This instruction always performs a logical shift right operation. The most
 significant bits of the result will be filled with zero bits after the 
-shift.</p>
+shift.  If <tt>var2</tt> is (statically or dynamically) equal to or larger than
+the number of bits in <tt>var1</tt>, the result is undefined.</p>
 
 <h5>Example:</h5>
 <pre>
@@ -2209,6 +2221,7 @@ shift.</p>
   &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
   &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
   &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
+  &lt;result&gt; = lshr i32 1, 32  <i>; undefined</i>
 </pre>
 </div>
 
@@ -2232,7 +2245,9 @@ operand shifted to the right a specified number of bits with sign extension.</p>
 <h5>Semantics:</h5>
 <p>This instruction always performs an arithmetic shift right operation, 
 The most significant bits of the result will be filled with the sign bit 
-of <tt>var1</tt>.</p>
+of <tt>var1</tt>.  If <tt>var2</tt> is (statically or dynamically) equal to or
+larger than the number of bits in <tt>var1</tt>, the result is undefined.
+</p>
 
 <h5>Example:</h5>
 <pre>
@@ -2240,6 +2255,7 @@ of <tt>var1</tt>.</p>
   &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
   &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
   &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
+  &lt;result&gt; = ashr i32 1, 32  <i>; undefined</i>
 </pre>
 </div>