Commit 038a9b9e by Nicolas Capens Committed by Nicolas Capens

Remove instructions instead of attempting to delete them.

Instructions are allocated using the ArenaAllocator which uses a memory pool of "slabs", so we can't use the regular C++ delete to deallocate them. Just remove them from the list. This change also provides an override for Inst's operator delete to use the custom allocator, which should currently not be called. BUG=swiftshader:8 Change-Id: Ibb166910402a70e7d9276b28e19b15caf64422f2 Reviewed-on: https://chromium-review.googlesource.com/384336Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarJim Stichnoth <stichnot@chromium.org>
parent 47ef0be8
......@@ -74,7 +74,7 @@ template <typename List> void removeDeletedAndRenumber(List *L, Cfg *Func) {
auto I = L->begin(), E = L->end(), Next = I;
for (++Next; I != E; I = Next++) {
if (DoDelete && I->isDeleted()) {
L->erase(I);
L->remove(I);
} else {
I->renumber(Func);
}
......
......@@ -193,6 +193,12 @@ public:
virtual ~Inst() = default;
void replaceDest(Variable *Var) { Dest = Var; }
void operator delete(void *Ptr, std::size_t Size) {
assert(CfgAllocatorTraits::current() != nullptr);
CfgAllocatorTraits::current()->Deallocate(Ptr, Size);
llvm::report_fatal_error("Inst unexpectedly deleted");
}
protected:
Inst(Cfg *Func, InstKind Kind, SizeT MaxSrcs, Variable *Dest);
void addSource(Operand *Src) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment