2013年4月8日 星期一

llvm analysis notes

refs:
http://163.25.101.87/~yen3/wiki/doku.php?id=llvm:llvm_notes



  • llvm commands



  • Convert C/C++ code to llvm IR
    llvm-g++ -emit-llvm -S test.cpp -o test.ll
  • Convert llvm IR to llvm bitcode
    llvm-as test.ll -o test.bc
  • Print Control Flow Graph
    opt -dot-cfg test.bc
  • Print Dominator Tree Graph
    opt -dot-dom test.bc
  • Conver C++ code to C code
    llvm-g++ -emit-llvm test.cpp -o program.bc -c
    llc -march=c program.bc -o program.c

  • analysis(ADT analysis, rule check, redundant check, frame remap)
    • Alias analysis
      • alias memory/register (immutable/mutable) label 
      • check different two frames when the input arg is depended from another? 
    • CFG analysis
      • domain tree, basic block(entry, exist, loop, if/else), operator, reg/mem location
      • loop (vector)
        • for(i=0;i<10 a1="" a2="" b1="" b2="" c1="" c2="" i="" li="" nbsp="">
        • vector(c1,c2) <= {a1,b1} {a2,b2}
    • register analysis
      • virtual register to physical register(arm r0~r10) , rega, regb, regc
    • memory analysis
      • load/store analysis(store is depended on load?)
      • parallel load/store with different address block in the same BB 
    • dependent analysis
      • (depend memory? load/store check)
        • a[0] = 1; # load from constant input
        • b = a[0]; # b is depend from previous assignment, store to output
      • split iterator
        • for(i=0; i<10 ...="" a="" i="" li="" nbsp="" org="">
        • fcheck each unit memory block dependence

沒有留言:

張貼留言