xref: /freebsd/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/Shared/AllocationActions.cpp (revision 770cf0a5f02dc8983a89c6568d741fbc25baa999)
1 //===----- AllocationActions.gpp -- JITLink allocation support calls  -----===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/ExecutionEngine/Orc/Shared/AllocationActions.h"
10 
11 namespace llvm {
12 namespace orc {
13 namespace shared {
14 
15 void runFinalizeActions(AllocActions &AAs,
16                         OnRunFinalizeActionsCompleteFn OnComplete) {
17   std::vector<WrapperFunctionCall> DeallocActions;
18   DeallocActions.reserve(numDeallocActions(AAs));
19 
20   for (auto &AA : AAs) {
21     if (AA.Finalize)
22 
23       if (auto Err = AA.Finalize.runWithSPSRetErrorMerged()) {
24         while (!DeallocActions.empty()) {
25           Err = joinErrors(std::move(Err),
26                            DeallocActions.back().runWithSPSRetErrorMerged());
27           DeallocActions.pop_back();
28         }
29         return OnComplete(std::move(Err));
30       }
31 
32     if (AA.Dealloc)
33       DeallocActions.push_back(std::move(AA.Dealloc));
34   }
35 
36   AAs.clear();
37   OnComplete(std::move(DeallocActions));
38 }
39 
40 void runDeallocActions(ArrayRef<WrapperFunctionCall> DAs,
41                        OnRunDeallocActionsComeleteFn OnComplete) {
42   Error Err = Error::success();
43   while (!DAs.empty()) {
44     Err = joinErrors(std::move(Err), DAs.back().runWithSPSRetErrorMerged());
45     DAs = DAs.drop_back();
46   }
47   OnComplete(std::move(Err));
48 }
49 
50 } // namespace shared
51 } // namespace orc
52 } // namespace llvm
53