[llvm-commits] [llvm] r42588 - /llvm/trunk/docs/LangRef.html

Chris Lattner sabre at nondot.org
Wed Oct 3 14:01:14 PDT 2007


Author: lattner
Date: Wed Oct  3 16:01:14 2007
New Revision: 42588

URL: http://llvm.org/viewvc/llvm-project?rev=42588&view=rev
Log:
Clarify that shifts that are too large are undefined.

Modified:
    llvm/trunk/docs/LangRef.html

Modified: llvm/trunk/docs/LangRef.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.html?rev=42588&r1=42587&r2=42588&view=diff

==============================================================================
--- llvm/trunk/docs/LangRef.html (original)
+++ llvm/trunk/docs/LangRef.html Wed Oct  3 16:01:14 2007
@@ -2168,18 +2168,28 @@
 <h5>Syntax:</h5>
 <pre>  <result> = shl <ty> <var1>, <var2>   <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>
   <result> = shl i32 4, %var   <i>; yields {i32}: 4 << %var</i>
   <result> = shl i32 4, 2      <i>; yields {i32}: 16</i>
   <result> = shl i32 1, 10     <i>; yields {i32}: 1024</i>
+  <result> = shl i32 1, 32     <i>; undefined</i>
 </pre>
 </div>
 <!-- _______________________________________________________________________ -->
@@ -2199,9 +2209,11 @@
 <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 @@
   <result> = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
   <result> = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
   <result> = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
+  <result> = lshr i32 1, 32  <i>; undefined</i>
 </pre>
 </div>
 
@@ -2232,7 +2245,9 @@
 <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 @@
   <result> = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
   <result> = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
   <result> = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
+  <result> = ashr i32 1, 32  <i>; undefined</i>
 </pre>
 </div>
 





More information about the llvm-commits mailing list