<div dir="ltr">Hello,<div><br></div><div>I am a newbie to LLVM and right now I am on the hook to parse some IR code and do some instrumentations. However, my problem is that no matter how I tweak my parsing code, it simply cannot print out anything.</div><div><br></div><div>So here is my C code:</div><div><br></div><div><pre style="margin-top:0px;margin-bottom:1em;padding:5px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;line-height:inherit;font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace,sans-serif;font-size:13px;vertical-align:baseline;box-sizing:inherit;width:auto;max-height:600px;overflow:auto;background-color:rgb(239,240,241);color:rgb(36,39,41)"><code style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;font-stretch:inherit;line-height:inherit;font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace,sans-serif;vertical-align:baseline;box-sizing:inherit;white-space:inherit">int your_fun(int arg2) {
    int x = arg2;
    return x+2;
}</code></pre></div><div><br></div><div>And here is my parsing code:</div><div><pre style="margin-top:0px;margin-bottom:1em;padding:5px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;line-height:inherit;font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace,sans-serif;font-size:13px;vertical-align:baseline;box-sizing:inherit;width:auto;max-height:600px;overflow:auto;background-color:rgb(239,240,241);color:rgb(36,39,41)"><code style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;font-stretch:inherit;line-height:inherit;font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace,sans-serif;vertical-align:baseline;box-sizing:inherit;white-space:inherit">#include <llvm/IR/Module.h>
#include <llvm/IRReader/IRReader.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/Support/SourceMgr.h>
#include <iostream>
#include <llvm/Support/raw_ostream.h>


using namespace llvm;
int main()
{
  LLVMContext context;
  SMDiagnostic error;
  Module *m = parseIRFile("t.ll", error, context).get();
  if(!m)
  {
    return 0;
  }
  std::cout << error.getMessage().str() << std::endl;
  std::cout << sizeof(m->getFunctionList()) << std::endl;
  auto iter1 = m->getFunctionList().begin();
  std::cout << " Function: " << (*iter1).getName().str() << std::endl;

  for (auto iter1 = m->getFunctionList().begin();
       iter1 != m->getFunctionList().end(); iter1++) {
        Function &f = *iter1;
        std::cout << " Function: " << std::endl;
        std::cout << " Function: " << f.getName().str() << std::endl;
        for (auto iter2 = f.getBasicBlockList().begin();
         iter2 != f.getBasicBlockList().end(); iter2++) {
             BasicBlock &bb = *iter2;
             std::cout << "  BasicBlock: " << bb.getName().str() << std::endl;
             for (auto iter3 = bb.begin(); iter3 != bb.end(); iter3++) {
               Instruction &inst = *iter3;
               std::cout << "   Instruction " << &inst << " : " << inst.getOpcodeName();

            unsigned int  i = 0;
            unsigned int opnt_cnt = inst.getNumOperands();
               for(; i < opnt_cnt; ++i)
               {
                 Value *opnd = inst.getOperand(i);
                 std::string o;
                 if (opnd->hasName()) {
                   o = opnd->getName();
                   std::cout << " " << o << "," ;
                 } else {
                   std::cout << " ptr" << opnd << ",";
                 }
               }
               std:: cout << std::endl;
             }
           }
  }
  return 1;

}</code></pre></div><div><br></div><div>And this is my output:</div><div><pre style="margin-top:0px;margin-bottom:1em;padding:5px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;line-height:inherit;font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace,sans-serif;font-size:13px;vertical-align:baseline;box-sizing:inherit;width:auto;max-height:600px;overflow:auto;background-color:rgb(239,240,241);color:rgb(36,39,41)"><code style="margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;font-stretch:inherit;line-height:inherit;font-family:Consolas,Menlo,Monaco,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace,sans-serif;vertical-align:baseline;box-sizing:inherit;white-space:inherit">➜  test git:(develop) ✗ clang -S -emit-llvm t.c
➜  test git:(develop) ✗ clang++ parse.cpp -o reader `llvm-config --cxxflags --libs --ldflags --system-libs` -g
warning: unknown warning option '-Wno-maybe-uninitialized'; did you mean '-Wno-uninitialized'? [-Wunknown-warning-option]
1 warning generated.
➜  test git:(develop) ✗ ./reader

16
 Function:
➜  test git:(develop) ✗ clang --version
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin<br></code></pre></div><div><br></div><div>As you can see, I basically cannot get anything meaningful here. Could anyone shed some light on this? Thanks a lot.</div><div><br></div><div>Irene</div></div>