[mlir] Add std op for X raised to the power of Y

Proposal:
https://llvm.discourse.group/t/rfc-standard-add-powop-to-std-dialect/2377

Differential Revision: https://reviews.llvm.org/D93119
This commit is contained in:
Tres Popp 2020-12-10 23:49:42 +01:00
parent 6cc3d80a84
commit 73c580405f
2 changed files with 36 additions and 0 deletions

View File

@ -2352,6 +2352,39 @@ def OrOp : IntArithmeticOp<"or", [Commutative]> {
let hasFolder = 1;
}
//===----------------------------------------------------------------------===//
// PowFOp
//===----------------------------------------------------------------------===//
def PowFOp : FloatArithmeticOp<"powf"> {
let summary = "floating point raised to the power of operation";
let description = [{
Syntax:
```
operation ::= ssa-id `=` `std.powf` ssa-use `,` ssa-use `:` type
```
The `powf` operation takes two operands and returns one result, each of
these is required to be the same type. This type may be a floating point
scalar type, a vector whose element type is a floating point type, or a
floating point tensor.
Example:
```mlir
// Scalar exponentiation.
%a = powf %b, %c : f64
// SIMD pointwise vector exponentiation
%f = powf %g, %h : vector<4xf32>
// Tensor pointwise exponentiation.
%x = powf %y, %z : tensor<4x?xbf16>
```
}];
}
//===----------------------------------------------------------------------===//
// PrefetchOp
//===----------------------------------------------------------------------===//

View File

@ -86,6 +86,9 @@ func @standard_instrs(tensor<4x4x?xf32>, f32, i32, index, i64, f16) {
// CHECK: %[[I6:.*]] = muli %[[I2]], %[[I2]] : i32
%i6 = muli %i2, %i2 : i32
// CHECK: %[[F7:.*]] = powf %[[F2]], %[[F2]] : f32
%f7 = powf %f2, %f2 : f32
// CHECK: %[[C0:.*]] = create_complex %[[F2]], %[[F2]] : complex<f32>
%c0 = "std.create_complex"(%f2, %f2) : (f32, f32) -> complex<f32>