Hi,<br><br>Nick, thanks for the reply.<br>I still have a problem: I only need to "clone" an Instruction, changing its type. That is, I would like to keep all characteristics of the old Instruction and create a new one only with a different type. I am trying create a new Instruction thus:<br>

<br>%3 = add nsw i32 %1, %2 ; <i16> [#uses=2]  //Old Instruction<br><br>Value* Op0 = I->getOperand(0);<br>Value* Op1 = I->getOperand(1);<br>Value* V0 = new Value(Type::getInt16Ty(Op0->getContext()), Op0->getValueID());<br>

Value* V1 = new Value(Type::getInt16Ty(Op1->getContext()), Op1->getValueID());<br>Instruction* newInst = BinaryOperator::CreateNSWAdd(V0, V1, "test");<br>errs() << "NewInst:\n" << *newInst << "\n";<br>

<br><br>But I get something like this:<br><br>%test = add nsw i16 <badref>, <badref> ; <i16> [#uses=0] <br><br><br>What I am doing wrong?<br><br><br>Best,<br><br>Douglas<br><br><div class="gmail_quote">
On Fri, Jan 21, 2011 at 8:25 PM, Nick Lewycky <span dir="ltr"><<a href="mailto:nlewycky@google.com">nlewycky@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="gmail_quote"><div class="im">On 21 January 2011 12:56, Douglas do Couto Teixeira <span dir="ltr"><<a href="mailto:douglasdocouto@gmail.com" target="_blank">douglasdocouto@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


Hello guys,<br><br>I wonder how I can change the type of an integer variable. For instance, given the instruction "%3 = add i32 %1, %2" I would like to alter the instruction to "%3 = add i16 %1, %2". Is there any way to do this?<br>




</blockquote><div><br></div></div><div>No. Instead you create a new Instruction, in this case with BinaryOperator::CreateAdd, then OldInst->replaceAllUsesWith(NewInst) to update all the users, then OldInst->eraseFromParent() since it's now dead code.</div>



<div><br></div>
<div>Also, all values have types immutably assigned at creation, so you'll need to insert casts (trunc instructions in your case) to cast %1 and %2 from i32 to i16 for the smaller add.</div><div><br></div><div>Nick</div>




<div><br></div></div>
</blockquote></div><br>