diff options
Diffstat (limited to 'mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp')
-rw-r--r-- | mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp index 584ac2f..34f372a 100644 --- a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp +++ b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp @@ -187,8 +187,8 @@ createDecl(PatternRewriter &builder, SymbolTable &symbolTable, scf::ReduceOp reduce, int64_t reductionIndex, Attribute initValue) { OpBuilder::InsertionGuard guard(builder); Type type = reduce.getOperands()[reductionIndex].getType(); - auto decl = builder.create<omp::DeclareReductionOp>(reduce.getLoc(), - "__scf_reduction", type); + auto decl = omp::DeclareReductionOp::create(builder, reduce.getLoc(), + "__scf_reduction", type); symbolTable.insert(decl); builder.createBlock(&decl.getInitializerRegion(), @@ -196,8 +196,8 @@ createDecl(PatternRewriter &builder, SymbolTable &symbolTable, {reduce.getOperands()[reductionIndex].getLoc()}); builder.setInsertionPointToEnd(&decl.getInitializerRegion().back()); Value init = - builder.create<LLVM::ConstantOp>(reduce.getLoc(), type, initValue); - builder.create<omp::YieldOp>(reduce.getLoc(), init); + LLVM::ConstantOp::create(builder, reduce.getLoc(), type, initValue); + omp::YieldOp::create(builder, reduce.getLoc(), init); Operation *terminator = &reduce.getReductions()[reductionIndex].front().back(); @@ -227,12 +227,12 @@ static omp::DeclareReductionOp addAtomicRMW(OpBuilder &builder, {reduceOperandLoc, reduceOperandLoc}); Block *atomicBlock = &decl.getAtomicReductionRegion().back(); builder.setInsertionPointToEnd(atomicBlock); - Value loaded = builder.create<LLVM::LoadOp>(reduce.getLoc(), decl.getType(), - atomicBlock->getArgument(1)); - builder.create<LLVM::AtomicRMWOp>(reduce.getLoc(), atomicKind, - atomicBlock->getArgument(0), loaded, - LLVM::AtomicOrdering::monotonic); - builder.create<omp::YieldOp>(reduce.getLoc(), ArrayRef<Value>()); + Value loaded = LLVM::LoadOp::create(builder, reduce.getLoc(), decl.getType(), + atomicBlock->getArgument(1)); + LLVM::AtomicRMWOp::create(builder, reduce.getLoc(), atomicKind, + atomicBlock->getArgument(0), loaded, + LLVM::AtomicOrdering::monotonic); + omp::YieldOp::create(builder, reduce.getLoc(), ArrayRef<Value>()); return decl; } @@ -380,8 +380,9 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { // Allocate reduction variables. Make sure the we don't overflow the stack // with local `alloca`s by saving and restoring the stack pointer. Location loc = parallelOp.getLoc(); - Value one = rewriter.create<LLVM::ConstantOp>( - loc, rewriter.getIntegerType(64), rewriter.getI64IntegerAttr(1)); + Value one = + LLVM::ConstantOp::create(rewriter, loc, rewriter.getIntegerType(64), + rewriter.getI64IntegerAttr(1)); SmallVector<Value> reductionVariables; reductionVariables.reserve(parallelOp.getNumReductions()); auto ptrType = LLVM::LLVMPointerType::get(parallelOp.getContext()); @@ -390,9 +391,9 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { isa<LLVM::PointerElementTypeInterface>(init.getType())) && "cannot create a reduction variable if the type is not an LLVM " "pointer element"); - Value storage = - rewriter.create<LLVM::AllocaOp>(loc, ptrType, init.getType(), one, 0); - rewriter.create<LLVM::StoreOp>(loc, init, storage); + Value storage = LLVM::AllocaOp::create(rewriter, loc, ptrType, + init.getType(), one, 0); + LLVM::StoreOp::create(rewriter, loc, init, storage); reductionVariables.push_back(storage); } @@ -411,8 +412,8 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { assert(redRegion.hasOneBlock() && "expect reduction region to have one block"); Value pvtRedVar = parallelOp.getRegion().addArgument(x.getType(), loc); - Value pvtRedVal = rewriter.create<LLVM::LoadOp>(reduce.getLoc(), - rD.getType(), pvtRedVar); + Value pvtRedVal = LLVM::LoadOp::create(rewriter, reduce.getLoc(), + rD.getType(), pvtRedVar); // Make a copy of the reduction combiner region in the body mlir::OpBuilder builder(rewriter.getContext()); builder.setInsertionPoint(reduce); @@ -427,7 +428,7 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { assert(yieldOp && yieldOp.getResults().size() == 1 && "expect YieldOp in reduction region to return one result"); Value redVal = yieldOp.getResults()[0]; - rewriter.create<LLVM::StoreOp>(loc, redVal, pvtRedVar); + LLVM::StoreOp::create(rewriter, loc, redVal, pvtRedVar); rewriter.eraseOp(yieldOp); break; } @@ -437,12 +438,12 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { Value numThreadsVar; if (numThreads > 0) { - numThreadsVar = rewriter.create<LLVM::ConstantOp>( - loc, rewriter.getI32IntegerAttr(numThreads)); + numThreadsVar = LLVM::ConstantOp::create( + rewriter, loc, rewriter.getI32IntegerAttr(numThreads)); } // Create the parallel wrapper. - auto ompParallel = rewriter.create<omp::ParallelOp>( - loc, + auto ompParallel = omp::ParallelOp::create( + rewriter, loc, /* allocate_vars = */ llvm::SmallVector<Value>{}, /* allocator_vars = */ llvm::SmallVector<Value>{}, /* if_expr = */ Value{}, @@ -464,7 +465,7 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { { OpBuilder::InsertionGuard allocaGuard(rewriter); // Create worksharing loop wrapper. - auto wsloopOp = rewriter.create<omp::WsloopOp>(parallelOp.getLoc()); + auto wsloopOp = omp::WsloopOp::create(rewriter, parallelOp.getLoc()); if (!reductionVariables.empty()) { wsloopOp.setReductionSymsAttr( ArrayAttr::get(rewriter.getContext(), reductionSyms)); @@ -476,7 +477,7 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { wsloopOp.setReductionByref( DenseBoolArrayAttr::get(rewriter.getContext(), reductionByRef)); } - rewriter.create<omp::TerminatorOp>(loc); // omp.parallel terminator. + omp::TerminatorOp::create(rewriter, loc); // omp.parallel terminator. // The wrapper's entry block arguments will define the reduction // variables. @@ -490,8 +491,8 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { parallelOp.getLoc())); // Create loop nest and populate region with contents of scf.parallel. - auto loopOp = rewriter.create<omp::LoopNestOp>( - parallelOp.getLoc(), parallelOp.getLowerBound(), + auto loopOp = omp::LoopNestOp::create( + rewriter, parallelOp.getLoc(), parallelOp.getLowerBound(), parallelOp.getUpperBound(), parallelOp.getStep()); rewriter.inlineRegionBefore(parallelOp.getRegion(), loopOp.getRegion(), @@ -511,13 +512,13 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { rewriter.splitBlock(&loopOpEntryBlock, loopOpEntryBlock.begin()); rewriter.setInsertionPointToStart(&loopOpEntryBlock); - auto scope = rewriter.create<memref::AllocaScopeOp>(parallelOp.getLoc(), - TypeRange()); - rewriter.create<omp::YieldOp>(loc, ValueRange()); + auto scope = memref::AllocaScopeOp::create( + rewriter, parallelOp.getLoc(), TypeRange()); + omp::YieldOp::create(rewriter, loc, ValueRange()); Block *scopeBlock = rewriter.createBlock(&scope.getBodyRegion()); rewriter.mergeBlocks(ops, scopeBlock); rewriter.setInsertionPointToEnd(&*scope.getBodyRegion().begin()); - rewriter.create<memref::AllocaScopeReturnOp>(loc, ValueRange()); + memref::AllocaScopeReturnOp::create(rewriter, loc, ValueRange()); } } @@ -526,7 +527,7 @@ struct ParallelOpLowering : public OpRewritePattern<scf::ParallelOp> { results.reserve(reductionVariables.size()); for (auto [variable, type] : llvm::zip(reductionVariables, parallelOp.getResultTypes())) { - Value res = rewriter.create<LLVM::LoadOp>(loc, type, variable); + Value res = LLVM::LoadOp::create(rewriter, loc, type, variable); results.push_back(res); } rewriter.replaceOp(parallelOp, results); |