Skip to content

Commit e06d69e

Browse files
committed
[OMPIRBuilder] Add support for explicit deallocation points
In this patch, some OMPIRBuilder codegen functions and callbacks are updated to work with arrays of deallocation insertion points. The purpose of this is to enable the replacement of `alloca`s with other types of allocations that require explicit deallocations in a way that makes it possible for `CodeExtractor` instances created during OMPIRBuilder finalization to also use them. The OpenMP to LLVM IR MLIR translation pass is updated to properly store and forward deallocation points together with their matching allocation point to the OMPIRBuilder. Currently, only the `DeviceSharedMemCodeExtractor` uses this feature to get the `CodeExtractor` to use device shared memory for intermediate allocations when outlining a parallel region inside of a Generic kernel (code path that is only used by Flang via MLIR, currently). However, long term this might also be useful to refactor finalization of variables with destructors, potentially reducing the use of callbacks and simplifying privatization and reductions. Instead of a single deallocation point, lists of those are used. This is to cover cases where there are multiple exit blocks originating from a single entry. If an allocation needing explicit deallocation is placed in the entry block of such cases, it would need to be deallocated before each of the exits.
1 parent 2d33426 commit e06d69e

File tree

15 files changed

+623
-508
lines changed

15 files changed

+623
-508
lines changed

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10500,8 +10500,8 @@ void CGOpenMPRuntime::emitTargetDataCalls(
1050010500
llvm::OpenMPIRBuilder::LocationDescription OmpLoc(CodeGenIP);
1050110501
llvm::OpenMPIRBuilder::InsertPointTy AfterIP =
1050210502
cantFail(OMPBuilder.createTargetData(
10503-
OmpLoc, AllocaIP, CodeGenIP, DeviceID, IfCondVal, Info, GenMapInfoCB,
10504-
CustomMapperCB,
10503+
OmpLoc, AllocaIP, CodeGenIP, /*DeallocIPs=*/{}, DeviceID, IfCondVal,
10504+
Info, GenMapInfoCB, CustomMapperCB,
1050510505
/*MapperFunc=*/nullptr, BodyCB, DeviceAddrCB, RTLoc));
1050610506
CGF.Builder.restoreIP(AfterIP);
1050710507
}

