[llvm-branch-commits] [mlir] 82f5ee3 - Adds argument attributes for using LLVM's sret and byval attributes to

2021-01-07 Thread Eric Schweitz via llvm-branch-commits

Author: Eric Schweitz
Date: 2021-01-07T09:03:16-08:00
New Revision: 82f5ee3c3e601daad546c320a98d9e7860d6347d

URL: 
https://github.com/llvm/llvm-project/commit/82f5ee3c3e601daad546c320a98d9e7860d6347d
DIFF: 
https://github.com/llvm/llvm-project/commit/82f5ee3c3e601daad546c320a98d9e7860d6347d.diff

LOG: Adds argument attributes for using LLVM's sret and byval attributes to
the conversion of LLVM IR dialect. These attributes are used in FIR to
support the lowering of Fortran using target-specific calling
conventions.

Add roundtrip tests. Add changes per review comments/concerns.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D94052

Added: 


Modified: 
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
mlir/test/Dialect/LLVMIR/func.mlir
mlir/test/Target/llvmir-invalid.mlir

Removed: 




diff  --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp 
b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index 7700867bb461..86f4e7e3e2c4 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -1102,6 +1102,22 @@ LogicalResult 
ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
   llvm::AttrBuilder().addAlignmentAttr(llvm::Align(attr.getInt(;
 }
 
+if (auto attr = func.getArgAttrOfType(argIdx, "llvm.sret")) {
+  auto argTy = mlirArg.getType().dyn_cast();
+  if (!argTy.isa())
+return func.emitError(
+"llvm.sret attribute attached to LLVM non-pointer argument");
+  llvmArg.addAttr(llvm::Attribute::AttrKind::StructRet);
+}
+
+if (auto attr = func.getArgAttrOfType(argIdx, "llvm.byval")) {
+  auto argTy = mlirArg.getType().dyn_cast();
+  if (!argTy.isa())
+return func.emitError(
+"llvm.byval attribute attached to LLVM non-pointer argument");
+  llvmArg.addAttr(llvm::Attribute::AttrKind::ByVal);
+}
+
 valueMapping[mlirArg] = &llvmArg;
 argIdx++;
   }

diff  --git a/mlir/test/Dialect/LLVMIR/func.mlir 
b/mlir/test/Dialect/LLVMIR/func.mlir
index 65dc33cc1c4f..2cec1bca1f74 100644
--- a/mlir/test/Dialect/LLVMIR/func.mlir
+++ b/mlir/test/Dialect/LLVMIR/func.mlir
@@ -87,6 +87,16 @@ module {
 llvm.return
   }
 
+  // CHECK: llvm.func @byvalattr(%{{.*}}: !llvm.ptr {llvm.byval})
+  llvm.func @byvalattr(%arg0: !llvm.ptr {llvm.byval}) {
+llvm.return
+  }
+
+  // CHECK: llvm.func @sretattr(%{{.*}}: !llvm.ptr {llvm.sret})
+  llvm.func @sretattr(%arg0: !llvm.ptr {llvm.sret}) {
+llvm.return
+  }
+
   // CHECK: llvm.func @variadic(...)
   llvm.func @variadic(...)
 

diff  --git a/mlir/test/Target/llvmir-invalid.mlir 
b/mlir/test/Target/llvmir-invalid.mlir
index 14117594e2f8..fcd98ef4b143 100644
--- a/mlir/test/Target/llvmir-invalid.mlir
+++ b/mlir/test/Target/llvmir-invalid.mlir
@@ -14,6 +14,19 @@ llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.noalias 
= true}) -> !llvm.f
 
 // -
 
+// expected-error @+1 {{llvm.sret attribute attached to LLVM non-pointer 
argument}}
+llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.sret}) -> !llvm.float {
+  llvm.return %arg0 : !llvm.float
+}
+// -
+
+// expected-error @+1 {{llvm.byval attribute attached to LLVM non-pointer 
argument}}
+llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.byval}) -> !llvm.float {
+  llvm.return %arg0 : !llvm.float
+}
+
+// -
+
 // expected-error @+1 {{llvm.align attribute attached to LLVM non-pointer 
