brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · d9a33a1 Raw
219 lines · plain
1// RUN: mlir-opt -test-convert-to-spirv="run-signature-conversion=false run-vector-unrolling=false" -split-input-file %s | FileCheck %s2 3//===----------------------------------------------------------------------===//4// arithmetic ops5//===----------------------------------------------------------------------===//6 7// CHECK-LABEL: @int32_scalar8func.func @int32_scalar(%lhs: i32, %rhs: i32) {9  // CHECK: spirv.IAdd %{{.*}}, %{{.*}}: i3210  %0 = arith.addi %lhs, %rhs: i3211  // CHECK: spirv.ISub %{{.*}}, %{{.*}}: i3212  %1 = arith.subi %lhs, %rhs: i3213  // CHECK: spirv.IMul %{{.*}}, %{{.*}}: i3214  %2 = arith.muli %lhs, %rhs: i3215  // CHECK: spirv.SDiv %{{.*}}, %{{.*}}: i3216  %3 = arith.divsi %lhs, %rhs: i3217  // CHECK: spirv.UDiv %{{.*}}, %{{.*}}: i3218  %4 = arith.divui %lhs, %rhs: i3219  // CHECK: spirv.UMod %{{.*}}, %{{.*}}: i3220  %5 = arith.remui %lhs, %rhs: i3221  return22}23 24// CHECK-LABEL: @int32_scalar_srem25// CHECK-SAME: (%[[LHS:.+]]: i32, %[[RHS:.+]]: i32)26func.func @int32_scalar_srem(%lhs: i32, %rhs: i32) {27  // CHECK: %[[LABS:.+]] = spirv.GL.SAbs %[[LHS]] : i3228  // CHECK: %[[RABS:.+]] = spirv.GL.SAbs %[[RHS]] : i3229  // CHECK:  %[[ABS:.+]] = spirv.UMod %[[LABS]], %[[RABS]] : i3230  // CHECK:  %[[POS:.+]] = spirv.IEqual %[[LHS]], %[[LABS]] : i3231  // CHECK:  %[[NEG:.+]] = spirv.SNegate %[[ABS]] : i3232  // CHECK:      %{{.+}} = spirv.Select %[[POS]], %[[ABS]], %[[NEG]] : i1, i3233  %0 = arith.remsi %lhs, %rhs: i3234  return35}36 37// -----38 39//===----------------------------------------------------------------------===//40// arith bit ops41//===----------------------------------------------------------------------===//42 43// CHECK-LABEL: @bitwise_scalar44func.func @bitwise_scalar(%arg0 : i32, %arg1 : i32) {45  // CHECK: spirv.BitwiseAnd46  %0 = arith.andi %arg0, %arg1 : i3247  // CHECK: spirv.BitwiseOr48  %1 = arith.ori %arg0, %arg1 : i3249  // CHECK: spirv.BitwiseXor50  %2 = arith.xori %arg0, %arg1 : i3251  return52}53 54// CHECK-LABEL: @bitwise_vector55func.func @bitwise_vector(%arg0 : vector<4xi32>, %arg1 : vector<4xi32>) {56  // CHECK: spirv.BitwiseAnd57  %0 = arith.andi %arg0, %arg1 : vector<4xi32>58  // CHECK: spirv.BitwiseOr59  %1 = arith.ori %arg0, %arg1 : vector<4xi32>60  // CHECK: spirv.BitwiseXor61  %2 = arith.xori %arg0, %arg1 : vector<4xi32>62  return63}64 65// CHECK-LABEL: @logical_scalar66func.func @logical_scalar(%arg0 : i1, %arg1 : i1) {67  // CHECK: spirv.LogicalAnd68  %0 = arith.andi %arg0, %arg1 : i169  // CHECK: spirv.LogicalOr70  %1 = arith.ori %arg0, %arg1 : i171  // CHECK: spirv.LogicalNotEqual72  %2 = arith.xori %arg0, %arg1 : i173  return74}75 76// CHECK-LABEL: @logical_vector77func.func @logical_vector(%arg0 : vector<4xi1>, %arg1 : vector<4xi1>) {78  // CHECK: spirv.LogicalAnd79  %0 = arith.andi %arg0, %arg1 : vector<4xi1>80  // CHECK: spirv.LogicalOr81  %1 = arith.ori %arg0, %arg1 : vector<4xi1>82  // CHECK: spirv.LogicalNotEqual83  %2 = arith.xori %arg0, %arg1 : vector<4xi1>84  return85}86 87// CHECK-LABEL: @shift_scalar88func.func @shift_scalar(%arg0 : i32, %arg1 : i32) {89  // CHECK: spirv.ShiftLeftLogical90  %0 = arith.shli %arg0, %arg1 : i3291  // CHECK: spirv.ShiftRightArithmetic92  %1 = arith.shrsi %arg0, %arg1 : i3293  // CHECK: spirv.ShiftRightLogical94  %2 = arith.shrui %arg0, %arg1 : i3295  return96}97 98// CHECK-LABEL: @shift_vector99func.func @shift_vector(%arg0 : vector<4xi32>, %arg1 : vector<4xi32>) {100  // CHECK: spirv.ShiftLeftLogical101  %0 = arith.shli %arg0, %arg1 : vector<4xi32>102  // CHECK: spirv.ShiftRightArithmetic103  %1 = arith.shrsi %arg0, %arg1 : vector<4xi32>104  // CHECK: spirv.ShiftRightLogical105  %2 = arith.shrui %arg0, %arg1 : vector<4xi32>106  return107}108 109// -----110 111//===----------------------------------------------------------------------===//112// arith.cmpf113//===----------------------------------------------------------------------===//114 115// CHECK-LABEL: @cmpf116func.func @cmpf(%arg0 : f32, %arg1 : f32) {117  // CHECK: spirv.FOrdEqual118  %1 = arith.cmpf oeq, %arg0, %arg1 : f32119  return120}121 122// CHECK-LABEL: @vec1cmpf123func.func @vec1cmpf(%arg0 : vector<1xf32>, %arg1 : vector<1xf32>) {124  // CHECK: spirv.FOrdGreaterThan125  %0 = arith.cmpf ogt, %arg0, %arg1 : vector<1xf32>126  // CHECK: spirv.FUnordLessThan127  %1 = arith.cmpf ult, %arg0, %arg1 : vector<1xf32>128  return129}130 131// -----132 133//===----------------------------------------------------------------------===//134// arith.cmpi135//===----------------------------------------------------------------------===//136 137// CHECK-LABEL: @cmpi138func.func @cmpi(%arg0 : i32, %arg1 : i32) {139  // CHECK: spirv.IEqual140  %0 = arith.cmpi eq, %arg0, %arg1 : i32141  return142}143 144// CHECK-LABEL: @indexcmpi145func.func @indexcmpi(%arg0 : index, %arg1 : index) {146  // CHECK: spirv.IEqual147  %0 = arith.cmpi eq, %arg0, %arg1 : index148  return149}150 151// CHECK-LABEL: @vec1cmpi152func.func @vec1cmpi(%arg0 : vector<1xi32>, %arg1 : vector<1xi32>) {153  // CHECK: spirv.ULessThan154  %0 = arith.cmpi ult, %arg0, %arg1 : vector<1xi32>155  // CHECK: spirv.SGreaterThan156  %1 = arith.cmpi sgt, %arg0, %arg1 : vector<1xi32>157  return158}159 160// CHECK-LABEL: @boolcmpi_equality161func.func @boolcmpi_equality(%arg0 : i1, %arg1 : i1) {162  // CHECK: spirv.LogicalEqual163  %0 = arith.cmpi eq, %arg0, %arg1 : i1164  // CHECK: spirv.LogicalNotEqual165  %1 = arith.cmpi ne, %arg0, %arg1 : i1166  return167}168 169// CHECK-LABEL: @boolcmpi_unsigned170func.func @boolcmpi_unsigned(%arg0 : i1, %arg1 : i1) {171  // CHECK-COUNT-2: spirv.Select172  // CHECK: spirv.UGreaterThanEqual173  %0 = arith.cmpi uge, %arg0, %arg1 : i1174  // CHECK-COUNT-2: spirv.Select175  // CHECK: spirv.ULessThan176  %1 = arith.cmpi ult, %arg0, %arg1 : i1177  return178}179 180// CHECK-LABEL: @vec1boolcmpi_equality181func.func @vec1boolcmpi_equality(%arg0 : vector<1xi1>, %arg1 : vector<1xi1>) {182  // CHECK: spirv.LogicalEqual183  %0 = arith.cmpi eq, %arg0, %arg1 : vector<1xi1>184  // CHECK: spirv.LogicalNotEqual185  %1 = arith.cmpi ne, %arg0, %arg1 : vector<1xi1>186  return187}188 189// CHECK-LABEL: @vec1boolcmpi_unsigned190func.func @vec1boolcmpi_unsigned(%arg0 : vector<1xi1>, %arg1 : vector<1xi1>) {191  // CHECK-COUNT-2: spirv.Select192  // CHECK: spirv.UGreaterThanEqual193  %0 = arith.cmpi uge, %arg0, %arg1 : vector<1xi1>194  // CHECK-COUNT-2: spirv.Select195  // CHECK: spirv.ULessThan196  %1 = arith.cmpi ult, %arg0, %arg1 : vector<1xi1>197  return198}199 200// CHECK-LABEL: @vecboolcmpi_equality201func.func @vecboolcmpi_equality(%arg0 : vector<4xi1>, %arg1 : vector<4xi1>) {202  // CHECK: spirv.LogicalEqual203  %0 = arith.cmpi eq, %arg0, %arg1 : vector<4xi1>204  // CHECK: spirv.LogicalNotEqual205  %1 = arith.cmpi ne, %arg0, %arg1 : vector<4xi1>206  return207}208 209// CHECK-LABEL: @vecboolcmpi_unsigned210func.func @vecboolcmpi_unsigned(%arg0 : vector<3xi1>, %arg1 : vector<3xi1>) {211  // CHECK-COUNT-2: spirv.Select212  // CHECK: spirv.UGreaterThanEqual213  %0 = arith.cmpi uge, %arg0, %arg1 : vector<3xi1>214  // CHECK-COUNT-2: spirv.Select215  // CHECK: spirv.ULessThan216  %1 = arith.cmpi ult, %arg0, %arg1 : vector<3xi1>217  return218}219