summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td5
-rw-r--r--mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp3
-rw-r--r--mlir/test/Dialect/LLVMIR/global.mlir16
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)*">
+}
OpenPOWER on IntegriCloud