[LLVMdev] Target-independent machine-code analysis pass on LLVM

Rubens Emilio rubenseam at gmail.com
Sat Apr 25 06:06:08 PDT 2015


I'm trying to build an analysis pass over LLVM target-independent
machine code. However, I need the machine code to be "as close
to its future target-specific code as possible". As far as I understand
the LLVM backend infrastructure, the following applies:

- the LLVM IR abstracts the input code, allowing for many analysis
  and optimization passes to take place;
- after that, a series of passes converts the IR representation into other
  temporary structures, by taking target-specific decisions;
- finally, at the very beginning of code emission, there are
  MachineFunctions, i.e., CFGs composed of MachineBasicBlocks
  (sequences of MachineInstrs);
- during code emission, MachineInstrs are converted into MCInsts,
  which are later   emitted as either target-specific assembly
  or binary object.

Since my goal is to deal with target-independent code, I must not write
a pass to be executed by a single target-specific module. Yet, I have not
found how to properly add a pass just before code emission.

As a workaround, I've added a stub in file:

    ~/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cppAsmPrinter.cpp

to call my analysis method over MachineFunctions. Despite the fact
that it does work, I'd like to know if is there any elegant/correct way
to do such analysis.

Notice my pass simply analyzes such structures, thus not modifying
any of them. Also, it simply works because every target-specific
code-emission module inherits from LLMV::AsmPrinter, which means
I have my analysis called upon any target-specific compilation
(with llc -march=... input.bc).

Any ideas/suggestions on how to implement such analysis without
resorting to adding stubs/function calls on the AsmPrinter?


Regards!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150425/519f95cc/attachment.html>


More information about the llvm-dev mailing list