[LLVMdev] LLVM use chains
Rafael EspĂndola
rafael.espindola at gmail.com
Thu Oct 24 00:13:23 PDT 2013
On 23 October 2013 22:41, Vassil Vassilev <vvasilev at cern.ch> wrote:
> Hi,
> I have:
> ...
> @.str1 = private unnamed_addr constant [21 x i8] c"Now f is a
> function\0A\00", align 1
> ; Function Attrs: ssp uwtable
> define i32 @_Z1fv() #2 {
> entry:
> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([21 x
> i8]* @.str1, i32 0, i32 0))
> ret i32 0
> }
>
> Then I get after trying to erase the function from the module:
>
> 511 GV->eraseFromParent();
> (gdb) p GV->dump()
>
> ; Function Attrs: ssp uwtable
> define i32 @_Z1fv() #2 {
> entry:
> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([21 x
> i8]* @.str1, i32 0, i32 0))
> ret i32 0
> }
>
> (gdb) n
> 513 }
> (gdb) br llvm::AssemblyWriter::printModule(llvm::Module const*)
> (gdb) p m_CurTransaction->getModule()->dump()
> llvm::AssemblyWriter::printGlobal (this=0x7fff5fbfe850, GV=0x107274058) at
> /Users/vvassilev/workspace/root/interpreter/llvm/src/lib/IR/AsmWriter.cpp:1444
> 1444 if (GV->isMaterializable())
> (gdb) p GV->use_empty()
> $78 = false
> (gdb) p GV->use_back()
> $79 = (class llvm::User *) 0x107279b88
> (gdb) p GV->use_back()->dump()
> i8* getelementptr inbounds ([21 x i8]* @.str1, i32 0, i32 0)
> $80 = void
> (gdb) p (('llvm::Instruction'*)GV->use_back())
> $81 = ('llvm::Instruction' *) 0x107279b88
> (gdb) p (('llvm::Instruction'*)GV->use_back())->getParent()
> $82 = (const 'llvm::BasicBlock' *) 0x6c675f7878630046
>
> My conclusion was that the use chains weren't updated. Is there any
> recommended way of deleting a llvm::Function such that the use chain of the
> globals that it uses to be updated correspondingly?
You probably want replaceAllUsesWith.
> Many thanks,
> Vassil
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list