[llvm-dev] distinguish program and temporary variables
Mehdi Amini via llvm-dev
llvm-dev at lists.llvm.org
Mon Feb 8 09:34:00 PST 2016
> On Feb 8, 2016, at 9:17 AM, Mohammad Norouzi <mnmomn at gmail.com> wrote:
>
> I'm writing a pass that eliminates some variables.
Why?
The notion of a "variable from the user code" is meaningless after the minimal amount of optimizations.
For example:
int foo(int a, int b) {
int c = a + 1;
int d = b + 2;
return c + d;
}
Just running mem2reg and reassociate leads to:
; Function Attrs: nounwind ssp uwtable
define i32 @_Z3fooii(i32 %a, i32 %b) #0 !dbg !4 {
entry:
call void @llvm.dbg.value(metadata i32 %a, i64 0, metadata !12, metadata !13), !dbg !14
call void @llvm.dbg.value(metadata i32 %b, i64 0, metadata !15, metadata !13), !dbg !16
call void @llvm.dbg.value(metadata i32 %add, i64 0, metadata !17, metadata !13), !dbg !18
call void @llvm.dbg.value(metadata !2, i64 0, metadata !19, metadata !13), !dbg !20
%add = add i32 %a, 3, !dbg !21
%add2 = add i32 %add, %b, !dbg !22
ret i32 %add2, !dbg !23
}
You still have two values (%add and %add2) but they don't really match any source variable.
The first %add is still attached to a llvm.dbg.value, but not %add2.
And this is just a very simple example, with only one transformation (beside mem2reg).
--
Mehdi
> To show the effect of the pass i need to show that I deleted the variables that originally appear in the user code, not temporary variables added by llvm.
>
> On Mon, Feb 8, 2016 at 5:59 PM, Mehdi Amini <mehdi.amini at apple.com <mailto:mehdi.amini at apple.com>> wrote:
>
> > On Feb 8, 2016, at 6:39 AM, Mohammad Norouzi via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> >
> > Hi,
> >
> > 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.
>
>
> This look like it will quickly degrades with optimization to a point where it won't be meaningful.
> Why are you needing this? What are you trying to accomplish?
>
> --
> Mehdi
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160208/1b0084b7/attachment.html>
More information about the llvm-dev
mailing list