Clarify that shifts that are too large are undefined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42588 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/docs/LangRef.html b/docs/LangRef.html
index 308dd20..10fb2e6 100644
--- a/docs/LangRef.html
+++ b/docs/LangRef.html
@@ -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>