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/384336
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Jim Stichnoth <stichnot@chromium.org>
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);
}
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) {