This reverts commit 3b5842c9c41a441280100045ef62bb8a0fe7200f. The intent of the original commit was to begin enabling asynchronous alloation actions (calls attached to JIT'd memory initialization and deinitialization). The asynchronous allocation actions scheme was fleshed-out in a development branch, but ran into an issue: Functions implementing actions are allowed to live in JIT'd code (e.g. in the ORC runtime), but we can't genally rely on tail-call elimination kicking in. This resulting in dealloc actions returning via stack frames that had been deallocated, triggering segfaults. It's possible that there are other approaches that would allow asynchronous allocation actions to work, but they're not on the critical path for JIT improvements so for now we'll just revert.
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
//===----- AllocationActions.gpp -- JITLink allocation support calls -----===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/ExecutionEngine/Orc/Shared/AllocationActions.h"
|
|
|
|
namespace llvm {
|
|
namespace orc {
|
|
namespace shared {
|
|
|
|
Expected<std::vector<WrapperFunctionCall>>
|
|
runFinalizeActions(AllocActions &AAs) {
|
|
std::vector<WrapperFunctionCall> DeallocActions;
|
|
DeallocActions.reserve(numDeallocActions(AAs));
|
|
|
|
for (auto &AA : AAs) {
|
|
if (AA.Finalize)
|
|
if (auto Err = AA.Finalize.runWithSPSRetErrorMerged())
|
|
return joinErrors(std::move(Err), runDeallocActions(DeallocActions));
|
|
|
|
if (AA.Dealloc)
|
|
DeallocActions.push_back(std::move(AA.Dealloc));
|
|
}
|
|
|
|
AAs.clear();
|
|
return DeallocActions;
|
|
}
|
|
|
|
Error runDeallocActions(ArrayRef<WrapperFunctionCall> DAs) {
|
|
Error Err = Error::success();
|
|
while (!DAs.empty()) {
|
|
Err = joinErrors(std::move(Err), DAs.back().runWithSPSRetErrorMerged());
|
|
DAs = DAs.drop_back();
|
|
}
|
|
return Err;
|
|
}
|
|
|
|
} // namespace shared
|
|
} // namespace orc
|
|
} // namespace llvm
|