[Mlir-commits] [mlir] 1c083e6 - [mlir] Add support for the nest attribute to the LLVM-IR dialect conversion.
Eric Schweitz
llvmlistbot at llvm.org
Fri Mar 18 08:15:16 PDT 2022
Author: Eric Schweitz
Date: 2022-03-18T08:15:03-07:00
New Revision: 1c083e698504277583d18fa64859ce2038779aa3
URL: https://github.com/llvm/llvm-project/commit/1c083e698504277583d18fa64859ce2038779aa3
DIFF: https://github.com/llvm/llvm-project/commit/1c083e698504277583d18fa64859ce2038779aa3.diff
LOG: [mlir] Add support for the nest attribute to the LLVM-IR dialect conversion.
Differential Revision: https://reviews.llvm.org/D121948
Added:
Modified:
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
mlir/test/Dialect/LLVMIR/func.mlir
mlir/test/Target/LLVMIR/llvmir-invalid.mlir
mlir/test/Target/LLVMIR/llvmir.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index 0dd1d28ae9bfe..5140f29eed272 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -859,6 +859,15 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
.addByValAttr(convertType(argTy.getElementType())));
}
+ if (auto attr = func.getArgAttrOfType<UnitAttr>(argIdx, "llvm.nest")) {
+ auto argTy = mlirArg.getType();
+ if (!argTy.isa<LLVM::LLVMPointerType>())
+ return func.emitError(
+ "llvm.nest attribute attached to LLVM non-pointer argument");
+ llvmArg.addAttrs(llvm::AttrBuilder(llvmArg.getContext())
+ .addAttribute(llvm::Attribute::Nest));
+ }
+
mapValue(mlirArg, &llvmArg);
argIdx++;
}
diff --git a/mlir/test/Dialect/LLVMIR/func.mlir b/mlir/test/Dialect/LLVMIR/func.mlir
index ed6295773c771..d8761e44962b9 100644
--- a/mlir/test/Dialect/LLVMIR/func.mlir
+++ b/mlir/test/Dialect/LLVMIR/func.mlir
@@ -97,6 +97,11 @@ module {
llvm.return
}
+ // CHECK: llvm.func @nestattr(%{{.*}}: !llvm.ptr<i32> {llvm.nest})
+ llvm.func @nestattr(%arg0: !llvm.ptr<i32> {llvm.nest}) {
+ llvm.return
+ }
+
// CHECK: llvm.func @variadic(...)
llvm.func @variadic(...)
diff --git a/mlir/test/Target/LLVMIR/llvmir-invalid.mlir b/mlir/test/Target/LLVMIR/llvmir-invalid.mlir
index cc5dc86e302e8..59f308e372d41 100644
--- a/mlir/test/Target/LLVMIR/llvmir-invalid.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-invalid.mlir
@@ -15,13 +15,20 @@ llvm.func @invalid_noalias(%arg0 : f32 {llvm.noalias}) -> f32 {
// -----
// expected-error @+1 {{llvm.sret attribute attached to LLVM non-pointer argument}}
-llvm.func @invalid_noalias(%arg0 : f32 {llvm.sret}) -> f32 {
+llvm.func @invalid_sret(%arg0 : f32 {llvm.sret}) -> f32 {
+ llvm.return %arg0 : f32
+}
+
+// -----
+
+// expected-error @+1 {{llvm.nest attribute attached to LLVM non-pointer argument}}
+llvm.func @invalid_nest(%arg0 : f32 {llvm.nest}) -> f32 {
llvm.return %arg0 : f32
}
// -----
// expected-error @+1 {{llvm.byval attribute attached to LLVM non-pointer argument}}
-llvm.func @invalid_noalias(%arg0 : f32 {llvm.byval}) -> f32 {
+llvm.func @invalid_byval(%arg0 : f32 {llvm.byval}) -> f32 {
llvm.return %arg0 : f32
}
diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir
index 824d48ba37e61..99b3f38d766d6 100644
--- a/mlir/test/Target/LLVMIR/llvmir.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir.mlir
@@ -1057,6 +1057,11 @@ llvm.func @sretattr(%arg0: !llvm.ptr<i32> {llvm.sret}) {
llvm.return
}
+// CHECK-LABEL: define void @nestattr(i32* nest %
+llvm.func @nestattr(%arg0: !llvm.ptr<i32> {llvm.nest}) {
+ llvm.return
+}
+
// CHECK-LABEL: define void @llvm_align(float* align 4 {{%*.}})
llvm.func @llvm_align(%arg0: !llvm.ptr<f32> {llvm.align = 4}) {
llvm.return
More information about the Mlir-commits
mailing list