[LLVMdev] How to get the variable mapping between the source and llvm bytecode

Kecheng kecheng at cecs.pdx.edu
Thu May 13 13:47:47 PDT 2010


Hi,  

I want to know the variable mapping between the source and llvm bytecode. It seems that current llvm debugging information cannot provide this mapping directly. 

Here is my examples (llvm 2.7). In this exmaple, I want to know the mapping: tmp<--->%4. But current llvm's debugging information can only provide that the instruction "%4 = add nsw i32 %3, 2" is at line 3 in the C source. But since there're two "+" at line 3, I don't have a direct way to know which "+" is mapped to this "add". Is there any way I can derive the mapping based on current ddg infor? Thanks.

**************
C source
**************
int h (int j, int i) {
    int tmp;
    tmp = j+i+2;
    return tmp;
}

**************
.ll file 
**************
; ModuleID = 'simplecase.c'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-unknown-linux-gnu"
define i32 @h(i32 %j, i32 %i) nounwind {
entry:
  %j_addr = alloca i32                            ; <i32*> [#uses=2]
  %i_addr = alloca i32                            ; <i32*> [#uses=2]
  %retval = alloca i32                            ; <i32*> [#uses=2]
  %0 = alloca i32                                 ; <i32*> [#uses=2]
  %tmp = alloca i32                               ; <i32*> [#uses=2]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  call void @llvm.dbg.declare(metadata !{i32* %j_addr}, metadata !0), !dbg !6
  store i32 %j, i32* %j_addr
  call void @llvm.dbg.declare(metadata !{i32* %i_addr}, metadata !7), !dbg !6
  store i32 %i, i32* %i_addr
  call void @llvm.dbg.declare(metadata !{i32* %tmp}, metadata !8), !dbg !10
  %1 = load i32* %j_addr, align 4, !dbg !11       ; <i32> [#uses=1]
  %2 = load i32* %i_addr, align 4, !dbg !11       ; <i32> [#uses=1]
  %3 = add nsw i32 %1, %2, !dbg !11               ; <i32> [#uses=1]
  %4 = add nsw i32 %3, 2, !dbg !11                ; <i32> [#uses=1]
  store i32 %4, i32* %tmp, align 4, !dbg !11
  %5 = load i32* %tmp, align 4, !dbg !12          ; <i32> [#uses=1]
  store i32 %5, i32* %0, align 4, !dbg !12
  %6 = load i32* %0, align 4, !dbg !12            ; <i32> [#uses=1]
  store i32 %6, i32* %retval, align 4, !dbg !12
  br label %return, !dbg !12
return:                                           ; preds = %entry
  %retval1 = load i32* %retval, !dbg !12          ; <i32> [#uses=1]
  ret i32 %retval1, !dbg !12
}
declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
!0 = metadata !{i32 459009, metadata !1, metadata !"j", metadata !2, i32 1, metadata !5} ; [ DW_TAG_arg_variable ]
!1 = metadata !{i32 458798, i32 0, metadata !2, metadata !"h", metadata !"h", metadata !"h", metadata !2, i32 1, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false} ; [ DW_TAG_subprogram ]
!2 = metadata !{i32 458769, i32 0, i32 1, metadata !"simplecase.c", metadata !"/home/kecheng/cases/v2.7/simplecase/", metadata !"4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ]
!3 = metadata !{i32 458773, metadata !2, metadata !"", metadata !2, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !4, i32 0, null} ; [ DW_TAG_subroutine_type ]
!4 = metadata !{metadata !5, metadata !5, metadata !5}
!5 = metadata !{i32 458788, metadata !2, metadata !"int", metadata !2, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
!6 = metadata !{i32 1, i32 0, metadata !1, null}
!7 = metadata !{i32 459009, metadata !1, metadata !"i", metadata !2, i32 1, metadata !5} ; [ DW_TAG_arg_variable ]
!8 = metadata !{i32 459008, metadata !9, metadata !"tmp", metadata !2, i32 2, metadata !5} ; [ DW_TAG_auto_variable ]
!9 = metadata !{i32 458763, metadata !1, i32 1, i32 0} ; [ DW_TAG_lexical_block ]
!10 = metadata !{i32 1, i32 0, metadata !9, null}
!11 = metadata !{i32 3, i32 0, metadata !9, null}
!12 = metadata !{i32 4, i32 0, metadata !9, null}

Best,

Kecheng
2010-05-13
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100513/485be9ba/attachment.html>


More information about the llvm-dev mailing list