[llvm-dev] Find the instructions where a particular value is defined
Syed Rafiul Hussain via llvm-dev
llvm-dev at lists.llvm.org
Wed Jan 27 18:58:59 PST 2016
Thank you all for your reply.
if(a>10)
b=10;
else if (a<10)
b = 5;
Here is the IR of the if-elseif:
56 %0 = load i32, i32* %a, align 4
57 %cmp = icmp sgt i32 %0, 10
58 br i1 %cmp, label %if.then, label %if.else
60 if.then: ; preds = %entry
61 store i32 10, i32* %b, align 4
62 br label %if.end.4
63
64 if.else: ; preds = %entry
65 %1 = load i32, i32* %a, align 4
66 %cmp2 = icmp slt i32 %1, 10
67 br i1 %cmp2, label %if.then.3, label %if.end
68
69 if.then.3: ; preds = %if.else
70 store i32 5, i32* %b, align 4
71 br label %if.end
72
73 if.end: ; preds =
%if.then.3, %if.else
74 br label %if.end.4
75
76 if.end.4: ; preds =
%if.end, %if.then
77 %2 = load i32, i32* %a, align 4
78 %call5 = call dereferenceable(272) %"class.std::basic_ostream"*
@_ZNSolsEi(%"class.std::basic_ostream"* @_ZSt4cout, i32 %2)
79 %3 = load i32, i32* %b, align 4
80 %call6 = call dereferenceable(272) %"class.std::basic_ostream"*
@_ZNSolsEi(%"class.std::basic_ostream"* %call5, i32 %3)
81 ret i32 0
at line 79 of the IR, I have found %b. Now I would like to find lines
61 and 70 where %b has been assigned with some values using store
instruction. Can I achieve this at IR level?
On Wed, Jan 27, 2016 at 9:15 PM, John Criswell <jtcriswel at gmail.com> wrote:
> 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
>
--
Rafi
More information about the llvm-dev
mailing list