diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -788,6 +788,7 @@ 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">; // diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp --- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp +++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp @@ -1315,6 +1315,7 @@ VectorConvertToLLVMPattern; using SignedShiftRightOpLowering = OneToOneConvertToLLVMPattern; +using SinOpLowering = VectorConvertToLLVMPattern; using SqrtOpLowering = VectorConvertToLLVMPattern; using SubFOpLowering = VectorConvertToLLVMPattern; using SubIOpLowering = VectorConvertToLLVMPattern; @@ -2972,6 +2973,7 @@ SignedDivIOpLowering, SignedRemIOpLowering, SignedShiftRightOpLowering, + SinOpLowering, SplatOpLowering, SplatNdOpLowering, SqrtOpLowering, diff --git a/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir b/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir --- a/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir +++ b/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir @@ -30,6 +30,16 @@ // ----- +// 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) { diff --git a/mlir/test/Dialect/LLVMIR/roundtrip.mlir b/mlir/test/Dialect/LLVMIR/roundtrip.mlir --- a/mlir/test/Dialect/LLVMIR/roundtrip.mlir +++ b/mlir/test/Dialect/LLVMIR/roundtrip.mlir @@ -97,6 +97,9 @@ // 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 }