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
|