14#ifndef LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCHECKER_H
15#define LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCHECKER_H
42 using PredSense = std::pair<unsigned, bool>;
43 static const PredSense Unconditional;
44 using PredSet = std::multiset<PredSense>;
45 using PredSetIterator = std::multiset<PredSense>::iterator;
51 using SoftDefsIterator = std::set<unsigned>::iterator;
52 std::set<unsigned> SoftDefs;
55 using TmpDefsIterator = std::set<unsigned>::iterator;
56 std::set<unsigned> TmpDefs;
59 using NewPredsIterator = std::set<unsigned>::iterator;
60 std::set<unsigned> NewPreds;
63 using LatePredsIterator = std::multiset<unsigned>::iterator;
64 std::multiset<unsigned> LatePreds;
67 using UsesIterator = std::set<unsigned>::iterator;
68 std::set<unsigned> Uses;
71 using ReadOnlyIterator = std::set<unsigned>::iterator;
72 std::set<unsigned> ReadOnly;
76 std::set<unsigned> ReversePairs;
87 std::tuple<MCInst const *, unsigned, HexagonMCInstrInfo::PredicateInfo>
93 bool checkPredicates();
94 bool checkNewValues();
95 bool checkRegisters();
96 bool checkRegistersReadOnly();
97 void checkRegisterCurDefs();
104 bool checkLegalVecRegPair();
105 bool checkValidTmpDst();
106 bool checkHVXAccum();
108 static void compoundRegisterMap(
unsigned &);
110 bool isLoopRegister(
unsigned R)
const {
111 return (Hexagon::SA0 == R || Hexagon::LC0 == R || Hexagon::SA1 == R ||
122 bool check(
bool FullCheck =
true);
This file defines the DenseMap class.
Check for a valid bundle.
bool check(bool FullCheck=true)
void reportWarning(Twine const &Msg)
void reportNote(SMLoc Loc, Twine const &Msg)
void reportBranchErrors()
void reportErrorRegisters(unsigned Register)
void reportErrorNewValue(unsigned Register)
void reportError(SMLoc Loc, Twine const &Msg)
Context object for machine code objects.
Instances of this class represent a single low-level machine instruction.
Interface to description of machine instruction set.
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Wrapper class representing physical registers. Should be passed by value.
Generic base class for all target subtargets.
Wrapper class representing virtual and physical registers.
Represents a location in source code.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
This is an optimization pass for GlobalISel generic memory operations.