initialValue = elementsAttr.getValue({});
}
- rewriter.replaceOpWithNewOp<LLVM::GlobalOp>(
+ auto newGlobal = rewriter.replaceOpWithNewOp<LLVM::GlobalOp>(
global, arrayTy, global.constant(), linkage, global.sym_name(),
initialValue, /*alignment=*/0, type.getMemorySpaceAsInt());
+ if (!global.isExternal() && global.isUninitialized()) {
+ Block *blk = new Block();
+ newGlobal.getInitializerRegion().push_back(blk);
+ rewriter.setInsertionPointToStart(blk);
+ Value undef[] = {
+ rewriter.create<LLVM::UndefOp>(global.getLoc(), arrayTy)};
+ rewriter.create<LLVM::ReturnOp>(global.getLoc(), undef);
+ }
return success();
}
};
// -----
-// CHECK: llvm.mlir.global external @gv0() : !llvm.array<2 x f32>
+// CHECK: llvm.mlir.global external @gv0() : !llvm.array<2 x f32> {
+// CHECK-NEXT: %0 = llvm.mlir.undef : !llvm.array<2 x f32>
+// CHECK-NEXT: llvm.return %0 : !llvm.array<2 x f32>
+// CHECK-NEXT: }
memref.global @gv0 : memref<2xf32> = uninitialized
// CHECK: llvm.mlir.global private @gv1() : !llvm.array<2 x f32>