#include "MCTargetDesc/HexagonMCChecker.h"
#include "MCTargetDesc/HexagonBaseInfo.h"
#include "MCTargetDesc/HexagonMCInstrInfo.h"
#include "MCTargetDesc/HexagonMCShuffler.h"
#include "MCTargetDesc/HexagonMCTargetDesc.h"
#include "llvm/ADT/Twine.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCInst.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/SourceMgr.h"
#include <cassert>
usingnamespacellvm;
static cl::opt<bool>
RelaxNVChecks("relax-nv-checks", cl::Hidden,
cl::desc("Relax checks of new-value validity"));
const HexagonMCChecker::PredSense
HexagonMCChecker::Unconditional(Hexagon::NoRegister, false);
void HexagonMCChecker::init() { … }
void HexagonMCChecker::initReg(MCInst const &MCI, MCRegister R,
MCRegister &PredReg, bool &isTrue) { … }
void HexagonMCChecker::init(MCInst const &MCI) { … }
HexagonMCChecker::HexagonMCChecker(MCContext &Context, MCInstrInfo const &MCII,
MCSubtargetInfo const &STI, MCInst &mcb,
MCRegisterInfo const &ri, bool ReportErrors)
: … { … }
HexagonMCChecker::HexagonMCChecker(HexagonMCChecker const &Other,
MCSubtargetInfo const &STI,
bool CopyReportErrors)
: … { … }
bool HexagonMCChecker::check(bool FullCheck) { … }
static bool isDuplexAGroup(unsigned Opcode) { … }
static bool isNeitherAnorX(MCInstrInfo const &MCII, MCInst const &ID) { … }
bool HexagonMCChecker::checkAXOK() { … }
void HexagonMCChecker::reportBranchErrors() { … }
bool HexagonMCChecker::checkHWLoop() { … }
bool HexagonMCChecker::checkCOFMax1() { … }
bool HexagonMCChecker::checkSlots() { … }
bool HexagonMCChecker::checkPredicates() { … }
bool HexagonMCChecker::checkNewValues() { … }
bool HexagonMCChecker::checkRegistersReadOnly() { … }
bool HexagonMCChecker::registerUsed(MCRegister Register) { … }
std::tuple<MCInst const *, unsigned, HexagonMCInstrInfo::PredicateInfo>
HexagonMCChecker::registerProducer(
MCRegister Register, HexagonMCInstrInfo::PredicateInfo ConsumerPredicate) { … }
void HexagonMCChecker::checkRegisterCurDefs() { … }
bool HexagonMCChecker::checkRegisters() { … }
bool HexagonMCChecker::checkSolo() { … }
bool HexagonMCChecker::checkShuffle() { … }
bool HexagonMCChecker::checkValidTmpDst() { … }
void HexagonMCChecker::compoundRegisterMap(unsigned &Register) { … }
void HexagonMCChecker::reportErrorRegisters(unsigned Register) { … }
void HexagonMCChecker::reportErrorNewValue(unsigned Register) { … }
void HexagonMCChecker::reportError(Twine const &Msg) { … }
void HexagonMCChecker::reportError(SMLoc Loc, Twine const &Msg) { … }
void HexagonMCChecker::reportNote(SMLoc Loc, llvm::Twine const &Msg) { … }
void HexagonMCChecker::reportWarning(Twine const &Msg) { … }
bool HexagonMCChecker::checkLegalVecRegPair() { … }
bool HexagonMCChecker::checkHVXAccum()
{ … }