Skip to content

Commit 1c083e6

Browse files
committed
[mlir] Add support for the nest attribute to the LLVM-IR dialect conversion.
Differential Revision: https://reviews.llvm.org/D121948
1 parent 9e66e58 commit 1c083e6

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

mlir/lib/Target/LLVMIR/ModuleTranslation.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,15 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
859859
.addByValAttr(convertType(argTy.getElementType())));
860860
}
861861

862+
if (auto attr = func.getArgAttrOfType<UnitAttr>(argIdx, "llvm.nest")) {
863+
auto argTy = mlirArg.getType();
864+
if (!argTy.isa<LLVM::LLVMPointerType>())
865+
return func.emitError(
866+
"llvm.nest attribute attached to LLVM non-pointer argument");
867+
llvmArg.addAttrs(llvm::AttrBuilder(llvmArg.getContext())
868+
.addAttribute(llvm::Attribute::Nest));
869+
}
870+
862871
mapValue(mlirArg, &llvmArg);
863872
argIdx++;
864873
}

mlir/test/Dialect/LLVMIR/func.mlir

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ module {
9797
llvm.return
9898
}
9999

100+
// CHECK: llvm.func @nestattr(%{{.*}}: !llvm.ptr<i32> {llvm.nest})
101+
llvm.func @nestattr(%arg0: !llvm.ptr<i32> {llvm.nest}) {
102+
llvm.return
103+
}
104+
100105
// CHECK: llvm.func @variadic(...)
101106
llvm.func @variadic(...)
102107

mlir/test/Target/LLVMIR/llvmir-invalid.mlir

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,20 @@ llvm.func @invalid_noalias(%arg0 : f32 {llvm.noalias}) -> f32 {
1515
// -----
1616

1717
// expected-error @+1 {{llvm.sret attribute attached to LLVM non-pointer argument}}
18-
llvm.func @invalid_noalias(%arg0 : f32 {llvm.sret}) -> f32 {
18+
llvm.func @invalid_sret(%arg0 : f32 {llvm.sret}) -> f32 {
19+
llvm.return %arg0 : f32
20+
}
21+
22+
// -----
23+
24+
// expected-error @+1 {{llvm.nest attribute attached to LLVM non-pointer argument}}
25+
llvm.func @invalid_nest(%arg0 : f32 {llvm.nest}) -> f32 {
1926
llvm.return %arg0 : f32
2027
}
2128
// -----
2229

2330
// expected-error @+1 {{llvm.byval attribute attached to LLVM non-pointer argument}}
24-
llvm.func @invalid_noalias(%arg0 : f32 {llvm.byval}) -> f32 {
31+
llvm.func @invalid_byval(%arg0 : f32 {llvm.byval}) -> f32 {
2532
llvm.return %arg0 : f32
2633
}
2734

mlir/test/Target/LLVMIR/llvmir.mlir

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,11 @@ llvm.func @sretattr(%arg0: !llvm.ptr<i32> {llvm.sret}) {
10571057
llvm.return
10581058
}
10591059

1060+
// CHECK-LABEL: define void @nestattr(i32* nest %
1061+
llvm.func @nestattr(%arg0: !llvm.ptr<i32> {llvm.nest}) {
1062+
llvm.return
1063+
}
1064+
10601065
// CHECK-LABEL: define void @llvm_align(float* align 4 {{%*.}})
10611066
llvm.func @llvm_align(%arg0: !llvm.ptr<f32> {llvm.align = 4}) {
10621067
llvm.return

0 commit comments

Comments
 (0)