This is the definition of BITCAST in include/llvm/CodeGen/ISDOpcodes.h:<br><br>// BITCAST - This operator converts between integer, vector and FP<br>// values, as if the value was stored to memory with one type and loaded<br>
// from the same address with the other type (or equivalently for vector<br>// format conversions, etc).  The source and result are required to have<br>// the same bit size (e.g.  f32 <-> i32).  This can also be used for<br>
// int-to-int or fp-to-fp conversions, but that is a noop, deleted by<br>// getNode().<br><br>If I can assume the bitcast instruction in LLVM IR has the same definition, does this mean that the following instruction<br><br>
%dst = bitcast i32 %src to v2i16<br><br>is equivalent to the following sequence of instructions (which I think is lossless)?<br><br>store i32 %src, i32* %ptr<br>%ptr2 = bitcast i32* %ptr to v2i16*<br>%dst = load v2i16* %ptr2<br>
<br><br>I am trying to change all vector types (v2i16 and v4i8) in include/llvm/IntrinsicsMips.td to i32, but I can't do that because the code in CodeGenFunction::EmitBuiltinExpr (in clang/CGBuiltin.cpp) raises an assertion when it calls Type::canLoslesslyBitCastTo to check whether conversion between v2i16 (or v4i8) and i32 is legal.<br>
<br>To work around this problem, I can put back CodeGenFunction::EmitMipsBuiltinExpr which was removed in r159368 and add code to do type conversions, but I prefer not to do this. <br><br><br><div class="gmail_quote">On Mon, Jul 2, 2012 at 5:40 PM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com" target="_blank">ahatanak@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Type::canLoslesslyBitCastTo(Type *Ty) in lib/VMCore/Type.cpp always returns false when it checks whether an integer can be bitcast to a vector or vice versa.<br>
<br>For example, (i32 => v2i16) or (v2i16 => i32) is false.<br>

<br>But it seems that it returns true if it is checking conversion between two vector types which have the same size. <br><br>For example, (v4i8 => v2i16) would return true.<br>
<br>What is the rationale behind this?<br><br>
</blockquote></div><br>