9#ifndef LLVM_CODEGEN_GLOBALISEL_GISELWORKLIST_H
10#define LLVM_CODEGEN_GLOBALISEL_GISELWORKLIST_H
31#if LLVM_ENABLE_ABI_BREAKING_CHECKS
32 bool Finalized =
true;
38 bool empty()
const {
return WorklistMap.empty(); }
40 unsigned size()
const {
return WorklistMap.size(); }
51 Worklist.push_back(
I);
52#if LLVM_ENABLE_ABI_BREAKING_CHECKS
62 assert(WorklistMap.empty() &&
"Expecting empty worklistmap");
63 if (Worklist.size() >
N)
64 WorklistMap.reserve(Worklist.size());
65 for (
unsigned i = 0; i < Worklist.size(); ++i)
66 if (!WorklistMap.try_emplace(Worklist[i], i).second)
68#if LLVM_ENABLE_ABI_BREAKING_CHECKS
75#if LLVM_ENABLE_ABI_BREAKING_CHECKS
76 assert(Finalized &&
"GISelWorkList used without finalizing");
78 if (WorklistMap.try_emplace(
I, Worklist.size()).second)
79 Worklist.push_back(
I);
84#if LLVM_ENABLE_ABI_BREAKING_CHECKS
85 assert(Finalized &&
"GISelWorkList used without finalizing");
87 auto It = WorklistMap.find(
I);
88 if (It == WorklistMap.end())
92 Worklist[It->second] =
nullptr;
94 WorklistMap.erase(It);
103#if LLVM_ENABLE_ABI_BREAKING_CHECKS
104 assert(Finalized &&
"GISelWorkList used without finalizing");
108 I = Worklist.pop_back_val();
110 assert(
I &&
"Pop back on empty worklist");
111 WorklistMap.erase(
I);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the DenseMap class.
This file defines the SmallVector class.
void insert(MachineInstr *I)
Add the specified instruction to the worklist if it isn't already in it.
MachineInstr * pop_back_val()
void deferred_insert(MachineInstr *I)
void remove(const MachineInstr *I)
Remove I from the worklist if it exists.
Representation of each machine instruction.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.