#include "bolt/Core/MCPlusBuilder.h"
#include "bolt/Core/MCPlus.h"
#include "bolt/Utils/CommandLineOpts.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCInst.h"
#include "llvm/MC/MCInstrAnalysis.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCInstrInfo.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include <cstdint>
#define DEBUG_TYPE …
usingnamespacellvm;
usingnamespacebolt;
usingnamespaceMCPlus;
namespace opts {
cl::opt<bool>
TerminalTrap("terminal-trap",
cl::desc("Assume that execution stops at trap instruction"),
cl::init(true), cl::Hidden, cl::cat(BoltCategory));
}
bool MCPlusBuilder::equals(const MCInst &A, const MCInst &B,
CompFuncTy Comp) const { … }
bool MCPlusBuilder::equals(const MCOperand &A, const MCOperand &B,
CompFuncTy Comp) const { … }
bool MCPlusBuilder::equals(const MCExpr &A, const MCExpr &B,
CompFuncTy Comp) const { … }
bool MCPlusBuilder::equals(const MCTargetExpr &A, const MCTargetExpr &B,
CompFuncTy Comp) const { … }
bool MCPlusBuilder::isTerminator(const MCInst &Inst) const { … }
void MCPlusBuilder::setTailCall(MCInst &Inst) const { … }
bool MCPlusBuilder::isTailCall(const MCInst &Inst) const { … }
std::optional<MCLandingPad> MCPlusBuilder::getEHInfo(const MCInst &Inst) const { … }
void MCPlusBuilder::addEHInfo(MCInst &Inst, const MCLandingPad &LP) const { … }
bool MCPlusBuilder::updateEHInfo(MCInst &Inst, const MCLandingPad &LP) const { … }
int64_t MCPlusBuilder::getGnuArgsSize(const MCInst &Inst) const { … }
void MCPlusBuilder::addGnuArgsSize(MCInst &Inst, int64_t GnuArgsSize) const { … }
uint64_t MCPlusBuilder::getJumpTable(const MCInst &Inst) const { … }
uint16_t MCPlusBuilder::getJumpTableIndexReg(const MCInst &Inst) const { … }
bool MCPlusBuilder::setJumpTable(MCInst &Inst, uint64_t Value,
uint16_t IndexReg, AllocatorIdTy AllocId) { … }
bool MCPlusBuilder::unsetJumpTable(MCInst &Inst) const { … }
std::optional<uint64_t>
MCPlusBuilder::getConditionalTailCall(const MCInst &Inst) const { … }
bool MCPlusBuilder::setConditionalTailCall(MCInst &Inst, uint64_t Dest) const { … }
bool MCPlusBuilder::unsetConditionalTailCall(MCInst &Inst) const { … }
std::optional<uint32_t> MCPlusBuilder::getOffset(const MCInst &Inst) const { … }
uint32_t MCPlusBuilder::getOffsetWithDefault(const MCInst &Inst,
uint32_t Default) const { … }
bool MCPlusBuilder::setOffset(MCInst &Inst, uint32_t Offset) const { … }
bool MCPlusBuilder::clearOffset(MCInst &Inst) const { … }
MCSymbol *MCPlusBuilder::getInstLabel(const MCInst &Inst) const { … }
MCSymbol *MCPlusBuilder::getOrCreateInstLabel(MCInst &Inst, const Twine &Name,
MCContext *Ctx) const { … }
void MCPlusBuilder::setInstLabel(MCInst &Inst, MCSymbol *Label) const { … }
std::optional<uint32_t> MCPlusBuilder::getSize(const MCInst &Inst) const { … }
void MCPlusBuilder::setSize(MCInst &Inst, uint32_t Size) const { … }
bool MCPlusBuilder::isDynamicBranch(const MCInst &Inst) const { … }
std::optional<uint32_t>
MCPlusBuilder::getDynamicBranchID(const MCInst &Inst) const { … }
void MCPlusBuilder::setDynamicBranch(MCInst &Inst, uint32_t ID) const { … }
bool MCPlusBuilder::hasAnnotation(const MCInst &Inst, unsigned Index) const { … }
bool MCPlusBuilder::removeAnnotation(MCInst &Inst, unsigned Index) const { … }
void MCPlusBuilder::stripAnnotations(MCInst &Inst, bool KeepTC) const { … }
void MCPlusBuilder::printAnnotations(const MCInst &Inst,
raw_ostream &OS) const { … }
void MCPlusBuilder::getClobberedRegs(const MCInst &Inst,
BitVector &Regs) const { … }
void MCPlusBuilder::getTouchedRegs(const MCInst &Inst, BitVector &Regs) const { … }
void MCPlusBuilder::getWrittenRegs(const MCInst &Inst, BitVector &Regs) const { … }
void MCPlusBuilder::getUsedRegs(const MCInst &Inst, BitVector &Regs) const { … }
void MCPlusBuilder::getSrcRegs(const MCInst &Inst, BitVector &Regs) const { … }
bool MCPlusBuilder::hasDefOfPhysReg(const MCInst &MI, unsigned Reg) const { … }
bool MCPlusBuilder::hasUseOfPhysReg(const MCInst &MI, unsigned Reg) const { … }
const BitVector &MCPlusBuilder::getAliases(MCPhysReg Reg,
bool OnlySmaller) const { … }
void MCPlusBuilder::initAliases() { … }
void MCPlusBuilder::initSizeMap() { … }
bool MCPlusBuilder::setOperandToSymbolRef(MCInst &Inst, int OpNum,
const MCSymbol *Symbol,
int64_t Addend, MCContext *Ctx,
uint64_t RelType) const { … }