23 #ifndef LLVM_CODEGEN_EXECUTIONDOMAINFIX_H 24 #define LLVM_CODEGEN_EXECUTIONDOMAINFIX_H 34 class MachineBasicBlock;
36 class TargetInstrInfo;
79 static_cast<unsigned>(std::numeric_limits<unsigned>::digits) &&
80 "undefined behavior");
81 return AvailableDomains & (1u << domain);
85 void addDomain(
unsigned domain) { AvailableDomains |= 1u << domain; }
92 return AvailableDomains & mask;
102 AvailableDomains = 0;
116 std::vector<SmallVector<int, 1>> AliasMap;
117 const unsigned NumRegs;
120 using LiveRegsDVInfo = std::vector<DomainValue *>;
121 LiveRegsDVInfo LiveRegs;
151 regIndices(
unsigned Reg)
const;
178 void force(
int rx,
unsigned domain);
213 #endif // LLVM_CODEGEN_EXECUTIONDOMAINFIX_H unsigned getCommonDomains(unsigned mask) const
Return bitmask of domains that are available and in mask.
void addDomain(unsigned domain)
Mark domain as available.
This class represents lattice values for constants.
unsigned getFirstDomain() const
First domain available.
unsigned const TargetRegisterInfo * TRI
unsigned AvailableDomains
Bitmask of available domains.
MachineFunctionProperties getRequiredProperties() const override
This class provides the reaching def analysis.
AnalysisUsage & addRequired()
void clear()
Clear this DomainValue and point to next which has all its data.
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
const HexagonInstrInfo * TII
DomainValue * Next
Pointer to the next DomainValue in a chain.
TargetInstrInfo - Interface to description of machine instruction set.
bool hasDomain(unsigned domain) const
Is domain available?
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
std::size_t countTrailingZeros(T Val, ZeroBehavior ZB=ZB_Width)
Count number of 0's from the least significant bit to the most stopping at the first 1...
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
Represent the analysis usage information of a pass.
ExecutionDomainFix(char &PassID, const TargetRegisterClass &RC)
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
void setSingleDomain(unsigned domain)
A BumpPtrAllocator that allows only elements of a specific type to be allocated.
A range adaptor for a pair of iterators.
void setPreservesAll()
Set by analyses that do not transform their input at all.
A DomainValue is a bit like LiveIntervals' ValNo, but it also keeps track of execution domains...
MachineFunctionProperties & set(Property P)
Representation of each machine instruction.
LLVM_NODISCARD bool empty() const
SmallVector< MachineInstr *, 8 > Instrs
Twiddleable instructions using or defining these registers.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
unsigned Refs
Basic reference counting.
bool isCollapsed() const
A collapsed DomainValue has no instructions to twiddle - it simply keeps track of the domains where t...
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
Properties which a MachineFunction may have at a given point in time.