[llvm-dev] Working with X86 registers in MachineInstr
Ethan J. Johnson via llvm-dev
llvm-dev at lists.llvm.org
Tue Aug 11 15:36:53 PDT 2015
I am attempting to implement the "reaching definitions" data-flow algorithm
on (X86) MachineBasicBlocks for an analysis pass. To do this, I need to
compute gen/kill sets for machine basic blocks. To start with, I am only
considering the general-purpose registers, RAX-R15 and their sub-registers.
Thus, I need to examine each MachineInstr to determine which register(s) it
defines and/or uses.
I see in the Doxygen that for a MachineOperand, I can call isReg() and
getReg() to figure out which X86 register the operand corresponds to. These
return an unsigned int "register number"; but I'm not sure how to identify
which register actually corresponds to that number.
Also, I will need to identify definitions and uses of registers in
instructions. I see that MachineOperand has methods such as isUse(),
isDef(), and isKill(), which sound like they might be relevant to what I'm
doing; but neither the Doxygen nor the source are particularly helpful as to
what they actually do. From the MachineInstr documentation, I gathered that
instructions which define a value are always written so that the value being
defined is the first operand; but since X86 has instructions that use more
than one register as output (multiplication, for instance), I would need to
manually account for the semantics of each instruction. Since X86 has a
great many instructions to account for, many of them obscure, I would very
much prefer not to go this route if LLVM already provides it! :-)
To summarize, my questions are as follows:
1. How can I determine the actual X86 register that a MachineOperand
2. What is the best/most straightforward way to determine whether a
MachineInstr defines and/or uses a particular register?
Ethan J. Johnson
Computer Science PhD student, Systems group, University of Rochester
<mailto:ejohns48 at cs.rochester.edu> ejohns48 at cs.rochester.edu
<mailto:ethanjohnson at acm.org> ethanjohnson at acm.org
PGP pubkey available from public directory or on request
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev