From: Tres Popp Date: Thu, 10 Dec 2020 22:49:42 +0000 (+0100) Subject: [mlir] Add std op for X raised to the power of Y X-Git-Tag: llvmorg-13-init~3351 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=73c580405ffae0243c113a1db6b77c0b595adf05;p=platform%2Fupstream%2Fllvm.git [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 --- diff --git a/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td b/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td index c218618..481dfaf4 100644 --- a/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td +++ b/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td @@ -2353,6 +2353,39 @@ def OrOp : IntArithmeticOp<"or", [Commutative]> { } //===----------------------------------------------------------------------===// +// 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 //===----------------------------------------------------------------------===// diff --git a/mlir/test/IR/core-ops.mlir b/mlir/test/IR/core-ops.mlir index 9af0c01..502e7fb 100644 --- a/mlir/test/IR/core-ops.mlir +++ b/mlir/test/IR/core-ops.mlir @@ -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 %c0 = "std.create_complex"(%f2, %f2) : (f32, f32) -> complex