[llvm-branch-commits] [mlir] cc4244d - [MLIR][Standard] Add log1p operation to std

2021-01-20 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2021-01-20T18:56:20+01:00
New Revision: cc4244d55f98b03603cf54eb4abac7e128e3c99a

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

LOG: [MLIR][Standard] Add log1p operation to std

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

Added: 


Modified: 
mlir/include/mlir/Dialect/StandardOps/IR/Ops.td
mlir/test/IR/core-ops.mlir

Removed: 




diff  --git a/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td 
b/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td
index 8db6129dbb88..770e68f6da83 100644
--- a/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td
+++ b/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td
@@ -1942,10 +1942,39 @@ def LogOp : FloatUnaryOp<"log"> {
   let summary = "base-e logarithm of the specified value";
 }
 
+//===--===//
+// Log10Op
+//===--===//
+
 def Log10Op : FloatUnaryOp<"log10"> {
   let summary = "base-10 logarithm of the specified value";
 }
 
+//===--===//
+// Log1pOp
+//===--===//
+
+def Log1pOp : FloatUnaryOp<"log1p"> {
+  let summary = "Computes the natural logarithm of one plus the given value";
+
+  let description = [{
+Computes the base-e logarithm of one plus the given value. It takes one
+operand and returns one result of the same type.
+
+log1p(x) := log(1 + x)
+
+Example:
+
+```mlir
+%y = log1p %x : f64
+```
+  }];
+}
+
+//===--===//
+// Log2Op
+//===--===//
+
 def Log2Op : FloatUnaryOp<"log2"> {
   let summary = "base-2 logarithm of the specified value";
 }

diff  --git a/mlir/test/IR/core-ops.mlir b/mlir/test/IR/core-ops.mlir
index 0e86050870ff..b5266fb2e580 100644
--- a/mlir/test/IR/core-ops.mlir
+++ b/mlir/test/IR/core-ops.mlir
@@ -596,6 +596,9 @@ func @standard_instrs(tensor<4x4x?xf32>, f32, i32, index, 
i64, f16) {
   // CHECK: %{{[0-9]+}} = ceildivi_signed %cst_4, %cst_4 : tensor<42xi32>
   %174 = ceildivi_signed %tci32, %tci32 : tensor<42 x i32>
 
+  // CHECK: %{{[0-9]+}} = log1p %arg1 : f32
+  %175 = log1p %f : f32
+
   return
 }
 



___
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] 294e254 - Add log1p lowering from standard to NVVM intrinsics

2021-01-21 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2021-01-21T14:00:38+01:00
New Revision: 294e2544c992de82c180c080f6359db8f02005d0

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

LOG: Add log1p lowering from standard to NVVM intrinsics

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

Added: 


Modified: 
mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir

Removed: 




