Commit 2bf32ce9 authored by Tanya Lattner's avatar Tanya Lattner
Browse files

remove v[if]cmp functionality from the 2.4 release. These instructions will...

remove v[if]cmp functionality from the 2.4 release.  These instructions will be removed or substantially changes in mainline after the 2.4 release and we don't want to have to support these for backwards compatibility purposes.  Patch by Chris.

llvm-svn: 57732
parent 50e5d261
Loading
Loading
Loading
Loading
+0 −108
Original line number Diff line number Diff line
@@ -147,8 +147,6 @@
        <ol>
          <li><a href="#i_icmp">'<tt>icmp</tt>' Instruction</a></li>
          <li><a href="#i_fcmp">'<tt>fcmp</tt>' Instruction</a></li>
          <li><a href="#i_vicmp">'<tt>vicmp</tt>' Instruction</a></li>
          <li><a href="#i_vfcmp">'<tt>vfcmp</tt>' Instruction</a></li>
          <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
          <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li>
          <li><a href="#i_call">'<tt>call</tt>'  Instruction</a></li>
@@ -1778,12 +1776,6 @@ following is the syntax for constant expressions:</p>
  <dt><b><tt>fcmp COND ( VAL1, VAL2 )</tt></b></dt>
  <dd>Performs the <a href="#i_fcmp">fcmp operation</a> on constants.</dd>

  <dt><b><tt>vicmp COND ( VAL1, VAL2 )</tt></b></dt>
  <dd>Performs the <a href="#i_vicmp">vicmp operation</a> on constants.</dd>

  <dt><b><tt>vfcmp COND ( VAL1, VAL2 )</tt></b></dt>
  <dd>Performs the <a href="#i_vfcmp">vfcmp operation</a> on constants.</dd>

  <dt><b><tt>extractelement ( VAL, IDX )</tt></b></dt>

  <dd>Perform the <a href="#i_extractelement">extractelement
@@ -4051,106 +4043,6 @@ always yields an <a href="#t_primitive">i1</a> result, as follows:
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_vicmp">'<tt>vicmp</tt>' Instruction</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = vicmp &lt;cond&gt; &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;   <i>; yields {ty}:result</i>
</pre>
<h5>Overview:</h5>
<p>The '<tt>vicmp</tt>' instruction returns an integer vector value based on
element-wise comparison of its two integer vector operands.</p>
<h5>Arguments:</h5>
<p>The '<tt>vicmp</tt>' instruction takes three operands. The first operand is
the condition code indicating the kind of comparison to perform. It is not
a value, just a keyword. The possible condition code are:
<ol>
  <li><tt>eq</tt>: equal</li>
  <li><tt>ne</tt>: not equal </li>
  <li><tt>ugt</tt>: unsigned greater than</li>
  <li><tt>uge</tt>: unsigned greater or equal</li>
  <li><tt>ult</tt>: unsigned less than</li>
  <li><tt>ule</tt>: unsigned less or equal</li>
  <li><tt>sgt</tt>: signed greater than</li>
  <li><tt>sge</tt>: signed greater or equal</li>
  <li><tt>slt</tt>: signed less than</li>
  <li><tt>sle</tt>: signed less or equal</li>
</ol>
<p>The remaining two arguments must be <a href="#t_vector">vector</a> or
<a href="#t_integer">integer</a> typed. They must also be identical types.</p>
<h5>Semantics:</h5>
<p>The '<tt>vicmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt>
according to the condition code given as <tt>cond</tt>. The comparison yields a 
<a href="#t_vector">vector</a> of <a href="#t_integer">integer</a> result, of
identical type as the values being compared.  The most significant bit in each
element is 1 if the element-wise comparison evaluates to true, and is 0
otherwise.  All other bits of the result are undefined.  The condition codes
are evaluated identically to the <a href="#i_icmp">'<tt>icmp</tt>'
instruction</a>.

