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;
36 bool empty()
const {
return WorklistMap.empty(); }
38 unsigned size()
const {
return WorklistMap.size(); }
49 Worklist.push_back(
I);
50#if LLVM_ENABLE_ABI_BREAKING_CHECKS
60 assert(WorklistMap.empty() &&
"Expecting empty worklistmap");
61 if (!Worklist.empty())
62 WorklistMap.reserve(Worklist.size() >
N ? Worklist.size() :
N);
63 for (
unsigned i = 0; i < Worklist.size(); ++i)
64 if (!WorklistMap.try_emplace(Worklist[i], i).second)
66#if LLVM_ENABLE_ABI_BREAKING_CHECKS
73#if LLVM_ENABLE_ABI_BREAKING_CHECKS
74 assert(Finalized &&
"GISelWorkList used without finalizing");
76 if (WorklistMap.try_emplace(
I, Worklist.size()).second)
77 Worklist.push_back(
I);
82#if LLVM_ENABLE_ABI_BREAKING_CHECKS
83 assert(Finalized &&
"GISelWorkList used without finalizing");
85 auto It = WorklistMap.find(
I);
86 if (It == WorklistMap.end())
90 Worklist[It->second] =
nullptr;
92 WorklistMap.erase(It);
101#if LLVM_ENABLE_ABI_BREAKING_CHECKS
102 assert(Finalized &&
"GISelWorkList used without finalizing");
106 I = Worklist.pop_back_val();
108 assert(
I &&
"Pop back on empty worklist");
109 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.