<div>Nick,</div><div> </div><div> First, thanks for responding. Secondly, I just want to create an exact copy of an already exisitng Value, this should be pretty simple to do but I'm unclear on how to do this?</div><div>
 </div><div> For example, PHINode::getIncomingValue (unsigned) returns a "Value" and I want to make a copy of that Value. Is there some other way to do this other than copyValue() that I'm missing?<br><br></div>
<div class="gmail_quote">On Sat, Feb 4, 2012 at 3:23 PM, Nick Lewycky <span dir="ltr"><<a href="mailto:nicholas@mxc.ca">nicholas@mxc.ca</a>></span> wrote:<br><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
<div class="im">Ryan Taylor wrote:<br>
<blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
Since there are no constructors for Value, how do you properly insert a<br>
new Value?<br>
</blockquote>
<br></div>
Value is a pure base. If you want to construct a new Value, then you want to construct a global variable or instruction or argument or something in particular.<div class="im"><br>
<br>
<blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
If I create a pointer Value *newValue and then call<br>
AA.copyValue(oldValue, newValue), this does not work, since newValue is<br>
not allocated.<br>
</blockquote>
<br></div>
AA.copyValue is used to tell the AliasAnalysis that a transformation is replacing the instruction in oldValue with newValue, so AA should update its internal tables. (Note that BasicAA and TBAA don't have internal tables, so the function is a no-op.)<br>

<br>
As to your original question, if you need to copy a value, some types have copy methods such as Instruction::clone(). For BasicBlocks, Functions and Modules, there's the Cloning interface in llvm/Transforms/Utils/Cloning.<u></u>h. Constants not in the GlobalValue hierarchy are impossible to make copies of as they are designed to be pointer-comparable and permitting copies would break that.<br>

<br>
Inserting is a separate issue. Supposing you create a new instruction using "BO = BinaryOperator::createAdd(X, Y);" you then need to insert it using BO->insertBefore or BO->insertAfter.<span class="HOEnZb"><font color="#888888"><br>

<br>
Nick<br>
</font></span></blockquote></div><br>