[mlir][StandardToLLVM] Add SinOp to LLVM dialect and lowering of std.sin to this op.
authorMaheshRavishankar <ravishankarm@google.com>
Wed, 13 May 2020 06:04:33 +0000 (23:04 -0700)
committerMaheshRavishankar <ravishankarm@google.com>
Wed, 13 May 2020 06:15:25 +0000 (23:15 -0700)
Differential Revision: https://reviews.llvm.org/D79505

mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir
mlir/test/Dialect/LLVMIR/roundtrip.mlir

index 73908f4..3939917 100644 (file)
@@ -788,6 +788,7 @@ def LLVM_LogOp : LLVM_UnaryIntrinsicOp<"log">;
 def LLVM_Prefetch : LLVM_ZeroResultIntrOp<"prefetch", [0]>,
                     Arguments<(ins LLVM_Type:$addr, LLVM_Type:$rw,
                                LLVM_Type:$hint, LLVM_Type:$cache)>;
+def LLVM_SinOp : LLVM_UnaryIntrinsicOp<"sin">;
 def LLVM_SqrtOp : LLVM_UnaryIntrinsicOp<"sqrt">;
 
 //
index d2a0cf3..66fe763 100644 (file)
@@ -1315,6 +1315,7 @@ using SignedRemIOpLowering =
     VectorConvertToLLVMPattern<SignedRemIOp, LLVM::SRemOp>;
 using SignedShiftRightOpLowering =
     OneToOneConvertToLLVMPattern<SignedShiftRightOp, LLVM::AShrOp>;
+using SinOpLowering = VectorConvertToLLVMPattern<SinOp, LLVM::SinOp>;
 using SqrtOpLowering = VectorConvertToLLVMPattern<SqrtOp, LLVM::SqrtOp>;
 using SubFOpLowering = VectorConvertToLLVMPattern<SubFOp, LLVM::FSubOp>;
 using SubIOpLowering = VectorConvertToLLVMPattern<SubIOp, LLVM::SubOp>;
@@ -2972,6 +2973,7 @@ void mlir::populateStdToLLVMNonMemoryConversionPatterns(
       SignedDivIOpLowering,
       SignedRemIOpLowering,
       SignedShiftRightOpLowering,
+      SinOpLowering,
       SplatOpLowering,
       SplatNdOpLowering,
       SqrtOpLowering,
index b6bc813..b8ebdfb 100644 (file)
@@ -30,6 +30,16 @@ func @rsqrt(%arg0 : f32) {
 
 // -----
 
+// CHECK-LABEL: func @sine(
+// CHECK-SAME: !llvm.float
+func @sine(%arg0 : f32) {
+  // CHECK: "llvm.intr.sin"(%arg0) : (!llvm.float) -> !llvm.float
+  %0 = sin %arg0 : f32
+  std.return
+}
+
+// -----
+
 // CHECK-LABEL: func @rsqrt_double(
 // CHECK-SAME: !llvm.double
 func @rsqrt_double(%arg0 : f64) {
index 8e08d50..79f9078 100644 (file)
@@ -97,6 +97,9 @@ func @ops(%arg0 : !llvm.i32, %arg1 : !llvm.float) {
 // CHECK:  %29 = llvm.fneg %arg1 : !llvm.float
   %29 = llvm.fneg %arg1 : !llvm.float
 
+// CHECK: "llvm.intr.sin"(%arg1) : (!llvm.float) -> !llvm.float
+  %30 = "llvm.intr.sin"(%arg1) : (!llvm.float) -> !llvm.float
+
 // CHECK:  llvm.return
   llvm.return
 }