[LLVMdev] problem with replacing an instruction
Frank Winter
fwinter at jlab.org
Thu Jun 18 13:40:23 PDT 2015
I am trying to change this
define void @main(float* noalias %arg0, float* noalias %arg1, float*
noalias %arg2) {
entrypoint:
%0 = bitcast float* %arg1 to <4 x float>*
intothis
define void @main(float* noalias %arg0, float* noalias %arg1, float*
noalias %arg2) {
entrypoint:
%0 = getelementptr float* %arg1, i64 0
%1 = bitcast float* %0 to <4 x float>*
I must be close but the final instruction replacement results in a segfault.
for (Instruction& I : BB) {
if (isa<BitCastInst>(I)) {
BitCastInst* BCI = dyn_cast<BitCastInst>(&I);
for (Use& U : I.operands()) {
Value* V = U.get();
if (!dyn_cast<Instruction>(V)) {
// must be a function's argument
std::vector<llvm::Value*> vect_1;
vect_1.push_back(Builder->getInt64(0));
llvm::GetElementPtrInst* gep1 =
llvm::GetElementPtrInst::Create(V, ArrayRef< Value * >(vect_1) );
BB.getInstList().insert(&I, gep1);
llvm::BitCastInst *bci = new BitCastInst (gep1,
BCI->getDestTy() );
llvm::ReplaceInstWithInst( &I , bci );
}
}
}
}
What am I missing?
Thanks,
Frank
More information about the llvm-dev
mailing list