diff  --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp 
b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
index a968f9289dac..f99b7cace502 100644
--- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
+++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
@@ -187,6 +187,8 @@ void mlir::populateGpuToNVVMConversionPatterns(
   "__nv_floor");
   patterns.insert>(converter, "__nv_logf",
"__nv_log");
+  patterns.insert>(converter, "__nv_log1pf",
+ "__nv_log1p");
   patterns.insert>(converter, "__nv_log10f",
  "__nv_log10");
   patterns.insert>(converter, "__nv_log2f",

diff  --git a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir 
b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
index e740aabaee99..f48ee0e3f5e4 100644
--- a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
+++ b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
@@ -246,6 +246,21 @@ gpu.module @test_module {
 
 // -
 
+gpu.module @test_module {
+  // CHECK: llvm.func @__nv_log1pf(f32) -> f32
+  // CHECK: llvm.func @__nv_log1p(f64) -> f64
+  // CHECK-LABEL: func @gpu_log1p
+  func @gpu_log1p(%arg_f32 : f32, %arg_f64 : f64) -> (f32, f64) {
+%result32 = std.log1p %arg_f32 : f32
+// CHECK: llvm.call @__nv_log1pf(%{{.*}}) : (f32) -> f32
+%result64 = std.log1p %arg_f64 : f64
+// CHECK: llvm.call @__nv_log1p(%{{.*}}) : (f64) -> f64
+std.return %result32, %result64 : f32, f64
+  }
+}
+
+// -
+
 gpu.module @test_module {
   // CHECK: llvm.func @__nv_log2f(f32) -> f32
   // CHECK: llvm.func @__nv_log2(f64) -> f64



___
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] 4ef38f9 - Add log1p lowering from standard to ROCDL intrinsics

2021-01-21 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2021-01-21T14:02:48+01:00
New Revision: 4ef38f9c1255dcaa3f834cf376e55f8a7bdc5810

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

LOG: Add log1p lowering from standard to ROCDL intrinsics

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

Added: 


Modified: 
mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir

Removed: 




diff  --git a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp 
b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
index e87ca62c9b81..7aa8e6021650 100644
--- a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
+++ b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
@@ -121,6 +121,8 @@ void mlir::populateGpuToROCDLConversionPatterns(
"__ocml_log_f64");
   patterns.insert>(converter, "__ocml_log10_f32",
  "__ocml_log10_f64");
+  patterns.insert>(converter, "__ocml_log1p_f32",
+ "__ocml_log1p_f64");
   patterns.insert>(converter, "__ocml_log2_f32",
 "__ocml_log2_f64");
   patterns.insert>(converter, "__ocml_pow_f32",

diff  --git a/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir 
b/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir
index b3613503531d..38d75883f2f9 100644
--- a/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir
+++ b/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir
@@ -198,6 +198,21 @@ gpu.module @test_module {
 
 // -
 
+gpu.module @test_module {
+  // CHECK: llvm.func @__ocml_log1p_f32(f32) -> f32
+  // CHECK: llvm.func @__ocml_log1p_f64(f64) -> f64
+  // CHECK-LABEL: func @gpu_log1p
+  func @gpu_log1p(%arg_f32 : f32, %arg_f64 : f64) -> (f32, f64) {
+%result32 = std.log1p %arg_f32 : f32
+// CHECK: llvm.call @__ocml_log1p_f32(%{{.*}}) : (f32) -> f32
+%result64 = std.log1p %arg_f64 : f64
+// CHECK: llvm.call @__ocml_log1p_f64(%{{.*}}) : (f64) -> f64
+std.return %result32, %result64 : f32, f64
+  }
+}
+
+// -
+
 gpu.module @test_module {
   // CHECK: llvm.func @__ocml_log10_f32(f32) -> f32
   // CHECK: llvm.func @__ocml_log10_f64(f64) -> f64



___
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] 6484567 - [MLIR][SCF] Find all innermost loops for parallel loop tiling

2020-11-27 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2020-11-27T10:08:56+01:00
New Revision: 6484567f14881003a7c46d1587dbb0cf8082282a

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

LOG: [MLIR][SCF] Find all innermost loops for parallel loop tiling

Overcome the assumption that parallel loops are only nested in other parallel
loops.

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

Added: 


Modified: 
mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp
mlir/test/Dialect/SCF/parallel-loop-tiling.mlir

Removed: 




diff  --git a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp 
b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp
index 7bcc989a5b28..7bd589214f4c 100644
--- a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp
+++ b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopTiling.cpp
@@ -22,15 +22,15 @@ using namespace mlir::scf;
 
 /// Tile a parallel loop of the form
 ///   scf.parallel (%i0, %i1) = (%arg0, %arg1) to (%arg2, %arg3)
-/// step (%arg4, %arg5)
+///step (%arg4, %arg5)
 ///
 /// into
 ///   scf.parallel (%i0, %i1) = (%arg0, %arg1) to (%arg2, %arg3)
-/// step (%arg4*tileSize[0],
-///   %arg5*tileSize[1])
+///step (%arg4*tileSize[0],
+///  %arg5*tileSize[1])
 /// scf.parallel (%j0, %j1) = (0, 0) to (min(%arg4*tileSize[0], %arg2-%i0)
-///   min(%arg5*tileSize[1], 
%arg3-%i1))
-///step (%arg4, %arg5)
+///  min(%arg5*tileSize[1], %arg3-%i1))
+///  step (%arg4, %arg5)
 ///
 /// where the uses of %i0 and %i1 in the loop body are replaced by
 /// %i0 + j0 and %i1 + %j1.
@@ -126,17 +126,27 @@ void mlir::scf::tileParallelLoop(ParallelOp op, 
ArrayRef tileSizes) {
   op.erase();
 }
 
-/// Get a list of most nested parallel loops. Assumes that ParallelOps are
-/// only directly nested.
-static bool getInnermostNestedLoops(Block *block,
-SmallVectorImpl &loops) {
-  bool hasInnerLoop = false;
-  for (auto parallelOp : block->getOps()) {
-hasInnerLoop = true;
-if (!getInnermostNestedLoops(parallelOp.getBody(), loops))
-  loops.push_back(parallelOp);
+/// Get a list of most nested parallel loops.
+static bool getInnermostPloops(Operation *rootOp,
+   SmallVectorImpl &result) {
+  assert(rootOp != nullptr && "Root operation must not be a nullptr.");
+  bool rootEnclosesPloops = false;
+  for (Region ®ion : rootOp->getRegions()) {
+for (Block &block : region.getBlocks()) {
+  for (Operation &op : block) {
+bool enclosesPloops = getInnermostPloops(&op, result);
+rootEnclosesPloops |= enclosesPloops;
+if (auto ploop = dyn_cast(op)) {
+  rootEnclosesPloops = true;
+
+  // Collect ploop if it is an innermost one.
+  if (!enclosesPloops)
+result.push_back(ploop);
+}
+  }
+}
   }
-  return hasInnerLoop;
+  return rootEnclosesPloops;
 }
 
 namespace {
@@ -148,14 +158,12 @@ struct ParallelLoopTiling
   }
 
   void runOnFunction() override {
-SmallVector mostNestedParallelOps;
-for (Block &block : getFunction()) {
-  getInnermostNestedLoops(&block, mostNestedParallelOps);
-}
-for (ParallelOp pLoop : mostNestedParallelOps) {
+SmallVector innermostPloops;
+getInnermostPloops(getFunction().getOperation(), innermostPloops);
+for (ParallelOp ploop : innermostPloops) {
   // FIXME: Add reduction support.
-  if (pLoop.getNumReductions() == 0)
-tileParallelLoop(pLoop, tileSizes);
+  if (ploop.getNumReductions() == 0)
+tileParallelLoop(ploop, tileSizes);
 }
   }
 };

diff  --git a/mlir/test/Dialect/SCF/parallel-loop-tiling.mlir 
b/mlir/test/Dialect/SCF/parallel-loop-tiling.mlir
index e0dc8344f14d..5d3a676f58ab 100644
--- a/mlir/test/Dialect/SCF/parallel-loop-tiling.mlir
+++ b/mlir/test/Dialect/SCF/parallel-loop-tiling.mlir
@@ -112,3 +112,29 @@ func @tile_nested_innermost() {
 // CHECK:   }
 // CHECK:   return
 // CHECK: }
+
+// -
+
+func @tile_nested_in_non_ploop() {
+  %c0 = constant 0 : index
+  %c1 = constant 1 : index
+  %c2 = constant 2 : index
+  scf.for %i = %c0 to %c2 step %c1 {
+scf.for %j = %c0 to %c2 step %c1 {
+  scf.parallel (%k, %l) = (%c0, %c0) to (%c2, %c2) step (%c1, %c1) {
+  }
+}
+  }
+  return
+}
+
+// CHECK-LABEL: func @tile_nested_in_non_ploop
+// CHECK: scf.for
+// CHECK:   

[llvm-branch-commits] [mlir] bb7d43e - Add rsqrt lowering from standard to NVVM

2020-12-08 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2020-12-08T14:33:58+01:00
New Revision: bb7d43e7d5f683fc3e7109072610dc8d176a3bf8

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

LOG: Add rsqrt lowering from standard to NVVM

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

Added: 


Modified: 
mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir

Removed: 




diff  --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp 
b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
index 61f97d44e125..4b7bb6e193a4 100644
--- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
+++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
@@ -183,6 +183,8 @@ void mlir::populateGpuToNVVMConversionPatterns(
  "__nv_log10");
   patterns.insert>(converter, "__nv_log2f",
 "__nv_log2");
+  patterns.insert>(converter, "__nv_rsqrtf",
+ "__nv_rsqrt");
   patterns.insert>(converter, "__nv_sinf",
"__nv_sin");
   patterns.insert>(converter, "__nv_tanhf",

diff  --git a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir 
b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
index 8e4e4515c638..347cc48daa20 100644
--- a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
+++ b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
@@ -295,6 +295,26 @@ gpu.module @test_module {
 
 // -
 
+gpu.module @test_module {
+  // CHECK: llvm.func @__nv_rsqrtf(!llvm.float) -> !llvm.float
+  // CHECK: llvm.func @__nv_rsqrt(!llvm.double) -> !llvm.double
+  // CHECK-LABEL: func @gpu_rsqrt
+  func @gpu_rsqrt(%arg_f16 : f16, %arg_f32 : f32, %arg_f64 : f64)
+  -> (f16, f32, f64) {
+%result16 = std.rsqrt %arg_f16 : f16
+// CHECK: llvm.fpext %{{.*}} : !llvm.half to !llvm.float
+// CHECK-NEXT: llvm.call @__nv_rsqrtf(%{{.*}}) : (!llvm.float) -> 
!llvm.float
+// CHECK-NEXT: llvm.fptrunc %{{.*}} : !llvm.float to !llvm.half
+%result32 = std.rsqrt %arg_f32 : f32
+// CHECK: llvm.call @__nv_rsqrtf(%{{.*}}) : (!llvm.float) -> !llvm.float
+%result64 = std.rsqrt %arg_f64 : f64
+// CHECK: llvm.call @__nv_rsqrt(%{{.*}}) : (!llvm.double) -> !llvm.double
+std.return %result16, %result32, %result64 : f16, f32, f64
+  }
+}
+
+// -
+
 // Test that we handled properly operation with SymbolTable other than module 
op
 gpu.module @test_module {
   "test.symbol_scope"() ({



___
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] b4750f5 - Add sqrt lowering from standard to NVVM

2020-12-08 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2020-12-08T17:08:27+01:00
New Revision: b4750f58d89f2fbc74489b5e56d30daadec47198

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

LOG: Add sqrt lowering from standard to NVVM

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

Added: 


Modified: 
mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir

Removed: 




diff  --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp 
b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
index 4b7bb6e193a4..467c622f8bde 100644
--- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
+++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
@@ -138,7 +138,7 @@ struct LowerGpuOpsToNVVMOpsPass
 target.addIllegalDialect();
 target.addIllegalOp();
+LLVM::Log2Op, LLVM::SinOp, LLVM::SqrtOp>();
 target.addIllegalOp();
 target.addLegalDialect();
 // TODO: Remove once we support replacing non-root ops.
@@ -187,6 +187,8 @@ void mlir::populateGpuToNVVMConversionPatterns(
  "__nv_rsqrt");
   patterns.insert>(converter, "__nv_sinf",
"__nv_sin");
+  patterns.insert>(converter, "__nv_sqrtf",
+"__nv_sqrt");
   patterns.insert>(converter, "__nv_tanhf",
 "__nv_tanh");
 }

diff  --git a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir 
b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
index 347cc48daa20..1c0257de0d55 100644
--- a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
+++ b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
@@ -315,6 +315,26 @@ gpu.module @test_module {
 
 // -
 
+gpu.module @test_module {
+  // CHECK: llvm.func @__nv_sqrtf(!llvm.float) -> !llvm.float
+  // CHECK: llvm.func @__nv_sqrt(!llvm.double) -> !llvm.double
+  // CHECK-LABEL: func @gpu_sqrt
+  func @gpu_sqrt(%arg_f16 : f16, %arg_f32 : f32, %arg_f64 : f64)
+  -> (f16, f32, f64) {
+%result16 = std.sqrt %arg_f16 : f16
+// CHECK: llvm.fpext %{{.*}} : !llvm.half to !llvm.float
+// CHECK-NEXT: llvm.call @__nv_sqrtf(%{{.*}}) : (!llvm.float) -> 
!llvm.float
+// CHECK-NEXT: llvm.fptrunc %{{.*}} : !llvm.float to !llvm.half
+%result32 = std.sqrt %arg_f32 : f32
+// CHECK: llvm.call @__nv_sqrtf(%{{.*}}) : (!llvm.float) -> !llvm.float
+%result64 = std.sqrt %arg_f64 : f64
+// CHECK: llvm.call @__nv_sqrt(%{{.*}}) : (!llvm.double) -> !llvm.double
+std.return %result16, %result32, %result64 : f16, f32, f64
+  }
+}
+
+// -
+
 // Test that we handled properly operation with SymbolTable other than module 
op
 gpu.module @test_module {
   "test.symbol_scope"() ({



___
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] d536569 - [MLIR] Expose target configuration for lowering to NVVM

2020-12-09 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2020-12-09T10:29:38+01:00
New Revision: d53656900921de5bb26b849b5910efd05a233107

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

LOG: [MLIR] Expose target configuration for lowering to NVVM

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

Added: 


Modified: 
mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h
mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp

Removed: 




diff  --git a/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h 
b/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h
index 1af13057f2ea..8be0a7cad017 100644
--- a/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h
+++ b/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h
@@ -14,6 +14,7 @@
 namespace mlir {
 class LLVMTypeConverter;
 class OwningRewritePatternList;
+class ConversionTarget;
 
 template  class OperationPass;
 
@@ -21,6 +22,9 @@ namespace gpu {
 class GPUModuleOp;
 }
 
+/// Configure target to convert from to convert from the GPU dialect to NVVM.
+void configureGpuToNVVMConversionLegality(ConversionTarget &target);
+
 /// Collect a set of patterns to convert from the GPU dialect to NVVM.
 void populateGpuToNVVMConversionPatterns(LLVMTypeConverter &converter,
  OwningRewritePatternList &patterns);

diff  --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp 
b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
index 467c622f8bde..a0fe48175636 100644
--- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
+++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
@@ -135,14 +135,7 @@ struct LowerGpuOpsToNVVMOpsPass
 populateStdToLLVMConversionPatterns(converter, llvmPatterns);
 populateGpuToNVVMConversionPatterns(converter, llvmPatterns);
 LLVMConversionTarget target(getContext());
-target.addIllegalDialect();
-target.addIllegalOp();
-target.addIllegalOp();
-target.addLegalDialect();
-// TODO: Remove once we support replacing non-root ops.
-target.addLegalOp();
+configureGpuToNVVMConversionLegality(target);
 if (failed(applyPartialConversion(m, target, std::move(llvmPatterns
   signalPassFailure();
   }
@@ -150,6 +143,19 @@ struct LowerGpuOpsToNVVMOpsPass
 
 } // anonymous namespace
 
+void mlir::configureGpuToNVVMConversionLegality(ConversionTarget &target) {
+  target.addIllegalOp();
+  target.addLegalDialect<::mlir::LLVM::LLVMDialect>();
+  target.addLegalDialect<::mlir::NVVM::NVVMDialect>();
+  target.addIllegalDialect();
+  target.addIllegalOp();
+
+  // TODO: Remove once we support replacing non-root ops.
+  target.addLegalOp();
+}
+
 void mlir::populateGpuToNVVMConversionPatterns(
 LLVMTypeConverter &converter, OwningRewritePatternList &patterns) {
   populateWithGenerated(converter.getDialect()->getContext(), patterns);



___
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] 1c6bc2c - [MLIR] Add lowerings for atan and atan2 to ROCDL intrinsics

2020-12-14 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2020-12-14T10:43:19+01:00
New Revision: 1c6bc2c0b5afca9b4e7fdb33ea0ad95336df330c

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

LOG: [MLIR] Add lowerings for atan and atan2 to ROCDL intrinsics

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

Added: 


Modified: 
mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir

Removed: 




diff  --git a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp 
b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
index 4ed1f0761c92..b6f4238a4a5e 100644
--- a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
+++ b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp
@@ -105,6 +105,10 @@ void mlir::populateGpuToROCDLConversionPatterns(
   GPUFuncOpLowering<5>, GPUReturnOpLowering>(converter);
   patterns.insert>(converter, "__ocml_fabs_f32",
 "__ocml_fabs_f64");
+  patterns.insert>(converter, "__ocml_atan_f32",
+"__ocml_atan_f64");
+  patterns.insert>(converter, "__ocml_atan2_f32",
+ "__ocml_atan2_f64");
   patterns.insert>(converter, "__ocml_ceil_f32",
  "__ocml_ceil_f64");
   patterns.insert>(converter, "__ocml_cos_f32",

diff  --git a/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir 
b/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir
index acc3826cacce..c57f98571df6 100644
--- a/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir
+++ b/mlir/test/Conversion/GPUToROCDL/gpu-to-rocdl.mlir
@@ -280,3 +280,33 @@ gpu.module @test_module {
 std.return %result32, %result64 : f32, f64
   }
 }
+
+// -
+
+gpu.module @test_module {
+  // CHECK: llvm.func @__ocml_atan_f32(!llvm.float) -> !llvm.float
+  // CHECK: llvm.func @__ocml_atan_f64(!llvm.double) -> !llvm.double
+  // CHECK-LABEL: func @gpu_atan
+  func @gpu_atan(%arg_f32 : f32, %arg_f64 : f64) -> (f32, f64) {
+%result32 = std.atan %arg_f32 : f32
+// CHECK: llvm.call @__ocml_atan_f32(%{{.*}}) : (!llvm.float) -> 
!llvm.float
+%result64 = std.atan %arg_f64 : f64
+// CHECK: llvm.call @__ocml_atan_f64(%{{.*}}) : (!llvm.double) -> 
!llvm.double
+std.return %result32, %result64 : f32, f64
+  }
+}
+
+// -
+
+gpu.module @test_module {
+  // CHECK: llvm.func @__ocml_atan2_f32(!llvm.float, !llvm.float) -> 
!llvm.float
+  // CHECK: llvm.func @__ocml_atan2_f64(!llvm.double, !llvm.double) -> 
!llvm.double
+  // CHECK-LABEL: func @gpu_atan2
+  func @gpu_atan2(%arg_f32 : f32, %arg_f64 : f64) -> (f32, f64) {
+%result32 = std.atan2 %arg_f32, %arg_f32 : f32
+// CHECK: llvm.call @__ocml_atan2_f32(%{{.*}}) : (!llvm.float, 
!llvm.float) -> !llvm.float
+%result64 = std.atan2 %arg_f64, %arg_f64 : f64
+// CHECK: llvm.call @__ocml_atan2_f64(%{{.*}}) : (!llvm.double, 
!llvm.double) -> !llvm.double
+std.return %result32, %result64 : f32, f64
+  }
+}



___
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] 75d9a46 - [MLIR] Add atan and atan2 lowerings to CUDA intrinsics

2020-12-14 Thread Frederik Gossen via llvm-branch-commits

Author: Frederik Gossen
Date: 2020-12-14T10:45:28+01:00
New Revision: 75d9a46090249ed8abfafea090e686b4fecf182f

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

LOG: [MLIR] Add atan and atan2 lowerings to CUDA intrinsics

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

Added: 


Modified: 
mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir

Removed: 




diff  --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp 
b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
index 3e90894e2fe9..a8b4d074a08e 100644
--- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
+++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp
@@ -173,6 +173,10 @@ void mlir::populateGpuToNVVMConversionPatterns(
   GPUFuncOpLowering<0>>(converter);
   patterns.insert>(converter, "__nv_fabsf",
 "__nv_fabs");
+  patterns.insert>(converter, "__nv_atanf",
+"__nv_atan");
+  patterns.insert>(converter, "__nv_atan2f",
+ "__nv_atan2");
   patterns.insert>(converter, "__nv_ceilf",
  "__nv_ceil");
   patterns.insert>(converter, "__nv_cosf",

diff  --git a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir 
b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
index 1c0257de0d55..d8c4d7e064e5 100644
--- a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
+++ b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir
@@ -335,6 +335,47 @@ gpu.module @test_module {
 
 // -
 
+gpu.module @test_module {
+  // CHECK: llvm.func @__nv_atanf(!llvm.float) -> !llvm.float
+  // CHECK: llvm.func @__nv_atan(!llvm.double) -> !llvm.double
+  // CHECK-LABEL: func @gpu_atan
+  func @gpu_atan(%arg_f16 : f16, %arg_f32 : f32, %arg_f64 : f64)
+  -> (f16, f32, f64) {
+%result16 = std.atan %arg_f16 : f16
+// CHECK: llvm.fpext %{{.*}} : !llvm.half to !llvm.float
+// CHECK-NEXT: llvm.call @__nv_atanf(%{{.*}}) : (!llvm.float) -> 
!llvm.float
+// CHECK-NEXT: llvm.fptrunc %{{.*}} : !llvm.float to !llvm.half
+%result32 = std.atan %arg_f32 : f32
+// CHECK: llvm.call @__nv_atanf(%{{.*}}) : (!llvm.float) -> !llvm.float
+%result64 = std.atan %arg_f64 : f64
+// CHECK: llvm.call @__nv_atan(%{{.*}}) : (!llvm.double) -> !llvm.double
+std.return %result16, %result32, %result64 : f16, f32, f64
+  }
+}
+
+// -
+
+gpu.module @test_module {
+  // CHECK: llvm.func @__nv_atan2f(!llvm.float, !llvm.float) -> !llvm.float
+  // CHECK: llvm.func @__nv_atan2(!llvm.double, !llvm.double) -> !llvm.double
+  // CHECK-LABEL: func @gpu_atan2
+  func @gpu_atan2(%arg_f16 : f16, %arg_f32 : f32, %arg_f64 : f64)
+  -> (f16, f32, f64) {
+%result16 = std.atan2 %arg_f16, %arg_f16 : f16
+// CHECK: llvm.fpext %{{.*}} : !llvm.half to !llvm.float
+// CHECK: llvm.fpext %{{.*}} : !llvm.half to !llvm.float
+// CHECK-NEXT: llvm.call @__nv_atan2f(%{{.*}}) : (!llvm.float, 
!llvm.float) -> !llvm.float
+// CHECK-NEXT: llvm.fptrunc %{{.*}} : !llvm.float to !llvm.half
+%result32 = std.atan2 %arg_f32, %arg_f32 : f32
+// CHECK: llvm.call @__nv_atan2f(%{{.*}}) : (!llvm.float, !llvm.float) -> 
!llvm.float
+%result64 = std.atan2 %arg_f64, %arg_f64 : f64
+// CHECK: llvm.call @__nv_atan2(%{{.*}}) : (!llvm.double, !llvm.double) -> 
!llvm.double
+std.return %result16, %result32, %result64 : f16, f32, f64
+  }
+}
+
+// -
+
 // Test that we handled properly operation with SymbolTable other than module 
op
 gpu.module @test_module {
   "test.symbol_scope"() ({



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