<h5>Example:</h5>
<pre>
  &lt;result&gt; = vicmp eq &lt;2 x i32&gt; &lt; i32 4, i32 0&gt;, &lt; i32 5, i32 0&gt;   <i>; yields: result=&lt;2 x i32&gt; &lt; i32 0, i32 -1 &gt;</i>
  &lt;result&gt; = vicmp ult &lt;2 x i8 &gt; &lt; i8 1, i8 2&gt;, &lt; i8 2, i8 2 &gt;        <i>; yields: result=&lt;2 x i8&gt; &lt; i8 -1, i8 0 &gt;</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_vfcmp">'<tt>vfcmp</tt>' Instruction</a>
</div>
<div class="doc_text">
<h5>Syntax:</h5>
<pre>  &lt;result&gt; = vfcmp &lt;cond&gt; &lt;ty&gt; &lt;op1&gt;, &lt;op2&gt;</pre>
<h5>Overview:</h5>
<p>The '<tt>vfcmp</tt>' instruction returns an integer vector value based on
element-wise comparison of its two floating point vector operands.  The output
elements have the same width as the input elements.</p>
<h5>Arguments:</h5>
<p>The '<tt>vfcmp</tt>' instruction takes three operands. The first operand is
the condition code indicating the kind of comparison to perform. It is not
a value, just a keyword. The possible condition code are:
<ol>
  <li><tt>false</tt>: no comparison, always returns false</li>
  <li><tt>oeq</tt>: ordered and equal</li>
  <li><tt>ogt</tt>: ordered and greater than </li>
  <li><tt>oge</tt>: ordered and greater than or equal</li>
  <li><tt>olt</tt>: ordered and less than </li>
  <li><tt>ole</tt>: ordered and less than or equal</li>
  <li><tt>one</tt>: ordered and not equal</li>
  <li><tt>ord</tt>: ordered (no nans)</li>
  <li><tt>ueq</tt>: unordered or equal</li>
  <li><tt>ugt</tt>: unordered or greater than </li>
  <li><tt>uge</tt>: unordered or greater than or equal</li>
  <li><tt>ult</tt>: unordered or less than </li>
  <li><tt>ule</tt>: unordered or less than or equal</li>
  <li><tt>une</tt>: unordered or not equal</li>
  <li><tt>uno</tt>: unordered (either nans)</li>
  <li><tt>true</tt>: no comparison, always returns true</li>
</ol>
<p>The remaining two arguments must be <a href="#t_vector">vector</a> of 
<a href="#t_floating">floating point</a> typed. They must also be identical
types.</p>
<h5>Semantics:</h5>
<p>The '<tt>vfcmp</tt>' instruction compares <tt>op1</tt> and <tt>op2</tt>
according to  the condition code given as <tt>cond</tt>. The comparison yields a 
<a href="#t_vector">vector</a> of <a href="#t_integer">integer</a> result, with
an identical number of elements as the values being compared, and each element
having identical with to the width of the floating point elements. The most 
significant bit in each element is 1 if the element-wise comparison evaluates to
true, and is 0 otherwise.  All other bits of the result are undefined.  The
condition codes are evaluated identically to the 
<a href="#i_fcmp">'<tt>fcmp</tt>' instruction</a>.

<h5>Example:</h5>
<pre>
  &lt;result&gt; = vfcmp oeq &lt;2 x float&gt; &lt; float 4, float 0 &gt;, &lt; float 5, float 0 &gt;       <i>; yields: result=&lt;2 x i32&gt; &lt; i32 0, i32 -1 &gt;</i>
  &lt;result&gt; = vfcmp ult &lt;2 x double&gt; &lt; double 1, double 2 &gt;, &lt; double 2, double 2&gt;   <i>; yields: result=&lt;2 x i64&gt; &lt; i64 -1, i64 0 &gt;</i>
