diff --git a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp index 00bbdcb12e326..83681b2d5fd87 100644 --- a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp +++ b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp @@ -754,9 +754,11 @@ class GlobalMemrefOpLowering : public ConvertOpToLLVMPattern { LLVM::Linkage linkage = global.isPublic() ? LLVM::Linkage::External : LLVM::Linkage::Private; + bool isExternal = global.isExternal(); + bool isUninitialized = global.isUninitialized(); Attribute initialValue = nullptr; - if (!global.isExternal() && !global.isUninitialized()) { + if (!isExternal && !isUninitialized) { auto elementsAttr = llvm::cast(*global.getInitialValue()); initialValue = elementsAttr; @@ -773,35 +775,29 @@ class GlobalMemrefOpLowering : public ConvertOpToLLVMPattern { return global.emitOpError( "memory space cannot be converted to an integer address space"); + // Remove old operation from symbol table. + SymbolTable *symbolTable = nullptr; if (symbolTables) { Operation *symbolTableOp = global->getParentWithTrait(); - - if (symbolTableOp) { - SymbolTable &symbolTable = symbolTables->getSymbolTable(symbolTableOp); - symbolTable.remove(global); - } + symbolTable = &symbolTables->getSymbolTable(symbolTableOp); + symbolTable->remove(global); } + // Create new operation. auto newGlobal = rewriter.replaceOpWithNewOp( global, arrayTy, global.getConstant(), linkage, global.getSymName(), initialValue, alignment, *addressSpace); - if (symbolTables) { - Operation *symbolTableOp = - global->getParentWithTrait(); - - if (symbolTableOp) { - SymbolTable &symbolTable = symbolTables->getSymbolTable(symbolTableOp); - symbolTable.insert(newGlobal, rewriter.getInsertionPoint()); - } - } + // Insert new operation into symbol table. + if (symbolTable) + symbolTable->insert(newGlobal, rewriter.getInsertionPoint()); - if (!global.isExternal() && global.isUninitialized()) { + if (!isExternal && isUninitialized) { rewriter.createBlock(&newGlobal.getInitializerRegion()); Value undef[] = { - rewriter.create(global.getLoc(), arrayTy)}; - rewriter.create(global.getLoc(), undef); + rewriter.create(newGlobal.getLoc(), arrayTy)}; + rewriter.create(newGlobal.getLoc(), undef); } return success(); }