argument}}
 llvm.func @invalid_align(%arg0 : !llvm.float {llvm.align = 4}) -> !llvm.float {
   llvm.return %arg0 : !llvm.float



___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [mlir] bd78f4e - [mlir] revert 82f5ee3c3e601daad5

2021-01-07 Thread Eric Schweitz via llvm-branch-commits

Author: Eric Schweitz
Date: 2021-01-07T09:38:21-08:00
New Revision: bd78f4e93212f2b9bea233905faa2a85bf7bdba7

URL: 
https://github.com/llvm/llvm-project/commit/bd78f4e93212f2b9bea233905faa2a85bf7bdba7
DIFF: 
https://github.com/llvm/llvm-project/commit/bd78f4e93212f2b9bea233905faa2a85bf7bdba7.diff

LOG: [mlir] revert 82f5ee3c3e601daad5

Added: 


Modified: 
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
mlir/test/Dialect/LLVMIR/func.mlir
mlir/test/Target/llvmir-invalid.mlir

Removed: 




diff  --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp 
b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index 86f4e7e3e2c4..7700867bb461 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -1102,22 +1102,6 @@ LogicalResult 
ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
   llvm::AttrBuilder().addAlignmentAttr(llvm::Align(attr.getInt(;
 }
 
-if (auto attr = func.getArgAttrOfType(argIdx, "llvm.sret")) {
-  auto argTy = mlirArg.getType().dyn_cast();
-  if (!argTy.isa())
-return func.emitError(
-"llvm.sret attribute attached to LLVM non-pointer argument");
-  llvmArg.addAttr(llvm::Attribute::AttrKind::StructRet);
-}
-
-if (auto attr = func.getArgAttrOfType(argIdx, "llvm.byval")) {
-  auto argTy = mlirArg.getType().dyn_cast();
-  if (!argTy.isa())
-return func.emitError(
-"llvm.byval attribute attached to LLVM non-pointer argument");
-  llvmArg.addAttr(llvm::Attribute::AttrKind::ByVal);
-}
-
 valueMapping[mlirArg] = &llvmArg;
 argIdx++;
   }

diff  --git a/mlir/test/Dialect/LLVMIR/func.mlir 
b/mlir/test/Dialect/LLVMIR/func.mlir
index 2cec1bca1f74..65dc33cc1c4f 100644
--- a/mlir/test/Dialect/LLVMIR/func.mlir
+++ b/mlir/test/Dialect/LLVMIR/func.mlir
@@ -87,16 +87,6 @@ module {
 llvm.return
   }
 
-  // CHECK: llvm.func @byvalattr(%{{.*}}: !llvm.ptr {llvm.byval})
-  llvm.func @byvalattr(%arg0: !llvm.ptr {llvm.byval}) {
-llvm.return
-  }
-
-  // CHECK: llvm.func @sretattr(%{{.*}}: !llvm.ptr {llvm.sret})
-  llvm.func @sretattr(%arg0: !llvm.ptr {llvm.sret}) {
-llvm.return
-  }
-
   // CHECK: llvm.func @variadic(...)
   llvm.func @variadic(...)
 

diff  --git a/mlir/test/Target/llvmir-invalid.mlir 
b/mlir/test/Target/llvmir-invalid.mlir
index fcd98ef4b143..14117594e2f8 100644
--- a/mlir/test/Target/llvmir-invalid.mlir
+++ b/mlir/test/Target/llvmir-invalid.mlir
@@ -14,19 +14,6 @@ llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.noalias 
= true}) -> !llvm.f
 
 // -
 
-// expected-error @+1 {{llvm.sret attribute attached to LLVM non-pointer 
argument}}
-llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.sret}) -> !llvm.float {
-  llvm.return %arg0 : !llvm.float
-}
-// -
-
-// expected-error @+1 {{llvm.byval attribute attached to LLVM non-pointer 
argument}}
-llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.byval}) -> !llvm.float {
-  llvm.return %arg0 : !llvm.float
-}
-
-// -
-
 // expected-error @+1 {{llvm.align attribute attached to LLVM non-pointer 
