diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMTypes.h b/mlir/include/mlir/Dialect/LLVMIR/LLVMTypes.h --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMTypes.h +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMTypes.h @@ -143,8 +143,8 @@ static LLVMType getInt8Ty(MLIRContext *context) { return getIntNTy(context, /*numBits=*/8); } - static LLVMType getInt8PtrTy(MLIRContext *context) { - return getInt8Ty(context).getPointerTo(); + static LLVMType getInt8PtrTy(MLIRContext *context, unsigned addrSpace = 0) { + return getInt8Ty(context).getPointerTo(addrSpace); } static LLVMType getInt16Ty(MLIRContext *context) { return getIntNTy(context, /*numBits=*/16); diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp --- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp +++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp @@ -390,7 +390,8 @@ Type LLVMTypeConverter::convertUnrankedMemRefType(UnrankedMemRefType type) { auto rankTy = getIndexType(); - auto ptrTy = LLVM::LLVMType::getInt8PtrTy(&getContext()); + auto ptrTy = + LLVM::LLVMType::getInt8PtrTy(&getContext(), type.getMemorySpace()); return LLVM::LLVMType::getStructTy(rankTy, ptrTy); } diff --git a/mlir/test/Conversion/StandardToLLVM/convert-static-memref-ops.mlir b/mlir/test/Conversion/StandardToLLVM/convert-static-memref-ops.mlir --- a/mlir/test/Conversion/StandardToLLVM/convert-static-memref-ops.mlir +++ b/mlir/test/Conversion/StandardToLLVM/convert-static-memref-ops.mlir @@ -388,3 +388,12 @@ %4 = dim %static, %c4 : memref<42x32x15x13x27xf32> return } + +// ----- + +// CHECK-LABEL: func @check_unranked_addrspace +func @check_unranked_addrspace(%in : memref<*xf32, 2>) { + // CHECK: llvm.mlir.undef : !llvm.struct<(i64, ptr)> + return +} +