[llvm-dev] Find the instructions where a particular value is defined

John Criswell via llvm-dev llvm-dev at lists.llvm.org
Wed Jan 27 18:15:19 PST 2016


On 1/27/16 8:42 PM, Syed Rafiul Hussain via llvm-dev wrote:
> Sorry, I should ask the following:
> finds all the instructions of a function where a particular variable is defined?
> Lets consider the following code snippet:
>
> 1. void foo(){
> 2. int a, b;
> 3. if(a > 10)
> 4.   b = 10;
> 5. if(a<10)
> 6.   b = 5;
> 7. cout << b;
> 8. }
>
> I would like to know the instructions where variable b can be be
> defined, i.e, in this case, the instructions 4 and 6.

The LLVM IR is not best suited for this.  During the conversion to SSA 
form,  the variable b will be replaced with several variables, each with 
a unique definition.  A phi-node will merge the two b values at line 7.  
If you use clang -emit-llvm -S on this input file, you will see.

You may want to do your analysis on the AST generated by Clang; Clang 
ASTs represent the original C code and its variables.

Regards,

John Criswell


>
> On Wed, Jan 27, 2016 at 8:15 PM, Tim Northover <t.p.northover at gmail.com> wrote:
>> On 27 January 2016 at 17:08, Syed Rafiul Hussain via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>>> I am wondering if there is anything like def-use chain which finds all
>>> the instructions of a function where a particular value is defined?
>> How do you mean? LLVM IR is in SSA form, which means that each Value
>> has precisely one definition (which may or may not be an instruction).
>> If you've got a "Value *V" in C++ you can just
>> "dyn_cast<Instruction>(V)" to find the instruction (again, if it
>> exists).
>>
>> Cheers.
>>
>> Tim.
>
>


-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell



More information about the llvm-dev mailing list