</pre>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_phi">'<tt>phi</tt>' Instruction</a>
+0 −2
Original line number Diff line number Diff line
@@ -572,8 +572,6 @@ int LLLexer::LexIdentifier() {
  INSTKEYWORD("xor",     BinaryOpVal, Xor, XOR);
  INSTKEYWORD("icmp",    OtherOpVal,  ICmp,  ICMP);
  INSTKEYWORD("fcmp",    OtherOpVal,  FCmp,  FCMP);
  INSTKEYWORD("vicmp",   OtherOpVal,  VICmp, VICMP);
  INSTKEYWORD("vfcmp",   OtherOpVal,  VFCmp, VFCMP);

  INSTKEYWORD("phi",         OtherOpVal, PHI, PHI_TOK);
  INSTKEYWORD("call",        OtherOpVal, Call, CALL);
+1 −13
Original line number Diff line number Diff line
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | grep {global.*vicmp slt}
; PR2317
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis 
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
target triple = "i686-apple-darwin9.2.2"
define <4 x i32> @foo(<4 x float> %a, <4 x float> %b) nounwind  {
entry:
	%cmp = vfcmp olt <4 x float> %a, %b		; <4 x i32> [#uses=1]
	ret <4 x i32> %cmp
}

global <4 x i32> vicmp slt ( <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>  <i32 1, i32 2, i32 1, i32 2> ) ;

@B = external global i32;

global <4 x i32> vicmp slt ( <4 x i32> <i32 ptrtoint (i32 * @B to i32), i32 1, i32 1, i32 1>, <4 x i32>  <i32 1, i32 2, i32 1, i32 2> ) ;
+0 −27
Original line number Diff line number Diff line
; RUN: llvm-as < %s | llc -march=x86 -mcpu=pentium
; PR2575

define void @entry(i32 %m_task_id, i32 %start_x, i32 %end_x) nounwind  {
	br i1 false, label %bb.nph, label %._crit_edge

bb.nph:		; preds = %bb.nph, %0
	vicmp sgt <4 x i32> zeroinitializer, < i32 -128, i32 -128, i32 -128, i32 -128 >		; <<4 x i32>>:1 [#uses=1]
	extractelement <4 x i32> %1, i32 3		; <i32>:2 [#uses=1]
	lshr i32 %2, 31		; <i32>:3 [#uses=1]
	trunc i32 %3 to i1		; <i1>:4 [#uses=1]
	select i1 %4, i32 -1, i32 0		; <i32>:5 [#uses=1]
	insertelement <4 x i32> zeroinitializer, i32 %5, i32 3		; <<4 x i32>>:6 [#uses=1]
	and <4 x i32> zeroinitializer, %6		; <<4 x i32>>:7 [#uses=1]
	bitcast <4 x i32> %7 to <4 x float>		; <<4 x float>>:8 [#uses=1]
	mul <4 x float> zeroinitializer, %8		; <<4 x float>>:9 [#uses=1]
	bitcast <4 x float> %9 to <4 x i32>		; <<4 x i32>>:10 [#uses=1]
	or <4 x i32> %10, zeroinitializer		; <<4 x i32>>:11 [#uses=1]
	bitcast <4 x i32> %11 to <4 x float>		; <<4 x float>>:12 [#uses=1]
	mul <4 x float> %12, < float 1.000000e+02, float 1.000000e+02, float 1.000000e+02, float 1.000000e+02 >		; <<4 x float>>:13 [#uses=1]
	sub <4 x float> %13, < float 1.000000e+02, float 1.000000e+02, float 1.000000e+02, float 1.000000e+02 >		; <<4 x float>>:14 [#uses=1]
	extractelement <4 x float> %14, i32 3		; <float>:15 [#uses=1]
	call float @fmaxf( float 0.000000e+00, float %15 )		; <float>:16 [#uses=0]
	br label %bb.nph

._crit_edge:		; preds = %0
	ret void
}

declare float @fmaxf(float, float)
+0 −12
Original line number Diff line number Diff line
; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2
; PR2620

define void @t(i32 %m_task_id, i32 %start_x, i32 %end_x) nounwind {
	vfcmp olt <2 x double> zeroinitializer, zeroinitializer		; <<2 x i64>>:1 [#uses=1]
	extractelement <2 x i64> %1, i32 1		; <i64>:2 [#uses=1]
	lshr i64 %2, 63		; <i64>:3 [#uses=1]
	trunc i64 %3 to i1		; <i1>:4 [#uses=1]
	zext i1 %4 to i8		; <i8>:5 [#uses=1]
	insertelement <2 x i8> zeroinitializer, i8 %5, i32 1		; <<2 x i8>>:6 [#uses=1]
	store <2 x i8> %6, <2 x i8>* null
	ret void
}
Loading