Riyad Parvez via llvm-dev
2015-Oct-06 18:23 UTC
[llvm-dev] Corresponding register of stack variables after mem2reg pass
Hi, mem2reg promotes scalar stack variables to registers. Is it possible to find the name of int f(int a, int b) { int x = a - b; After mem2reg pass eliminating alloca, load and stores for stack variables, the IR: define i32 @f(i32 %a, i32 %b) #0 { entry: call void @llvm.dbg.value(metadata i32 %a, i64 0, metadata !27, metadata !28), !dbg !29 call void @llvm.dbg.value(metadata i32 %b, i64 0, metadata !30, metadata !28), !dbg !31 %sub = sub nsw i32 %a, %b, !dbg !32 Here %sub is the corresponding register for variable "x". My question is after "mem2reg" pass is it possible to know these corresponding registers? Thanks, Riyad -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151006/65388a5f/attachment.html>
Tim Northover via llvm-dev
2015-Oct-06 18:40 UTC
[llvm-dev] Corresponding register of stack variables after mem2reg pass
On 6 October 2015 at 11:23, Riyad Parvez via llvm-dev <llvm-dev at lists.llvm.org> wrote:> Here %sub is the corresponding register for variable "x". My question is > after "mem2reg" pass is it possible to know these corresponding registers?Only really as a best-effort via debug info, I think. In this case, the sub is followed by an @llvm.dbg.value call which specifies which source variable it came from: call void @llvm.dbg.value(metadata i32 %sub, i64 0, metadata !18, metadata !13), !dbg !19 on my build, where the metadata !18 refers to "!DILocalVariable(name: "x", scope: !4, file: !1, line: 2, type: !7)" Of course, that information is likely to get fuzzier and fuzzier as more optimisations happen. Cheers. Tim.