forked from OSchip/llvm-project
[mlir] Add sine operation to Standard dialect.
Also add lowering of sine operation to SPIR-V dialect. Differential Revision: https://reviews.llvm.org/D79102
This commit is contained in:
parent
359164f810
commit
43b89ecdb9
|
@ -1238,6 +1238,36 @@ def CosOp : FloatUnaryOp<"cos"> {
|
|||
}];
|
||||
}
|
||||
|
||||
def SinOp : FloatUnaryOp<"sin"> {
|
||||
let summary = "sine of the specified value";
|
||||
let description = [{
|
||||
Syntax:
|
||||
|
||||
```
|
||||
operation ::= ssa-id `=` `std.sin` ssa-use `:` type
|
||||
```
|
||||
|
||||
The `sin` operation computes the sine of a given value. It takes one
|
||||
operand and returns one result of the same type. This type may be a float
|
||||
scalar type, a vector whose element type is float, or a tensor of floats.
|
||||
It has no standard attributes.
|
||||
|
||||
Example:
|
||||
|
||||
```mlir
|
||||
// Scalar sine value.
|
||||
%a = sin %b : f64
|
||||
|
||||
// SIMD vector element-wise sine value.
|
||||
%f = sin %g : vector<4xf32>
|
||||
|
||||
// Tensor element-wise sine value.
|
||||
%x = sin %y : tensor<4x?xf8>
|
||||
```
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// DeallocOp
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -757,6 +757,7 @@ void populateStandardToSPIRVPatterns(MLIRContext *context,
|
|||
UnaryAndBinaryOpPattern<SignedRemIOp, spirv::SRemOp>,
|
||||
UnaryAndBinaryOpPattern<SignedShiftRightOp,
|
||||
spirv::ShiftRightArithmeticOp>,
|
||||
UnaryAndBinaryOpPattern<SinOp, spirv::GLSLSinOp>,
|
||||
UnaryAndBinaryOpPattern<SqrtOp, spirv::GLSLSqrtOp>,
|
||||
UnaryAndBinaryOpPattern<SubFOp, spirv::FSubOp>,
|
||||
UnaryAndBinaryOpPattern<SubIOp, spirv::ISubOp>,
|
||||
|
|
|
@ -52,6 +52,8 @@ func @float32_unary_scalar(%arg0: f32) {
|
|||
%7 = sqrt %arg0 : f32
|
||||
// CHECK: spv.GLSL.Tanh %{{.*}}: f32
|
||||
%8 = tanh %arg0 : f32
|
||||
// CHECK: spv.GLSL.Sin %{{.*}}: f32
|
||||
%9 = sin %arg0 : f32
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -515,6 +515,18 @@ func @standard_instrs(tensor<4x4x?xf32>, f32, i32, index, i64, f16) {
|
|||
// CHECK: %{{[0-9]+}} = rsqrt %arg1 : f32
|
||||
%145 = rsqrt %f : f32
|
||||
|
||||
// CHECK: %{{[0-9]+}} = sin %arg1 : f32
|
||||
%146 = "std.sin"(%f) : (f32) -> f32
|
||||
|
||||
// CHECK: %{{[0-9]+}} = sin %arg1 : f32
|
||||
%147 = sin %f : f32
|
||||
|
||||
// CHECK: %{{[0-9]+}} = sin %cst_8 : vector<4xf32>
|
||||
%148 = sin %vcf32 : vector<4xf32>
|
||||
|
||||
// CHECK: %{{[0-9]+}} = sin %arg0 : tensor<4x4x?xf32>
|
||||
%149 = sin %t : tensor<4x4x?xf32>
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue