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.