[LLVMdev] Dis-assembler

Joshua Cranmer pidgeot18 at gmail.com
Mon Feb 20 10:45:25 PST 2012

On 2/20/2012 3:27 AM, Jonas Paulsson wrote:
> Could you please expand a bit?
> Why are not the MCInstr and MachineInstr classes compatible? Is this not a long term goal, even?
It's not that the MCInst and MachineInstr classes are incompatible, it's 
that decomposing generic assembly/machine code into functions and global 
variables is a very non-trivial task. Since MCInsts already give you 
pretty much everything that MachineInstr would (the only major things I 
see missing, from perusing documentation, is register def-use chains and 
pseudo-instructions, neither of which are terribly definable when 
MCInsts are used), there's not much of a reason to write a class to 
translate MCInst back into MachineInstr.

> Could I make optimization passes in the MC layer with a disassembler as in a MachineFunction?

The MC layer is a lower-level layer, where the notion of functions and 
definable control flow are a lot weaker and also where things like 
"delete this instruction" can very easily break things (e.g., a branch 
can no longer be done since it was a short jump and the target moved out 
of range). Optimizations at this layer would, to me at least, fall under 
the category of "you really don't want to do this". Given that many 
people neither expect nor desire optimizations to be done on explicit 
assembly code, I would recommend that you rather find a different 
approach to do what you are trying to do.

Joshua Cranmer
News submodule owner
DXR coauthor

More information about the llvm-dev mailing list