[llvm-dev] Efficient way to identify an instruction

Joan Lluch via llvm-dev llvm-dev at lists.llvm.org
Sun Jul 28 22:45:35 PDT 2019


Hi Alberto,

I have not used this myself, but I think you should be able to visit your Instruction ‘users()’. I think the name this function was given is a bit confusing, but this returns an iterator range you can iterate through to find instructions that depend on a given one. 

Similarly, you have the function ‘uses()’ that can be used to traverse down the DAG when instructions are still on SSA form. 

Look also at the related functions 'user_end()’, 'user_begin()’, 'use_end()' and 'use_begin() 

I hope this helps.

Joan




> On 28 Jul 2019, at 08:29, Alberto Barbaro via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hi,
> I was thinking that maybe there is always some sort of dependency analysis that would allow me to visit a tree from the AllocaInst to the IcmpInst. Is it already possible?
> 
> Thanks
> 
> Il giorno dom 28 lug 2019 alle ore 07:21 Alberto Barbaro <barbaro.alberto at gmail.com <mailto:barbaro.alberto at gmail.com>> ha scritto:
> Hi Tim,
> as always thanks for your help. Unfortunately I made a mistake in my email but apart from that I still have problems.
> 
> Il giorno sab 27 lug 2019 alle ore 11:53 Tim Northover <t.p.northover at gmail.com <mailto:t.p.northover at gmail.com>> ha scritto:
> Hi Alberto,
> 
> On Sat, 27 Jul 2019 at 10:09, Alberto Barbaro via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> > Having the reference I to the instruction in bold.Can i efficiently know that the variable %11 was "created" by the %3 = alloca [40 x i8], align 16.
> 
> Yes, I.getOperand(0) *is* the AllocaInst in this case. So for example
> isa<AllocaInst>(I.getOperand(0)) will return true. And if you care
> about more details you can dyn_cast<AllocaInst> it and check any other
> properties you want.
> 
> 
> I would like to use the approach you described considering I to be a reference to the icmp instruction ( %13 = icmp eq i32 %12, 66 ). From what I understood i should do something like:
> 
> Instruction* source;
> 
> if(source = dyn_cast<AllocaInst>(I.getOperand(0))) {
>     cout << "Alloca Inst" << endl;
>    	I.dump();
>    	getchar();
> }
> 
> I thought I.getOperand(0) was a reference to the instruction that have created %12. What am I missing?
>  
> Cheers.
> 
> Tim.
> 
> Thanks again
> Alberto
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190729/e6cbb4a2/attachment.html>


More information about the llvm-dev mailing list