}
//===----------------------------------------------------------------------===//
+// Atan2Op
+//===----------------------------------------------------------------------===//
+
+def Atan2Op : FloatArithmeticOp<"atan2">{
+ let summary = "2-argument arcus tangent of the given values";
+ let description = [{
+ Syntax:
+
+ ```
+ operation ::= ssa-id `=` `std.atan2` ssa-use `,` ssa-use `:` type
+ ```
+
+ The `atan2` operation takes two operands and returns one result, all of
+ which must be of 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.
+
+ The 2-argument arcus tangent `atan2(y, x)` returns the angle in the
+ Euclidian plane between the positive x-axis and the ray through the point
+ (x, y). It is a generalization of the 1-argument arcus tangent which
+ returns the angle on the basis of the ratio y/x.
+
+ See also https://en.wikipedia.org/wiki/Atan2
+
+ Example:
+
+ ```mlir
+ // Scalar variant.
+ %a = atan2 %b, %c : f32
+
+ // SIMD vector variant.
+ %f = atan2 %g, %h : vector<4xf32>
+
+ // Tensor variant.
+ %x = atan2 %y, %z : tensor<4x?xf32>
+ ```
+ }];
+}
+
+//===----------------------------------------------------------------------===//
// AtomicRMWOp
//===----------------------------------------------------------------------===//
return %0 : tensor<index>
}
+// CHECK-LABEL: @assert
func @assert(%arg : i1) {
assert %arg, "Some message in case this assertion fails."
return
}
+// CHECK-LABEL: @dynamic_tensor_from_elements
func @dynamic_tensor_from_elements(%m : index, %n : index)
-> tensor<?x3x?xf32> {
%tnsr = dynamic_tensor_from_elements %m, %n {
return %tnsr : tensor<?x3x?xf32>
}
+// CHECK-LABEL: @atan
+func @atan(%arg : f32) -> f32 {
+ %result = atan %arg : f32
+ return %result : f32
+}
+
+// CHECK-LABEL: @atan2
+func @atan2(%arg0 : f32, %arg1 : f32) -> f32 {
+ %result = atan2 %arg0, %arg1 : f32
+ return %result : f32
+}