<div dir="ltr"><div>I'm trying to build an analysis pass over LLVM target-independent machine code.<br>However, I need the machine code to be "as close to its future target-specific code<br>as possible". As far as I understand the LLVM backend infrastructure,<br>the following applies:<br><br>- the LLVM IR abstracts the input code, allowing for many analysis and optimization<br>  passes to take place;<br>- after that, a series of passes converts the IR representation into other temporary<br>  structures, by taking target-specific decisions;<br>- finally, at the very beginning of code emission, there are MachineFunctions,<br>  i.e., CFGs composed of MachineBasicBlocks (sequences of MachineInstrs);<br>- during code emission, MachineInstrs are converted into MCInsts, which are later<br>  emitted as either target-specific assembly or binary object.<br><br>Since my goal is to deal with target-independent code, I must not write a pass<br>to be executed by a single target-specific module. Yet, I have not found how to<br>properly add a pass just before code emission.<br><br>As a workaround, I've added a stub in file:<br><br>    ~/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cppAsmPrinter.cpp<br><br>to call my analysis method over MachineFunctions. Despite the fact that it does work,<br>I'd like to know if is there any elegant/correct way to do such analysis.<br><br>Notice my pass simply analyzes such structures, thus not modifying any of them.<br>Also, it simply works because every target-specific code-emission module inherits<br>from LLMV::AsmPrinter, which means I have my analysis called upon<br>any target-specific compilation (with llc -march=... input.bc).<br><br>Any ideas/suggestions on how to implement such analysis without resorting<br>to adding stubs/function calls on the AsmPrinter?<br><br><br></div>Regards!<br></div>