<div class="gmail_quote">2009/7/7 Chris Lattner <span dir="ltr"><<a href="mailto:clattner@apple.com">clattner@apple.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im"><br>
On Jul 7, 2009, at 8:04 PM, Nick Lewycky wrote:<br>
<br>
> Author: nicholas<br>
> Date: Tue Jul  7 22:04:38 2009<br>
> New Revision: 74991<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=74991&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=74991&view=rev</a><br>
> Log:<br>
> Remove the vicmp and vfcmp instructions. Because we never had a<br>
> release with<br>
> these instructions, no autoupgrade or backwards compatibility<br>
> support is<br>
> provided.<br>
<br>
</div>Nice!<br>
<div class="im"><br>
> +++ llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h Tue Jul  7<br>
> 22:04:38 2009<br>
> @@ -210,7 +210,8 @@<br>
>     FUNC_CODE_INST_GETRESULT   = 25, // GETRESULT:  [ty, opval, n]<br>
>     FUNC_CODE_INST_EXTRACTVAL  = 26, // EXTRACTVAL: [n x operands]<br>
>     FUNC_CODE_INST_INSERTVAL   = 27, // INSERTVAL:  [n x operands]<br>
> -    // fcmp/icmp returning Int1TY or vector of Int1Ty, NOT for<br>
> vicmp/vfcmp<br>
> +    // fcmp/icmp returning Int1TY or vector of Int1Ty. Same as CMP,<br>
> exists to<br>
> +    // support legacy vicmp/vfcmp instructions.<br>
>     FUNC_CODE_INST_CMP2        = 28, // CMP2:       [opty, opval,<br>
> opval, pred]<br>
<br>
</div>Can this just be removed?<br>
<font color="#888888"></font></blockquote><div><br></div><div>No. The code as released in LLVM 2.5 had basically no correlation between whether the instruction was [if]cmp or v[if]cmp and whether INST_CMP or INST_CMP2 was used. The comment was only there to confuse the reader.</div>

<div><br></div><div>As of this commit, we only generate INST_CMP2 which has a better chance of being read correctly by previous versions of LLVM than if we were to generate INST_CMP.</div><div><br></div><div>To make matters worse, some 2.5 version bitcode files would contain icmp (but not fcmp?) with a bad type, such as a constant expression icmp that returns <4 x i32> instead of <4 x i1>. Such files will no longer load with current LLVM; we could try to autoupgrade those but I'm inclined to say "sorry, older LLVMs were buggy and produced bad IR in rare circumstances" than to try to deal with it.</div>

<div><br></div><div>Nick</div><div><br></div></div>