clang/lib/CodeGen/CGStmtOpenMP.cpp

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,20 +1835,21 @@ void CodeGenFunction::EmitOMPParallelDirective(const OMPParallelDirective &S) {
18351835
const CapturedStmt *CS = S.getCapturedStmt(OMPD_parallel);
18361836
const Stmt *ParallelRegionBodyStmt = CS->getCapturedStmt();
18371837

1838-
auto BodyGenCB = [&, this](InsertPointTy AllocaIP,
1839-
InsertPointTy CodeGenIP) {
1838+
auto BodyGenCB = [&, this](InsertPointTy AllocIP, InsertPointTy CodeGenIP,
1839+
ArrayRef<InsertPointTy> DeallocIPs) {
18401840
OMPBuilderCBHelpers::EmitOMPOutlinedRegionBody(
1841-
*this, ParallelRegionBodyStmt, AllocaIP, CodeGenIP, "parallel");
1841+
*this, ParallelRegionBodyStmt, AllocIP, CodeGenIP, "parallel");
18421842
return llvm::Error::success();
18431843
};
18441844

18451845
CGCapturedStmtInfo CGSI(*CS, CR_OpenMP);
18461846
CodeGenFunction::CGCapturedStmtRAII CapInfoRAII(*this, &CGSI);
18471847
llvm::OpenMPIRBuilder::InsertPointTy AllocaIP(
18481848
AllocaInsertPt->getParent(), AllocaInsertPt->getIterator());
1849-
llvm::OpenMPIRBuilder::InsertPointTy AfterIP = cantFail(
1850-
OMPBuilder.createParallel(Builder, AllocaIP, BodyGenCB, PrivCB, FiniCB,
1851-
IfCond, NumThreads, ProcBind, S.hasCancel()));
1849+
llvm::OpenMPIRBuilder::InsertPointTy AfterIP =
1850+
cantFail(OMPBuilder.createParallel(
1851+
Builder, AllocaIP, /*DeallocIPs=*/{}, BodyGenCB, PrivCB, FiniCB,
1852+
IfCond, NumThreads, ProcBind, S.hasCancel()));
18521853
Builder.restoreIP(AfterIP);
18531854
return;
18541855
}
@@ -4361,19 +4362,21 @@ void CodeGenFunction::EmitOMPSectionsDirective(const OMPSectionsDirective &S) {
43614362
llvm::SmallVector<BodyGenCallbackTy, 4> SectionCBVector;
43624363
if (CS) {
43634364
for (const Stmt *SubStmt : CS->children()) {
4364-
auto SectionCB = [this, SubStmt](InsertPointTy AllocaIP,
4365-
InsertPointTy CodeGenIP) {
4365+
auto SectionCB = [this, SubStmt](InsertPointTy AllocIP,
4366+
InsertPointTy CodeGenIP,
4367+
ArrayRef<InsertPointTy> DeallocIPs) {
43664368
OMPBuilderCBHelpers::EmitOMPInlinedRegionBody(
4367-
*this, SubStmt, AllocaIP, CodeGenIP, "section");
4369+
*this, SubStmt, AllocIP, CodeGenIP, "section");
43684370
return llvm::Error::success();
43694371
};
43704372
SectionCBVector.push_back(SectionCB);
43714373
}
43724374
} else {
4373-
auto SectionCB = [this, CapturedStmt](InsertPointTy AllocaIP,
4374-
InsertPointTy CodeGenIP) {
4375+
auto SectionCB = [this, CapturedStmt](
4376+
InsertPointTy AllocIP, InsertPointTy CodeGenIP,
4377+
ArrayRef<InsertPointTy> DeallocIPs) {
43754378
OMPBuilderCBHelpers::EmitOMPInlinedRegionBody(
4376-
*this, CapturedStmt, AllocaIP, CodeGenIP, "section");
4379+
*this, CapturedStmt, AllocIP, CodeGenIP, "section");
43774380
return llvm::Error::success();
43784381
};
43794382
SectionCBVector.push_back(SectionCB);
@@ -4429,10 +4432,11 @@ void CodeGenFunction::EmitOMPSectionDirective(const OMPSectionDirective &S) {
44294432
return llvm::Error::success();
44304433
};
44314434

4432-
auto BodyGenCB = [SectionRegionBodyStmt, this](InsertPointTy AllocaIP,
4433-
InsertPointTy CodeGenIP) {
4435+
auto BodyGenCB = [SectionRegionBodyStmt,
4436+
this](InsertPointTy AllocIP, InsertPointTy CodeGenIP,
4437+
ArrayRef<InsertPointTy> DeallocIPs) {
44344438
OMPBuilderCBHelpers::EmitOMPInlinedRegionBody(
4435-
*this, SectionRegionBodyStmt, AllocaIP, CodeGenIP, "section");
4439+
*this, SectionRegionBodyStmt, AllocIP, CodeGenIP, "section");
44364440
return llvm::Error::success();
44374441
};
44384442

@@ -4514,10 +4518,11 @@ void CodeGenFunction::EmitOMPMasterDirective(const OMPMasterDirective &S) {
45144518
return llvm::Error::success();
45154519
};
45164520

4517-
auto BodyGenCB = [MasterRegionBodyStmt, this](InsertPointTy AllocaIP,
4518-
InsertPointTy CodeGenIP) {
4521+
auto BodyGenCB = [MasterRegionBodyStmt,
4522+
this](InsertPointTy AllocIP, InsertPointTy CodeGenIP,
4523+
ArrayRef<InsertPointTy> DeallocIPs) {
45194524
OMPBuilderCBHelpers::EmitOMPInlinedRegionBody(
4520-
*this, MasterRegionBodyStmt, AllocaIP, CodeGenIP, "master");
4525+
*this, MasterRegionBodyStmt, AllocIP, CodeGenIP, "master");
45214526
return llvm::Error::success();
45224527
};
45234528

@@ -4564,10 +4569,11 @@ void CodeGenFunction::EmitOMPMaskedDirective(const OMPMaskedDirective &S) {
45644569
return llvm::Error::success();
45654570
};
45664571

4567-
auto BodyGenCB = [MaskedRegionBodyStmt, this](InsertPointTy AllocaIP,
4568-
InsertPointTy CodeGenIP) {
4572+
auto BodyGenCB = [MaskedRegionBodyStmt,
4573+
this](InsertPointTy AllocIP, InsertPointTy CodeGenIP,
4574+
ArrayRef<InsertPointTy> DeallocIPs) {
45694575
OMPBuilderCBHelpers::EmitOMPInlinedRegionBody(
4570-
*this, MaskedRegionBodyStmt, AllocaIP, CodeGenIP, "masked");
4576+
*this, MaskedRegionBodyStmt, AllocIP, CodeGenIP, "masked");
45714577
return llvm::Error::success();
45724578
};
45734579

@@ -4607,10 +4613,11 @@ void CodeGenFunction::EmitOMPCriticalDirective(const OMPCriticalDirective &S) {
46074613
return llvm::Error::success();
46084614
};
46094615

4610-
auto BodyGenCB = [CriticalRegionBodyStmt, this](InsertPointTy AllocaIP,
4611-
InsertPointTy CodeGenIP) {
4616+
auto BodyGenCB = [CriticalRegionBodyStmt,
4617+
this](InsertPointTy AllocIP, InsertPointTy CodeGenIP,
4618+
ArrayRef<InsertPointTy> DeallocIPs) {
46124619
OMPBuilderCBHelpers::EmitOMPInlinedRegionBody(
4613-
*this, CriticalRegionBodyStmt, AllocaIP, CodeGenIP, "critical");
4620+
*this, CriticalRegionBodyStmt, AllocIP, CodeGenIP, "critical");
46144621
return llvm::Error::success();
46154622
};
46164623

@@ -5577,8 +5584,8 @@ void CodeGenFunction::EmitOMPTaskgroupDirective(
55775584
InsertPointTy AllocaIP(AllocaInsertPt->getParent(),
55785585
AllocaInsertPt->getIterator());
55795586

5580-
auto BodyGenCB = [&, this](InsertPointTy AllocaIP,
5581-
InsertPointTy CodeGenIP) {
5587+
auto BodyGenCB = [&, this](InsertPointTy AllocIP, InsertPointTy CodeGenIP,
5588+
ArrayRef<InsertPointTy> DeallocIPs) {
55825589
Builder.restoreIP(CodeGenIP);
55835590
EmitStmt(S.getInnermostCapturedStmt()->getCapturedStmt());
55845591
return llvm::Error::success();
@@ -5587,7 +5594,8 @@ void CodeGenFunction::EmitOMPTaskgroupDirective(
55875594
if (!CapturedStmtInfo)
55885595
CapturedStmtInfo = &CapStmtInfo;
55895596
llvm::OpenMPIRBuilder::InsertPointTy AfterIP =
5590-
cantFail(OMPBuilder.createTaskgroup(Builder, AllocaIP, BodyGenCB));
5597+
cantFail(OMPBuilder.createTaskgroup(Builder, AllocaIP,
5598+
/*DeallocIPs=*/{}, BodyGenCB));
55915599
Builder.restoreIP(AfterIP);
55925600
return;
55935601
}
@@ -6167,8 +6175,9 @@ void CodeGenFunction::EmitOMPOrderedDirective(const OMPOrderedDirective &S) {
61676175
return llvm::Error::success();
61686176
};
61696177

6170-
auto BodyGenCB = [&S, C, this](InsertPointTy AllocaIP,
6171-
InsertPointTy CodeGenIP) {
6178+
auto BodyGenCB = [&S, C, this](InsertPointTy AllocIP,
6179+
InsertPointTy CodeGenIP,
6180+
ArrayRef<InsertPointTy> DeallocIPs) {
61726181
Builder.restoreIP(CodeGenIP);
61736182

61746183
const CapturedStmt *CS = S.getInnermostCapturedStmt();
@@ -6186,7 +6195,7 @@ void CodeGenFunction::EmitOMPOrderedDirective(const OMPOrderedDirective &S) {
61866195
OutlinedFn, CapturedVars);
61876196
} else {
61886197
OMPBuilderCBHelpers::EmitOMPInlinedRegionBody(
6189-
*this, CS->getCapturedStmt(), AllocaIP, CodeGenIP, "ordered");
6198+
*this, CS->getCapturedStmt(), AllocIP, CodeGenIP, "ordered");
61906199
}
61916200
return llvm::Error::success();
61926201
};

llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -602,17 +602,19 @@ class OpenMPIRBuilder {
602602
/// such InsertPoints need to be preserved, it can split the block itself
603603
/// before calling the callback.
604604
///
605-
/// AllocaIP and CodeGenIP must not point to the same position.
606-
///
607-
/// \param AllocaIP is the insertion point at which new alloca instructions
608-
/// should be placed. The BasicBlock it is pointing to must
609-
/// not be split.
610-
/// \param CodeGenIP is the insertion point at which the body code should be
611-
/// placed.
612-
///
605+
/// AllocIP and CodeGenIP must not point to the same position.
606+
///
607+
/// \param AllocIP is the insertion point at which new allocations should
608+
/// be placed. The BasicBlock it is pointing to must not be
609+
/// split.
610+
/// \param CodeGenIP is the insertion point at which the body code should be
611+
/// placed.
612+
/// \param DeallocIPs is the list of insertion points where explicit
613+
/// deallocations, if needed, should be placed.
613614
/// \return an error, if any were triggered during execution.
614615
using BodyGenCallbackTy =
615-
function_ref<Error(InsertPointTy AllocaIP, InsertPointTy CodeGenIP)>;
616+
function_ref<Error(InsertPointTy AllocIP, InsertPointTy CodeGenIP,
617+
ArrayRef<InsertPointTy> DeallocIPs)>;
616618

617619
// This is created primarily for sections construct as llvm::function_ref
618620
// (BodyGenCallbackTy) is not storable (as described in the comments of
@@ -621,7 +623,8 @@ class OpenMPIRBuilder {
621623
///
622624
/// \return an error, if any were triggered during execution.
623625
using StorableBodyGenCallbackTy =
624-
std::function<Error(InsertPointTy AllocaIP, InsertPointTy CodeGenIP)>;
626+
std::function<Error(InsertPointTy AllocIP, InsertPointTy CodeGenIP,
627+
ArrayRef<InsertPointTy> DeallocIPs)>;
625628

626629
/// Callback type for loop body code generation.
627630
///
@@ -715,7 +718,9 @@ class OpenMPIRBuilder {
715718
/// Generator for '#omp parallel'
716719
///
717720
/// \param Loc The insert and source location description.
718-
/// \param AllocaIP The insertion points to be used for alloca instructions.
721+
/// \param AllocIP The insertion point to be used for allocations.
722+
/// \param DeallocIPs The insertion points to be used for explicit
723+
/// deallocations, if needed.
719724
/// \param BodyGenCB Callback that will generate the region code.
720725
/// \param PrivCB Callback to copy a given variable (think copy constructor).
721726
/// \param FiniCB Callback to finalize variable copies.
@@ -726,10 +731,10 @@ class OpenMPIRBuilder {
726731
///
727732
/// \returns The insertion position *after* the parallel.
728733
LLVM_ABI InsertPointOrErrorTy createParallel(
729-
const LocationDescription &Loc, InsertPointTy AllocaIP,
730-
BodyGenCallbackTy BodyGenCB, PrivatizeCallbackTy PrivCB,
731-
FinalizeCallbackTy FiniCB, Value *IfCondition, Value *NumThreads,
732-
omp::ProcBindKind ProcBind, bool IsCancellable);
734+
const LocationDescription &Loc, InsertPointTy AllocIP,
735+
ArrayRef<InsertPointTy> DeallocIPs, BodyGenCallbackTy BodyGenCB,
736+
PrivatizeCallbackTy PrivCB, FinalizeCallbackTy FiniCB, Value *IfCondition,
737+
Value *NumThreads, omp::ProcBindKind ProcBind, bool IsCancellable);
733738

734739
/// Generator for the control flow structure of an OpenMP canonical loop.
735740
///
@@ -1347,7 +1352,9 @@ class OpenMPIRBuilder {
13471352
/// Generator for `#omp task`
13481353
///
13491354
/// \param Loc The location where the task construct was encountered.
1350-
/// \param AllocaIP The insertion point to be used for alloca instructions.
1355+
/// \param AllocIP The insertion point to be used for allocations.
1356+
/// \param DeallocIPs The insertion points to be used for explicit
1357+
/// deallocations, if needed.
13511358
/// \param BodyGenCB Callback that will generate the region code.
13521359
/// \param Tied True if the task is tied, false if the task is untied.
13531360
/// \param Final i1 value which is `true` if the task is final, `false` if the
@@ -1363,21 +1370,23 @@ class OpenMPIRBuilder {
13631370
/// \param Mergeable If the given task is `mergeable`
13641371
/// \param priority `priority-value' specifies the execution order of the
13651372
/// tasks that is generated by the construct
1366-
LLVM_ABI InsertPointOrErrorTy
1367-
createTask(const LocationDescription &Loc, InsertPointTy AllocaIP,
1368-
BodyGenCallbackTy BodyGenCB, bool Tied = true,
1369-
Value *Final = nullptr, Value *IfCondition = nullptr,
1370-
SmallVector<DependData> Dependencies = {}, bool Mergeable = false,
1371-
Value *EventHandle = nullptr, Value *Priority = nullptr);
1373+
LLVM_ABI InsertPointOrErrorTy createTask(
1374+
const LocationDescription &Loc, InsertPointTy AllocIP,
1375+
ArrayRef<InsertPointTy> DeallocIPs, BodyGenCallbackTy BodyGenCB,
1376+
bool Tied = true, Value *Final = nullptr, Value *IfCondition = nullptr,
1377+
SmallVector<DependData> Dependencies = {}, bool Mergeable = false,
1378+
Value *EventHandle = nullptr, Value *Priority = nullptr);
13721379

13731380
/// Generator for the taskgroup construct
13741381
///
13751382
/// \param Loc The location where the taskgroup construct was encountered.
1376-
/// \param AllocaIP The insertion point to be used for alloca instructions.
1383+
/// \param AllocIP The insertion point to be used for allocations.
1384+
/// \param DeallocIPs The insertion point to be used for explicit deallocation
1385+
/// instructions, if needed.
13771386
/// \param BodyGenCB Callback that will generate the region code.
1378-
LLVM_ABI InsertPointOrErrorTy createTaskgroup(const LocationDescription &Loc,
1379-
InsertPointTy AllocaIP,
1380-
BodyGenCallbackTy BodyGenCB);
1387+
LLVM_ABI InsertPointOrErrorTy createTaskgroup(
1388+
const LocationDescription &Loc, InsertPointTy AllocIP,
1389+
ArrayRef<InsertPointTy> DeallocIPs, BodyGenCallbackTy BodyGenCB);
13811390

13821391
using FileIdentifierInfoCallbackTy =
13831392
std::function<std::tuple<std::string, uint64_t>()>;
@@ -2246,7 +2255,8 @@ class OpenMPIRBuilder {
22462255
struct OutlineInfo {
22472256
using PostOutlineCBTy = std::function<void(Function &)>;
22482257
PostOutlineCBTy PostOutlineCB;
2249-
BasicBlock *EntryBB, *ExitBB, *OuterAllocaBB;
2258+
BasicBlock *EntryBB, *ExitBB, *OuterAllocBB;
2259+
SmallVector<BasicBlock *> OuterDeallocBBs;
22502260
SmallVector<Value *, 2> ExcludeArgsFromAggregate;
22512261

22522262
LLVM_ABI virtual ~OutlineInfo() = default;
@@ -2319,7 +2329,8 @@ class OpenMPIRBuilder {
23192329
/// \return an error, if any were triggered during execution.
23202330
LLVM_ABI Error emitIfClause(Value *Cond, BodyGenCallbackTy ThenGen,
23212331
BodyGenCallbackTy ElseGen,
2322-
InsertPointTy AllocaIP = {});
2332+
InsertPointTy AllocIP = {},
2333+
ArrayRef<InsertPointTy> DeallocIPs = {});
23232334

23242335
/// Create the global variable holding the offload mappings information.
23252336
LLVM_ABI GlobalVariable *
@@ -2874,11 +2885,13 @@ class OpenMPIRBuilder {
28742885
/// Generator for `#omp distribute`
28752886
///
28762887
/// \param Loc The location where the distribute construct was encountered.
2877-
/// \param AllocaIP The insertion points to be used for alloca instructions.
2888+
/// \param AllocIP The insertion point to be used for allocations.
2889+
/// \param DeallocIPs The insertion points to be used for explicit
2890+
/// deallocations, if needed.
28782891
/// \param BodyGenCB Callback that will generate the region code.
2879-
LLVM_ABI InsertPointOrErrorTy createDistribute(const LocationDescription &Loc,
2880-
InsertPointTy AllocaIP,
2881-
BodyGenCallbackTy BodyGenCB);
2892+
LLVM_ABI InsertPointOrErrorTy createDistribute(
2893+
const LocationDescription &Loc, InsertPointTy AllocIP,
2894+
ArrayRef<InsertPointTy> DeallocIPs, BodyGenCallbackTy BodyGenCB);
28822895

28832896
/// Generate conditional branch and relevant BasicBlocks through which private
28842897
/// threads copy the 'copyin' variables from Master copy to threadprivate
@@ -3206,9 +3219,11 @@ class OpenMPIRBuilder {
32063219
/// Generator for '#omp target data'
32073220
///
32083221
/// \param Loc The location where the target data construct was encountered.
3209-
/// \param AllocaIP The insertion points to be used for alloca instructions.
3222+
/// \param AllocIP The insertion points to be used for allocations.
32103223
/// \param CodeGenIP The insertion point at which the target directive code
32113224
/// should be placed.
3225+
/// \param DeallocIPs The insertion points at which explicit deallocations
3226+
/// should be placed, if needed.
32123227
/// \param IsBegin If true then emits begin mapper call otherwise emits
32133228
/// end mapper call.
32143229
/// \param DeviceID Stores the DeviceID from the device clause.
@@ -3221,10 +3236,10 @@ class OpenMPIRBuilder {
32213236
/// \param DeviceAddrCB Optional callback to generate code related to
32223237
/// use_device_ptr and use_device_addr.
32233238
LLVM_ABI InsertPointOrErrorTy createTargetData(
3224-
const LocationDescription &Loc, InsertPointTy AllocaIP,
3225-
InsertPointTy CodeGenIP, Value *DeviceID, Value *IfCond,
3226-
TargetDataInfo &Info, GenMapInfoCallbackTy GenMapInfoCB,
3227-
CustomMapperCallbackTy CustomMapperCB,
3239+
const LocationDescription &Loc, InsertPointTy AllocIP,
3240+
InsertPointTy CodeGenIP, ArrayRef<InsertPointTy> DeallocIPs,
3241+
Value *DeviceID, Value *IfCond, TargetDataInfo &Info,
3242+
GenMapInfoCallbackTy GenMapInfoCB, CustomMapperCallbackTy CustomMapperCB,
32283243
omp::RuntimeFunction *MapperFunc = nullptr,
32293244
function_ref<InsertPointOrErrorTy(InsertPointTy CodeGenIP,
32303245
BodyGenTy BodyGenType)>
@@ -3233,7 +3248,8 @@ class OpenMPIRBuilder {
32333248
Value *SrcLocInfo = nullptr);
32343249

32353250
using TargetBodyGenCallbackTy = function_ref<InsertPointOrErrorTy(
3236-
InsertPointTy AllocaIP, InsertPointTy CodeGenIP)>;
3251+
InsertPointTy AllocIP, InsertPointTy CodeGenIP,
3252+
ArrayRef<InsertPointTy> DeallocIPs)>;
32373253

32383254
using TargetGenArgAccessorsCallbackTy = function_ref<InsertPointOrErrorTy(
32393255
Argument &Arg, Value *Input, Value *&RetVal, InsertPointTy AllocaIP,
@@ -3245,6 +3261,8 @@ class OpenMPIRBuilder {
32453261
/// \param IsOffloadEntry whether it is an offload entry.
32463262
/// \param CodeGenIP The insertion point where the call to the outlined
32473263
/// function should be emitted.
3264+
/// \param DeallocIPs The insertion points at which explicit deallocations
3265+
/// should be placed, if needed.
32483266
/// \param Info Stores all information realted to the Target directive.
32493267
/// \param EntryInfo The entry information about the function.
32503268
/// \param DefaultAttrs Structure containing the default attributes, including
@@ -3265,8 +3283,9 @@ class OpenMPIRBuilder {
32653283
/// not.
32663284
LLVM_ABI InsertPointOrErrorTy createTarget(
32673285
const LocationDescription &Loc, bool IsOffloadEntry,
3268-
OpenMPIRBuilder::InsertPointTy AllocaIP,
3269-
OpenMPIRBuilder::InsertPointTy CodeGenIP, TargetDataInfo &Info,
3286+
OpenMPIRBuilder::InsertPointTy AllocIP,
3287+
OpenMPIRBuilder::InsertPointTy CodeGenIP,
3288+
ArrayRef<InsertPointTy> DeallocIPs, TargetDataInfo &Info,
32703289
TargetRegionEntryInfo &EntryInfo,
32713290
const TargetKernelDefaultAttrs &DefaultAttrs,
32723291
const TargetKernelRuntimeAttrs &RuntimeAttrs, Value *IfCond,

0 commit comments

Comments
 (0)