[LLVMdev] How to properly use copyValue?
nicholas at mxc.ca
Sat Feb 4 12:23:40 PST 2012
Ryan Taylor wrote:
> Since there are no constructors for Value, how do you properly insert a
> new Value?
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.
> If I create a pointer Value *newValue and then call
> AA.copyValue(oldValue, newValue), this does not work, since newValue is
> not allocated.
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.)
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.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.
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.
More information about the llvm-dev