[cfe-users] Help Needed: How to get source line number from .ll file LLVM

Shail Dave via cfe-users cfe-users at lists.llvm.org
Mon Jul 11 21:40:39 PDT 2016


Hi,

I am working with LLVM 3.4 and want to obtain the line number information
of source file from IR. The IR is generated from simple c code with Clang. *I
want to obtain the line number in source c file from the line in IR body.*

I tried this -

   1. For Instruction BI, unsigned Line = Line =
   BI->getDebugLoc().getLine();
   2. For Loop L, std::cout << L->getStartLoc().getLine();

But, the result stored/printed is always 0. I don't know how to obtain line
number in the source from LLVM IR.

My Source C file is -
​#include <stdio.h>

int main(){

 int i;

 int inbuf[100];
 int outbuf[100];

 for(i = 0; i < 100; ++i)
        inbuf[i] ^= outbuf[i];

 inbuf[1] += 402;
 inbuf[6] += 107;
 inbuf[97] += 231;

 for(i = 0; i < 100; ++i)
 {
         inbuf[i] += outbuf[i];
 }

 inbuf[47] += 312;

    //print-statements
 for (i=0;i<100;i++) {
        printf("inbuf[%d] = %d\n",i,inbuf[i]);              }return 0;
​}​


*Command Used-* ~/llvm/build/Release+Asserts/bin/clang -O3
-fno-unroll-loops -fno-vectorize -fno-slp-vectorize -S -emit-llvm sample.c
-o sample.ll

I have working pass which can detect and analyze the loops and
instructions. I am using it inside function - runOnLoop(Loop *L,
LPPassManager &LPM)

I have also tried with -O0 and  -fstandalone-debug option in the compile
line. But, it is still printing 0.

The following is also not working out.

if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
   DILocation Loc(N);                      // DILocation is in DebugInfo.h
   unsigned Line = Loc.getLineNumber();
 }

It would be great if anybody can kindly help me for the same. Thanks!

Best,
Shail
ᐧ
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20160711/cc81090d/attachment.html>


More information about the cfe-users mailing list