25#define DEBUG_TYPE "bpf-mi-checking" 
   41  void processAtomicInsts();
 
  104      &BPFMCRegisterClasses[BPF::GPRRegClassID];
 
  105  std::vector<unsigned> GPR32LiveDefs;
 
  106  std::vector<unsigned> GPR64DeadDefs;
 
  111    if (!MO.isReg() || MO.isUse())
 
  114    RegIsGPR64 = GPR64RegClass->
contains(MO.getReg());
 
  122      GPR32LiveDefs.push_back(MO.getReg());
 
  129      GPR64DeadDefs.push_back(MO.getReg());
 
  133  if (GPR32LiveDefs.empty())
 
  138  if (GPR64DeadDefs.empty())
 
  142  for (
auto I : GPR32LiveDefs)
 
  150void BPFMIPreEmitChecking::processAtomicInsts() {
 
  157      if (
MI.getOpcode() != BPF::XADDW && 
MI.getOpcode() != BPF::XADDD)
 
  161      if (hasLiveDefs(
MI, 
TRI)) {
 
  165            F, 
"Invalid usage of the XADD return value", 
DL});
 
  174                "BPF PreEmit Checking", 
false, 
false)
 
  176char BPFMIPreEmitChecking::
ID = 0;
 
  178  return new BPFMIPreEmitChecking();
 
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
 
Register const TargetRegisterInfo * TRI
 
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
 
static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, ArrayRef< StringLiteral > StandardNames)
Initialize the set of available library functions based on the specified target triple.
 
Diagnostic information for unsupported feature in backend.
 
MCRegisterClass - Base class of TargetRegisterClass.
 
bool contains(MCRegister Reg) const
contains - Return true if the specified register is included in this register class.
 
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
 
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
 
Function & getFunction()
Return the LLVM function that this machine code represents.
 
Representation of each machine instruction.
 
MachineOperand class - Representation of each machine instruction operand.
 
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
 
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
 
This is an optimization pass for GlobalISel generic memory operations.
 
FunctionPass * createBPFMIPreEmitCheckingPass()
 
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
 
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
 
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.