@@ -1344,13 +1344,23 @@ allocatePrivateVars(llvm::IRBuilderBase &builder,
1344
1344
llvm::SmallVectorImpl<llvm::Value *> &llvmPrivateVars,
1345
1345
const llvm::OpenMPIRBuilder::InsertPointTy &allocaIP,
1346
1346
llvm::DenseMap<Value, Value> *mappedPrivateVars = nullptr ) {
1347
- llvm::IRBuilderBase::InsertPointGuard guard (builder);
1348
1347
// Allocate private vars
1349
1348
llvm::BranchInst *allocaTerminator =
1350
1349
llvm::cast<llvm::BranchInst>(allocaIP.getBlock ()->getTerminator ());
1350
+ if (allocaTerminator->getNumSuccessors () != 1 ) {
1351
+ splitBB (llvm::OpenMPIRBuilder::InsertPointTy (
1352
+ allocaIP.getBlock (), allocaTerminator->getIterator ()),
1353
+ true , " omp.region.after_alloca" );
1354
+ }
1355
+
1356
+ llvm::IRBuilderBase::InsertPointGuard guard (builder);
1357
+ // Update the allocaTerminator in case the alloca block was split above.
1358
+ allocaTerminator =
1359
+ llvm::cast<llvm::BranchInst>(allocaIP.getBlock ()->getTerminator ());
1351
1360
builder.SetInsertPoint (allocaTerminator);
1352
1361
assert (allocaTerminator->getNumSuccessors () == 1 &&
1353
1362
" This is an unconditional branch created by OpenMPIRBuilder" );
1363
+
1354
1364
llvm::BasicBlock *afterAllocas = allocaTerminator->getSuccessor (0 );
1355
1365
1356
1366
// FIXME: Some of the allocation regions do more than just allocating.
@@ -1880,11 +1890,6 @@ convertOmpWsloop(Operation &opInst, llvm::IRBuilderBase &builder,
1880
1890
SmallVector<llvm::Value *> privateReductionVariables (
1881
1891
wsloopOp.getNumReductionVars ());
1882
1892
1883
- splitBB (llvm::OpenMPIRBuilder::InsertPointTy (
1884
- allocaIP.getBlock (),
1885
- allocaIP.getBlock ()->getTerminator ()->getIterator ()),
1886
- true , " omp.region.after_alloca" );
1887
-
1888
1893
llvm::Expected<llvm::BasicBlock *> afterAllocas = allocatePrivateVars (
1889
1894
builder, moduleTranslation, privateBlockArgs, privateDecls,
1890
1895
mlirPrivateVars, llvmPrivateVars, allocaIP);
0 commit comments