diff --git a/mlir/lib/Conversion/LLVMCommon/TypeConverter.cpp b/mlir/lib/Conversion/LLVMCommon/TypeConverter.cpp index 4e7758bf46d9c..ce91424e7a577 100644 --- a/mlir/lib/Conversion/LLVMCommon/TypeConverter.cpp +++ b/mlir/lib/Conversion/LLVMCommon/TypeConverter.cpp @@ -524,8 +524,11 @@ LLVMTypeConverter::getMemRefAddressSpace(BaseMemRefType type) const { return failure(); if (!(*converted)) // Conversion to default is 0. return 0; - if (auto explicitSpace = llvm::dyn_cast_if_present(*converted)) - return explicitSpace.getInt(); + if (auto explicitSpace = dyn_cast_if_present(*converted)) { + if (explicitSpace.getType().isIndex() || + explicitSpace.getType().isSignlessInteger()) + return explicitSpace.getInt(); + } return failure(); } diff --git a/mlir/lib/Conversion/MemRefToLLVM/AllocLikeConversion.cpp b/mlir/lib/Conversion/MemRefToLLVM/AllocLikeConversion.cpp index e48ca5180b706..a6408391b1330 100644 --- a/mlir/lib/Conversion/MemRefToLLVM/AllocLikeConversion.cpp +++ b/mlir/lib/Conversion/MemRefToLLVM/AllocLikeConversion.cpp @@ -74,6 +74,12 @@ std::tuple AllocationOpLLVMLowering::allocateBufferManuallyAlign( MemRefType memRefType = getMemRefResultType(op); // Allocate the underlying buffer. Type elementPtrType = this->getElementPtrType(memRefType); + if (!elementPtrType) { + emitError(loc, "conversion of memref memory space ") + << memRefType.getMemorySpace() + << " to integer address space " + "failed. Consider adding memory space conversions."; + } LLVM::LLVMFuncOp allocFuncOp = getNotalignedAllocFn( getTypeConverter(), op->getParentWithTrait(), getIndexType()); diff --git a/mlir/test/Conversion/MemRefToLLVM/invalid-uint.mlir b/mlir/test/Conversion/MemRefToLLVM/invalid-uint.mlir new file mode 100644 index 0000000000000..7e94677ebbdd7 --- /dev/null +++ b/mlir/test/Conversion/MemRefToLLVM/invalid-uint.mlir @@ -0,0 +1,8 @@ +// RUN: mlir-opt %s -finalize-memref-to-llvm -verify-diagnostics + +// CHECK-LABEL: @invalid_int_conversion +func.func @invalid_int_conversion() { + // expected-error@+1 {{conversion of memref memory space 1 : ui64 to integer address space failed. Consider adding memory space conversions.}} + %alloc = memref.alloc() {alignment = 64 : i64} : memref<10xf32, 1 : ui64> + return +}