<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6000.16890" name=GENERATOR><LINK 
href="BLOCKQUOTE{margin-Top: 0px; margin-Bottom: 0px; margin-Left: 2em}" 
rel=stylesheet></HEAD>
<BODY style="MARGIN-TOP: 10px; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px">
<DIV><FONT face=Verdana><FONT size=2>Hi,  </FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2></FONT></FONT> </DIV>
<DIV><FONT face=Verdana><FONT size=2>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. </FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2></FONT></FONT> </DIV>
<DIV><FONT face=Verdana><FONT size=2>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.</FONT></FONT></DIV>
<DIV><FONT face=Verdana size=2></FONT><FONT face=Verdana><FONT 
size=2></FONT></FONT> </DIV>
<DIV><FONT face=Verdana><FONT size=2>**************</FONT></FONT></DIV>
<DIV><FONT face=Verdana size=2>C source</FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2>**************</FONT></DIV><FONT size=2>
<DIV>int h (int j, int i) {</DIV>
<DIV>    int tmp;</DIV>
<DIV>    tmp = j+i+2;</DIV>
<DIV>    return tmp;</DIV>
<DIV>}</DIV>
<DIV><FONT face=Verdana><FONT size=2></FONT></FONT> </DIV>
<DIV><FONT face=Verdana><FONT size=2>**************</FONT></FONT></DIV>
<DIV>.ll file </DIV>
<DIV>
<DIV><FONT face=Verdana><FONT size=2>**************</FONT></FONT></DIV></DIV>
<DIV><FONT face=Verdana>
<DIV>; ModuleID = 'simplecase.c'</DIV>
<DIV>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"</DIV>
<DIV>target triple = "x86_64-unknown-linux-gnu"</DIV>
<DIV></DIV>
<DIV>define i32 @h(i32 %j, i32 %i) nounwind {</DIV>
<DIV>entry:</DIV>
<DIV>  %j_addr = alloca i32                            ; <i32*> [#uses=2]</DIV>
<DIV>  %i_addr = alloca i32                            ; <i32*> [#uses=2]</DIV>
<DIV>  %retval = alloca i32                            ; <i32*> [#uses=2]</DIV>
<DIV>  %0 = alloca i32                                 ; <i32*> [#uses=2]</DIV>
<DIV>  %tmp = alloca i32                               ; <i32*> [#uses=2]</DIV>
<DIV>  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]</DIV>
<DIV>  call void @llvm.dbg.declare(metadata !{i32* %j_addr}, metadata !0), !dbg !6</DIV>
<DIV>  store i32 %j, i32* %j_addr</DIV>
<DIV>  call void @llvm.dbg.declare(metadata !{i32* %i_addr}, metadata !7), !dbg !6</DIV>
<DIV>  store i32 %i, i32* %i_addr</DIV>
<DIV>  call void @llvm.dbg.declare(metadata !{i32* %tmp}, metadata !8), !dbg !10</DIV>
<DIV>  %1 = load i32* %j_addr, align 4, !dbg !11       ; <i32> [#uses=1]</DIV>
<DIV>  %2 = load i32* %i_addr, align 4, !dbg !11       ; <i32> [#uses=1]</DIV>
<DIV>  %3 = add nsw i32 %1, %2, !dbg !11               ; <i32> [#uses=1]</DIV>
<DIV>  %4 = add nsw i32 %3, 2, !dbg !11                ; <i32> [#uses=1]</DIV>
<DIV>  store i32 %4, i32* %tmp, align 4, !dbg !11</DIV>
<DIV>  %5 = load i32* %tmp, align 4, !dbg !12          ; <i32> [#uses=1]</DIV>
<DIV>  store i32 %5, i32* %0, align 4, !dbg !12</DIV>
<DIV>  %6 = load i32* %0, align 4, !dbg !12            ; <i32> [#uses=1]</DIV>
<DIV>  store i32 %6, i32* %retval, align 4, !dbg !12</DIV>
<DIV>  br label %return, !dbg !12</DIV>
<DIV></DIV>
<DIV>return:                                           ; preds = %entry</DIV>
<DIV>  %retval1 = load i32* %retval, !dbg !12          ; <i32> [#uses=1]</DIV>
<DIV>  ret i32 %retval1, !dbg !12</DIV>
<DIV>}</DIV>
<DIV></DIV>
<DIV>declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone</DIV>
<DIV></DIV>
<DIV>!0 = metadata !{i32 459009, metadata !1, metadata !"j", metadata !2, i32 1, metadata !5} ; [ DW_TAG_arg_variable ]</DIV>
<DIV>!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 ]</DIV>
<DIV>!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 ]</DIV>
<DIV>!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 ]</DIV>
<DIV>!4 = metadata !{metadata !5, metadata !5, metadata !5}</DIV>
<DIV>!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 ]</DIV>
<DIV>!6 = metadata !{i32 1, i32 0, metadata !1, null}</DIV>
<DIV>!7 = metadata !{i32 459009, metadata !1, metadata !"i", metadata !2, i32 1, metadata !5} ; [ DW_TAG_arg_variable ]</DIV>
<DIV>!8 = metadata !{i32 459008, metadata !9, metadata !"tmp", metadata !2, i32 2, metadata !5} ; [ DW_TAG_auto_variable ]</DIV>
<DIV>!9 = metadata !{i32 458763, metadata !1, i32 1, i32 0} ; [ DW_TAG_lexical_block ]</DIV>
<DIV>!10 = metadata !{i32 1, i32 0, metadata !9, null}</DIV>
<DIV>!11 = metadata !{i32 3, i32 0, metadata !9, null}</DIV>
<DIV>!12 = metadata !{i32 4, i32 0, metadata !9, null}</DIV></DIV></FONT>
<DIV> </DIV>
<DIV>Best,</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV align=left><FONT size=2></FONT></DIV>
<DIV><FONT color=#c0c0c0><FONT size=2><SPAN>Kecheng</SPAN></FONT></DIV>
<DIV><FONT size=2>2010-05-13</FONT></FONT></DIV></FONT></BODY></HTML>