Jajoo, Malhar via llvm-dev
2017-May-27 19:04 UTC
[llvm-dev] Finding nearest store to a variable
Hey guys ,
I have question : How to find nearest store to a alloca variable in LLVM ?
I tried to write a LLVM pass for the following C++ program -
#include <stdio.h>
int main()
{
int a ;
int datasize;
datasize = 5;
datasize=10; // most recent definition for the (useless)
"datasize=datasize" below.
datasize = datasize;
// Just for verification of result. should be 10.
printf("value=%d",a+datasize);
return a+datasize;
}
//=================
I wrote the following LLVM Function Pass for it ( Have not included unecessary
details )
for(Function::iterator BB = F.begin() ; BB != F.end() ; ++BB)
{
for(BasicBlock::iterator I = BB->begin(); I != BB->end() ; ++I)
{
if(StoreInst* st = dyn_cast<StoreInst>(I))
{
User* user1 = st;
std::string str = user1 ->getOperand(1)->getName();
// it is a store to datasize
if(str=="datasize)
{
Use& use1 = user1->getOperandUse(0) ;
// trying to find nearest assignment/store for this.
Value* v = use1 .get();
errs() << *v << "\n" ;
// this means that it was datasize = datasize
// since it is translated to the following
in IR -
// %0 = load i32, i32* %datasize, align 4
// store i32 %0, i32* %datasize, align 4
if(LoadInst* loadInst = dyn_cast<LoadInst>(v))
{
User* user2= loadInst ;
Use& use2= user21->getOperandUse(0);
// find nearest defiinion/store
Value* v2 = use2.get();
errs() << "found nearest definiton" << *v2 <<
"\n" ;
}
}
}
}
}
//==========================================
The result I get -
i32 5 ----------------> ignore,not useful
i32 10 ------------------> ignore,not useful
%0 = load i32, i32* %datasize, align 4
found nearest %datasize = alloca i32, align 4
My Issue : The nearest "def" found for the usage of datasize=datasize
is an
alloca instruction while I wanted to find the IR -
store i32 10, i32* %datasize, align 4
(In C++ - "datasize=10" instruction. as seen below).
// ... c++ code
datasize = 5;
datasize=10; // most recent definition for the (useless)
"datasize=datasize" below.
datasize = datasize;
// ... C++ code
Thank you for keeping patience and reading uptil here.
My Question : Can anyone explain how I can find the nearest store to a variable
in LLVM IR ?
Thanks,
Malhar
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20170527/76881314/attachment.html>
David Chisnall via llvm-dev
2017-May-27 19:17 UTC
[llvm-dev] Finding nearest store to a variable
On 27 May 2017, at 20:04, Jajoo, Malhar via llvm-dev <llvm-dev at lists.llvm.org> wrote:> > Hey guys , > > I have question : How to find nearest store to a alloca variable in LLVM ?Don’t. You are trying to solve a problem that is the main reason that SSA form was created, without using SSA form. If you really insist on duplicating all of the analysis that LLVM can do for you in constructing SSA form, I suggest that you start reading about dominance frontier construction and go from there. David