[llvm-dev] distinguish program and temporary variables
John Criswell via llvm-dev
llvm-dev at lists.llvm.org
Mon Feb 8 08:05:40 PST 2016
On 2/8/16 10:54 AM, Mohammad Norouzi wrote:
>> I need to check if a variable belongs to the program originally.
>> Consider the following code line:
>> y = x + 4
>> and its corresponding llvm ir (roughly):
>> %16 = load i32 %x
>> %add = add i32 %16, i32 4
>> store i32 %add, %y
>> I need to distinguish between %16, %add and %x, %y.
> You might be able to use the Debug information embedded within the
> LLVM IR to determine what is an original variable and what is a
> temporary added by LLVM. However, I think that such an approach
> is fragile.
> yes, Debug info provides lots of useful info and i think there should
> be sth about this case. But I don't know which api or method does this.
Look at the Doxygen documentation on the LLVM web site for documentation
on the Value and Instruction classes. They probably have methods for
retrieving the Debug Metadata (and if they don't, one of their
subclasses/superclasses does). You can search through the LLVM source
code for examples as well, plus I think there's a document that
describes the format of the LLVM Debug Metadata on the LLVM web page.
> It sounds like you need to be analyzing Clang ASTs instead of LLVM
> IR. The Clang AST represents a program in its original source
> form, so you can tell what is a program variable, in what file it
> was defined, its original source type, etc.
> I'm not sure about Clang ASTs but this is part of an llvm pass which
> analyzes llvm IR. So, i doubt if i can use Clang AST.
Why are you restricted to using LLVM IR?
> John Criswell
>> Any help is appreciated.
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> John Criswell
> Assistant Professor
> Department of Computer Science, University of Rochester
Department of Computer Science, University of Rochester
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev