diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -403,6 +403,16 @@ anyExternalLinkage ? nullptr : cst, op.sym_name(), /*InsertBefore=*/nullptr, llvm::GlobalValue::NotThreadLocal, addrSpace); + // Passing alignment, if it is specified + ::mlir::Attribute raw_align_attr = op->getAttr("align") ; + if(raw_align_attr) { + ::mlir::IntegerAttr align_attr = + raw_align_attr.template cast<::mlir::IntegerAttr>(); + llvm::APInt x = align_attr.getValue() ; + int alignment = x.getZExtValue() ; + var->setAlignment(llvm::MaybeAlign(alignment)) ; + } + globalsMapping.try_emplace(op, var); } diff --git a/mlir/test/Dialect/LLVMIR/global.mlir b/mlir/test/Dialect/LLVMIR/global.mlir --- a/mlir/test/Dialect/LLVMIR/global.mlir +++ b/mlir/test/Dialect/LLVMIR/global.mlir @@ -9,6 +9,12 @@ // CHECK: llvm.mlir.global internal @global(42 : i64) : i64 llvm.mlir.global internal @global(42 : i64) : i64 +// CHECK: llvm.mlir.global private @aligned_global(42 : i64) {align = 64 : i64} : i64 +llvm.mlir.global private @aligned_global(42 : i64) {align = 64 : i64} : i64 + +// CHECK: llvm.mlir.global private constant @aligned_global_const(42 : i64) {align = 32 : i32} : i64 +llvm.mlir.global private constant @aligned_global_const(42 : i64) {align = 32 : i32} : i64 + // CHECK: llvm.mlir.global internal constant @constant(3.700000e+01 : f64) : f32 llvm.mlir.global internal constant @constant(37.0) : f32