// RUN: mlir-opt -split-input-file -convert-math-to-spirv -verify-diagnostics %s -o - | FileCheck %s

module attributes { spv.target_env = #spv.target_env<#spv.vce<v1.0, [Shader], []>, {}> } {

// CHECK-LABEL: @float32_unary_scalar
func @float32_unary_scalar(%arg0: f32) {
  // CHECK: spv.GLSL.Cos %{{.*}}: f32
  %0 = math.cos %arg0 : f32
  // CHECK: spv.GLSL.Exp %{{.*}}: f32
  %1 = math.exp %arg0 : f32
  // CHECK: spv.GLSL.Log %{{.*}}: f32
  %2 = math.log %arg0 : f32
  // CHECK: %[[ONE:.+]] = spv.Constant 1.000000e+00 : f32
  // CHECK: %[[ADDONE:.+]] = spv.FAdd %[[ONE]], %{{.+}}
  // CHECK: spv.GLSL.Log %[[ADDONE]]
  %3 = math.log1p %arg0 : f32
  // CHECK: spv.GLSL.InverseSqrt %{{.*}}: f32
  %4 = math.rsqrt %arg0 : f32
  // CHECK: spv.GLSL.Sqrt %{{.*}}: f32
  %5 = math.sqrt %arg0 : f32
  // CHECK: spv.GLSL.Tanh %{{.*}}: f32
  %6 = math.tanh %arg0 : f32
  // CHECK: spv.GLSL.Sin %{{.*}}: f32
  %7 = math.sin %arg0 : f32
  // CHECK: spv.GLSL.FAbs %{{.*}}: f32
  %8 = math.abs %arg0 : f32
  // CHECK: spv.GLSL.Ceil %{{.*}}: f32
  %9 = math.ceil %arg0 : f32
  // CHECK: spv.GLSL.Floor %{{.*}}: f32
  %10 = math.floor %arg0 : f32
  return
}

// CHECK-LABEL: @float32_unary_vector
func @float32_unary_vector(%arg0: vector<3xf32>) {
  // CHECK: spv.GLSL.Cos %{{.*}}: vector<3xf32>
  %0 = math.cos %arg0 : vector<3xf32>
  // CHECK: spv.GLSL.Exp %{{.*}}: vector<3xf32>
  %1 = math.exp %arg0 : vector<3xf32>
  // CHECK: spv.GLSL.Log %{{.*}}: vector<3xf32>
  %2 = math.log %arg0 : vector<3xf32>
  // CHECK: %[[ONE:.+]] = spv.Constant dense<1.000000e+00> : vector<3xf32>
  // CHECK: %[[ADDONE:.+]] = spv.FAdd %[[ONE]], %{{.+}}
  // CHECK: spv.GLSL.Log %[[ADDONE]]
  %3 = math.log1p %arg0 : vector<3xf32>
  // CHECK: spv.GLSL.InverseSqrt %{{.*}}: vector<3xf32>
  %4 = math.rsqrt %arg0 : vector<3xf32>
  // CHECK: spv.GLSL.Sqrt %{{.*}}: vector<3xf32>
  %5 = math.sqrt %arg0 : vector<3xf32>
  // CHECK: spv.GLSL.Tanh %{{.*}}: vector<3xf32>
  %6 = math.tanh %arg0 : vector<3xf32>
  // CHECK: spv.GLSL.Sin %{{.*}}: vector<3xf32>
  %7 = math.sin %arg0 : vector<3xf32>
  return
}

// CHECK-LABEL: @float32_binary_scalar
func @float32_binary_scalar(%lhs: f32, %rhs: f32) {
  // CHECK: spv.GLSL.Pow %{{.*}}: f32
  %0 = math.powf %lhs, %rhs : f32
  return
}

// CHECK-LABEL: @float32_binary_vector
func @float32_binary_vector(%lhs: vector<4xf32>, %rhs: vector<4xf32>) {
  // CHECK: spv.GLSL.Pow %{{.*}}: vector<4xf32>
  %0 = math.powf %lhs, %rhs : vector<4xf32>
  return
}

} // end module