argument}}
 llvm.func @invalid_align(%arg0 : !llvm.float {llvm.align = 4}) -> !llvm.float {
   llvm.return %arg0 : !llvm.float



___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [mlir] 70b841a - [mlir] Adds argument attributes for using LLVM's sret and byval attributes

2021-01-07 Thread Eric Schweitz via llvm-branch-commits

Author: Eric Schweitz
Date: 2021-01-07T12:52:14-08:00
New Revision: 70b841ac317765c5c504334f7a22ac085f14ac2d

URL: 
https://github.com/llvm/llvm-project/commit/70b841ac317765c5c504334f7a22ac085f14ac2d
DIFF: 
https://github.com/llvm/llvm-project/commit/70b841ac317765c5c504334f7a22ac085f14ac2d.diff

LOG: [mlir] Adds argument attributes for using LLVM's sret and byval attributes
to the conversion of LLVM IR dialect. These attributes are used in FIR to
support the lowering of Fortran using target-specific calling conventions.

Add roundtrip tests.

Add changes per review comments/concerns.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D94052

Added: 


Modified: 
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
mlir/test/Dialect/LLVMIR/func.mlir
mlir/test/Target/llvmir-invalid.mlir

Removed: 




diff  --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp 
b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index 7700867bb461..492025ba37b4 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -1102,6 +1102,22 @@ LogicalResult 
ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
   llvm::AttrBuilder().addAlignmentAttr(llvm::Align(attr.getInt(;
 }
 
+if (auto attr = func.getArgAttrOfType(argIdx, "llvm.sret")) {
+  auto argTy = mlirArg.getType();
+  if (!argTy.isa())
+return func.emitError(
+"llvm.sret attribute attached to LLVM non-pointer argument");
+  llvmArg.addAttr(llvm::Attribute::AttrKind::StructRet);
+}
+
+if (auto attr = func.getArgAttrOfType(argIdx, "llvm.byval")) {
+  auto argTy = mlirArg.getType();
+  if (!argTy.isa())
+return func.emitError(
+"llvm.byval attribute attached to LLVM non-pointer argument");
+  llvmArg.addAttr(llvm::Attribute::AttrKind::ByVal);
+}
+
 valueMapping[mlirArg] = &llvmArg;
 argIdx++;
   }

diff  --git a/mlir/test/Dialect/LLVMIR/func.mlir 
b/mlir/test/Dialect/LLVMIR/func.mlir
index 72e117d57a91..d9d7e17a9b50 100644
--- a/mlir/test/Dialect/LLVMIR/func.mlir
+++ b/mlir/test/Dialect/LLVMIR/func.mlir
@@ -87,6 +87,16 @@ module {
 llvm.return
   }
 
+  // CHECK: llvm.func @byvalattr(%{{.*}}: !llvm.ptr {llvm.byval})
+  llvm.func @byvalattr(%arg0: !llvm.ptr {llvm.byval}) {
+llvm.return
+  }
+
+  // CHECK: llvm.func @sretattr(%{{.*}}: !llvm.ptr {llvm.sret})
+  llvm.func @sretattr(%arg0: !llvm.ptr {llvm.sret}) {
+llvm.return
+  }
+
   // CHECK: llvm.func @variadic(...)
   llvm.func @variadic(...)
 

diff  --git a/mlir/test/Target/llvmir-invalid.mlir 
b/mlir/test/Target/llvmir-invalid.mlir
index 14117594e2f8..fcd98ef4b143 100644
--- a/mlir/test/Target/llvmir-invalid.mlir
+++ b/mlir/test/Target/llvmir-invalid.mlir
@@ -14,6 +14,19 @@ llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.noalias 
= true}) -> !llvm.f
 
 // -
 
+// expected-error @+1 {{llvm.sret attribute attached to LLVM non-pointer 
argument}}
+llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.sret}) -> !llvm.float {
+  llvm.return %arg0 : !llvm.float
+}
+// -
+
+// expected-error @+1 {{llvm.byval attribute attached to LLVM non-pointer 
argument}}
+llvm.func @invalid_noalias(%arg0 : !llvm.float {llvm.byval}) -> !llvm.float {
+  llvm.return %arg0 : !llvm.float
+}
+
+// -
+
 // expected-error @+1 {{llvm.align attribute attached to LLVM non-pointer 
argument}}
 llvm.func @invalid_align(%arg0 : !llvm.float {llvm.align = 4}) -> !llvm.float {
   llvm.return %arg0 : !llvm.float



___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits