diff options
| -rw-r--r-- | mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td | 5 | ||||
| -rw-r--r-- | mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp | 3 | ||||
| -rw-r--r-- | mlir/test/Dialect/LLVMIR/global.mlir | 16 |
3 files changed, 21 insertions, 3 deletions
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td index 573542ba838..66d9ba3f750 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -509,8 +509,9 @@ def LLVM_AddressOfOp OpBuilder<"Builder *builder, OperationState &result, GlobalOp global, " "ArrayRef<NamedAttribute> attrs = {}", [{ - build(builder, result, global.getType().getPointerTo(), global.sym_name(), - attrs);}]> + build(builder, result, + global.getType().getPointerTo(global.addr_space().getZExtValue()), + global.sym_name(), attrs);}]> ]; let extraClassDeclaration = [{ diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp index 00911012c1d..fb4555674eb 100644 --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp @@ -825,7 +825,8 @@ static LogicalResult verify(AddressOfOp op) { return op.emitOpError( "must reference a global defined by 'llvm.mlir.global'"); - if (global.getType().getPointerTo() != op.getResult()->getType()) + if (global.getType().getPointerTo(global.addr_space().getZExtValue()) != + op.getResult()->getType()) return op.emitOpError( "the type must be a pointer to the type of the referred global"); diff --git a/mlir/test/Dialect/LLVMIR/global.mlir b/mlir/test/Dialect/LLVMIR/global.mlir index 11f9b23efee..35e9415bbee 100644 --- a/mlir/test/Dialect/LLVMIR/global.mlir +++ b/mlir/test/Dialect/LLVMIR/global.mlir @@ -161,3 +161,19 @@ llvm.mlir.global internal @g(43 : i64) : !llvm.i64 { %c = llvm.mlir.constant(42 : i64) : !llvm.i64 llvm.return %c : !llvm.i64 } + +// ----- + +llvm.mlir.global internal @g(32 : i64) {addr_space = 3: i32} : !llvm.i64 +func @mismatch_addr_space_implicit_global() { + // expected-error @+1 {{op the type must be a pointer to the type of the referred global}} + llvm.mlir.addressof @g : !llvm<"i64*"> +} + +// ----- + +llvm.mlir.global internal @g(32 : i64) {addr_space = 3: i32} : !llvm.i64 +func @mismatch_addr_space() { + // expected-error @+1 {{op the type must be a pointer to the type of the referred global}} + llvm.mlir.addressof @g : !llvm<"i64 addrspace(4)*"> +} |

