brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 586460f Raw
93 lines · plain
1// RUN: mlir-opt -split-input-file -convert-math-to-spirv -verify-diagnostics %s -o - | FileCheck %s2 3func.func @copy_sign_scalar(%value: f32, %sign: f32) -> f32 {4  %0 = math.copysign %value, %sign : f325  return %0: f326}7 8// CHECK-LABEL: func @copy_sign_scalar9//  CHECK-SAME: (%[[VALUE:.+]]: f32, %[[SIGN:.+]]: f32)10//       CHECK:   %[[SMASK:.+]] = spirv.Constant -2147483648 : i3211//       CHECK:   %[[VMASK:.+]] = spirv.Constant 2147483647 : i3212//       CHECK:   %[[VCAST:.+]] = spirv.Bitcast %[[VALUE]] : f32 to i3213//       CHECK:   %[[SCAST:.+]] = spirv.Bitcast %[[SIGN]] : f32 to i3214//       CHECK:   %[[VAND:.+]] = spirv.BitwiseAnd %[[VCAST]], %[[VMASK]] : i3215//       CHECK:   %[[SAND:.+]] = spirv.BitwiseAnd %[[SCAST]], %[[SMASK]] : i3216//       CHECK:   %[[OR:.+]] = spirv.BitwiseOr %[[VAND]], %[[SAND]] : i3217//       CHECK:   %[[RESULT:.+]] = spirv.Bitcast %[[OR]] : i32 to f3218//       CHECK:   return %[[RESULT]]19 20// -----21 22module attributes { spirv.target_env = #spirv.target_env<#spirv.vce<v1.0, [Float16, Int16], []>, #spirv.resource_limits<>> } {23 24func.func @copy_sign_vector(%value: vector<3xf16>, %sign: vector<3xf16>) -> vector<3xf16> {25  %0 = math.copysign %value, %sign : vector<3xf16>26  return %0: vector<3xf16>27}28 29}30 31// CHECK-LABEL: func @copy_sign_vector32//  CHECK-SAME: (%[[VALUE:.+]]: vector<3xf16>, %[[SIGN:.+]]: vector<3xf16>)33//       CHECK:   %[[SMASK:.+]] = spirv.Constant -32768 : i1634//       CHECK:   %[[VMASK:.+]] = spirv.Constant 32767 : i1635//       CHECK:   %[[SVMASK:.+]] = spirv.CompositeConstruct %[[SMASK]], %[[SMASK]], %[[SMASK]]36//       CHECK:   %[[VVMASK:.+]] = spirv.CompositeConstruct %[[VMASK]], %[[VMASK]], %[[VMASK]]37//       CHECK:   %[[VCAST:.+]] = spirv.Bitcast %[[VALUE]] : vector<3xf16> to vector<3xi16>38//       CHECK:   %[[SCAST:.+]] = spirv.Bitcast %[[SIGN]] : vector<3xf16> to vector<3xi16>39//       CHECK:   %[[VAND:.+]] = spirv.BitwiseAnd %[[VCAST]], %[[VVMASK]] : vector<3xi16>40//       CHECK:   %[[SAND:.+]] = spirv.BitwiseAnd %[[SCAST]], %[[SVMASK]] : vector<3xi16>41//       CHECK:   %[[OR:.+]] = spirv.BitwiseOr %[[VAND]], %[[SAND]] : vector<3xi16>42//       CHECK:   %[[RESULT:.+]] = spirv.Bitcast %[[OR]] : vector<3xi16> to vector<3xf16>43//       CHECK:   return %[[RESULT]]44 45// -----46 47// 2-D vectors are not supported.48func.func @copy_sign_2d_vector(%value: vector<3x3xf32>, %sign: vector<3x3xf32>) -> vector<3x3xf32> {49  %0 = math.copysign %value, %sign : vector<3x3xf32>50  return %0: vector<3x3xf32>51}52 53// CHECK-LABEL: func @copy_sign_2d_vector54// CHECK-NEXT:    math.copysign {{%.+}}, {{%.+}} : vector<3x3xf32>55// CHECK-NEXT:    return56 57// -----58 59// Tensors are not supported.60func.func @copy_sign_tensor(%value: tensor<3x3xf32>, %sign: tensor<3x3xf32>) -> tensor<3x3xf32> {61  %0 = math.copysign %value, %sign : tensor<3x3xf32>62  return %0: tensor<3x3xf32>63}64 65// CHECK-LABEL: func @copy_sign_tensor66// CHECK-NEXT:    math.copysign {{%.+}}, {{%.+}} : tensor<3x3xf32>67// CHECK-NEXT:    return68// -----69 70module attributes { spirv.target_env = #spirv.target_env<#spirv.vce<v1.0, [Float16, Int16], []>, #spirv.resource_limits<>> } {71 72func.func @copy_sign_vector_0D(%value: vector<1xf16>, %sign: vector<1xf16>) -> vector<1xf16> {73  %0 = math.copysign %value, %sign : vector<1xf16>74  return %0: vector<1xf16>75}76 77}78 79// CHECK-LABEL: func @copy_sign_vector_0D80//  CHECK-SAME: (%[[VALUE:.+]]: vector<1xf16>, %[[SIGN:.+]]: vector<1xf16>)81//   CHECK-DAG:   %[[CASTVAL:.+]] = builtin.unrealized_conversion_cast %[[VALUE]] : vector<1xf16> to f1682//   CHECK-DAG:   %[[CASTSIGN:.+]] = builtin.unrealized_conversion_cast %[[SIGN]] : vector<1xf16> to f1683//       CHECK:   %[[SMASK:.+]] = spirv.Constant -32768 : i1684//       CHECK:   %[[VMASK:.+]] = spirv.Constant 32767 : i1685//       CHECK:   %[[VCAST:.+]] = spirv.Bitcast %[[CASTVAL]] : f16 to i1686//       CHECK:   %[[SCAST:.+]] = spirv.Bitcast %[[CASTSIGN]] : f16 to i1687//       CHECK:   %[[VAND:.+]] = spirv.BitwiseAnd %[[VCAST]], %[[VMASK]] : i1688//       CHECK:   %[[SAND:.+]] = spirv.BitwiseAnd %[[SCAST]], %[[SMASK]] : i1689//       CHECK:   %[[OR:.+]] = spirv.BitwiseOr %[[VAND]], %[[SAND]] : i1690//       CHECK:   %[[RESULT:.+]] = spirv.Bitcast %[[OR]] : i16 to f1691//       CHECK:   %[[CASTRESULT:.+]] = builtin.unrealized_conversion_cast %[[RESULT]] : f16 to vector<1xf16>92//       CHECK:   return %[[CASTRESULT]]93