[Mlir-commits] [mlir] 8304ab5 - [mlir] Avoid creating local OpBuilders in Standard-to-LLVM conversion
Alex Zinenko
llvmlistbot at llvm.org
Fri Jun 26 06:38:25 PDT 2020
Author: Alex Zinenko
Date: 2020-06-26T15:38:00+02:00
New Revision: 8304ab5799b4172462877ca7495115c659ec0be0
URL: https://github.com/llvm/llvm-project/commit/8304ab5799b4172462877ca7495115c659ec0be0
DIFF: https://github.com/llvm/llvm-project/commit/8304ab5799b4172462877ca7495115c659ec0be0.diff
LOG: [mlir] Avoid creating local OpBuilders in Standard-to-LLVM conversion
Conversions of allocation-related operations in Standard-to-LLVM need
declarations of "malloc" and "free" (or equivalents). They use locally created
OpBuilders pointed at the module level to declare these functions if necessary.
This is poorly compatible with the pattern infrastructure that is unaware of
new operations being created. Update the insertion point of the main rewriter
instead.
Differential Revision: https://reviews.llvm.org/D82649
Added:
Modified:
mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
index 9376d53dc994..2a3c7a399b6a 100644
--- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
+++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
@@ -1785,12 +1785,14 @@ struct AllocLikeOpLowering : public ConvertOpToLLVMPattern<AllocLikeOp> {
auto module = allocOp.getParentOfType<ModuleOp>();
auto allocFunc = module.lookupSymbol<LLVM::LLVMFuncOp>(allocFuncName);
if (!allocFunc) {
- OpBuilder moduleBuilder(op->getParentOfType<ModuleOp>().getBodyRegion());
+ OpBuilder::InsertionGuard guard(rewriter);
+ rewriter.setInsertionPointToStart(
+ op->getParentOfType<ModuleOp>().getBody());
SmallVector<LLVM::LLVMType, 2> callArgTypes = {getIndexType()};
// aligned_alloc(size_t alignment, size_t size)
if (useAlignedAlloc)
callArgTypes.push_back(getIndexType());
- allocFunc = moduleBuilder.create<LLVM::LLVMFuncOp>(
+ allocFunc = rewriter.create<LLVM::LLVMFuncOp>(
rewriter.getUnknownLoc(), allocFuncName,
LLVM::LLVMType::getFunctionTy(getVoidPtrType(), callArgTypes,
/*isVarArg=*/false));
@@ -2093,8 +2095,10 @@ struct DeallocOpLowering : public ConvertOpToLLVMPattern<DeallocOp> {
auto freeFunc =
op->getParentOfType<ModuleOp>().lookupSymbol<LLVM::LLVMFuncOp>("free");
if (!freeFunc) {
- OpBuilder moduleBuilder(op->getParentOfType<ModuleOp>().getBodyRegion());
- freeFunc = moduleBuilder.create<LLVM::LLVMFuncOp>(
+ OpBuilder::InsertionGuard guard(rewriter);
+ rewriter.setInsertionPointToStart(
+ op->getParentOfType<ModuleOp>().getBody());
+ freeFunc = rewriter.create<LLVM::LLVMFuncOp>(
rewriter.getUnknownLoc(), "free",
LLVM::LLVMType::getFunctionTy(getVoidType(), getVoidPtrType(),
/*isVarArg=*/false));
More information about the Mlir-commits
mailing list