247 lines · plain
1// RUN: mlir-opt -convert-spirv-to-llvm %s | FileCheck %s2 3// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py4 5// CHECK-LABEL: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformLogicalXoriib(i32, i32, i1) -> i1 attributes {convergent, no_unwind, will_return}6// CHECK: llvm.func spir_funccc @_Z32__spirv_GroupNonUniformLogicalOriib(i32, i32, i1) -> i1 attributes {convergent, no_unwind, will_return}7// CHECK: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformLogicalAndiib(i32, i32, i1) -> i1 attributes {convergent, no_unwind, will_return}8// CHECK: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformBitwiseXoriij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}9// CHECK: llvm.func spir_funccc @_Z32__spirv_GroupNonUniformBitwiseOriij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}10// CHECK: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformBitwiseAndiij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}11// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformSMaxiijj(i32, i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}12// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMaxiif(i32, i32, f32) -> f32 attributes {convergent, no_unwind, will_return}13// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformUMaxiij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}14// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformSMaxiij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}15// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMiniifj(i32, i32, f32, i32) -> f32 attributes {convergent, no_unwind, will_return}16// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMiniif(i32, i32, f32) -> f32 attributes {convergent, no_unwind, will_return}17// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformUMiniij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}18// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformSMiniij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}19// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMuliif(i32, i32, f32) -> f32 attributes {convergent, no_unwind, will_return}20// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformIMuliijj(i32, i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}21// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFAddiifj(i32, i32, f32, i32) -> f32 attributes {convergent, no_unwind, will_return}22// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformIAddiij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}23 24// CHECK-LABEL: llvm.func @non_uniform_iadd(25// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {26// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i3227// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3228// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformIAddiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i3229// CHECK: llvm.return %[[VAL_3]] : i3230// CHECK: }31spirv.func @non_uniform_iadd(%arg0: i32) -> i32 "None" {32 %0 = spirv.GroupNonUniformIAdd <Subgroup> <Reduce> %arg0 : i32 -> i3233 spirv.ReturnValue %0 : i3234}35 36// CHECK-LABEL: llvm.func @non_uniform_fadd(37// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {38// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i3239// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i3240// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i3241// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFAddiifj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {convergent, no_unwind, will_return} : (i32, i32, f32, i32) -> f3242// CHECK: llvm.return %[[VAL_4]] : f3243// CHECK: }44spirv.func @non_uniform_fadd(%arg0: f32) -> f32 "None" {45 %0 = spirv.Constant 16 : i3246 %1 = spirv.GroupNonUniformFAdd <Subgroup> <ClusteredReduce> %arg0 cluster_size(%0) : f32, i32 -> f3247 spirv.ReturnValue %1 : f3248}49 50// CHECK-LABEL: llvm.func @non_uniform_imul(51// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {52// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i3253// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i3254// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i3255// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformIMuliijj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {convergent, no_unwind, will_return} : (i32, i32, i32, i32) -> i3256// CHECK: llvm.return %[[VAL_4]] : i3257// CHECK: }58spirv.func @non_uniform_imul(%arg0: i32) -> i32 "None" {59 %0 = spirv.Constant 16 : i3260 %1 = spirv.GroupNonUniformIMul <Subgroup> <ClusteredReduce> %arg0 cluster_size(%0) : i32, i32 -> i3261 spirv.ReturnValue %1 : i3262}63 64// CHECK-LABEL: llvm.func @non_uniform_fmul(65// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {66// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i3267// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3268// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMuliif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f3269// CHECK: llvm.return %[[VAL_3]] : f3270// CHECK: }71spirv.func @non_uniform_fmul(%arg0: f32) -> f32 "None" {72 %0 = spirv.GroupNonUniformFMul <Subgroup> <Reduce> %arg0 : f32 -> f3273 spirv.ReturnValue %0 : f3274}75 76// CHECK-LABEL: llvm.func @non_uniform_smin(77// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {78// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i3279// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3280// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i3281// CHECK: llvm.return %[[VAL_3]] : i3282// CHECK: }83spirv.func @non_uniform_smin(%arg0: i32) -> i32 "None" {84 %0 = spirv.GroupNonUniformSMin <Subgroup> <Reduce> %arg0 : i32 -> i3285 spirv.ReturnValue %0 : i3286}87 88// CHECK-LABEL: llvm.func @non_uniform_umin(89// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {90// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i3291// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3292// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformUMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i3293// CHECK: llvm.return %[[VAL_3]] : i3294// CHECK: }95spirv.func @non_uniform_umin(%arg0: i32) -> i32 "None" {96 %0 = spirv.GroupNonUniformUMin <Subgroup> <Reduce> %arg0 : i32 -> i3297 spirv.ReturnValue %0 : i3298}99 100// CHECK-LABEL: llvm.func @non_uniform_fmin(101// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {102// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32103// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32104// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMiniif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32105// CHECK: llvm.return %[[VAL_3]] : f32106// CHECK: }107spirv.func @non_uniform_fmin(%arg0: f32) -> f32 "None" {108 %0 = spirv.GroupNonUniformFMin <Subgroup> <Reduce> %arg0 : f32 -> f32109 spirv.ReturnValue %0 : f32110}111 112// CHECK-LABEL: llvm.func @non_uniform_fmin_cluster(113// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {114// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i32115// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i32116// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i32117// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMiniifj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {convergent, no_unwind, will_return} : (i32, i32, f32, i32) -> f32118// CHECK: llvm.return %[[VAL_4]] : f32119// CHECK: }120spirv.func @non_uniform_fmin_cluster(%arg0: f32) -> f32 "None" {121 %0 = spirv.Constant 16 : i32122 %1 = spirv.GroupNonUniformFMin <Subgroup> <ClusteredReduce> %arg0 cluster_size(%0) : f32, i32 -> f32123 spirv.ReturnValue %1 : f32124}125 126// CHECK-LABEL: llvm.func @non_uniform_smax(127// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {128// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32129// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32130// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32131// CHECK: llvm.return %[[VAL_3]] : i32132// CHECK: }133spirv.func @non_uniform_smax(%arg0: i32) -> i32 "None" {134 %0 = spirv.GroupNonUniformSMax <Subgroup> <Reduce> %arg0 : i32 -> i32135 spirv.ReturnValue %0 : i32136}137 138// CHECK-LABEL: llvm.func @non_uniform_umax(139// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {140// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32141// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32142// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformUMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32143// CHECK: llvm.return %[[VAL_3]] : i32144// CHECK: }145spirv.func @non_uniform_umax(%arg0: i32) -> i32 "None" {146 %0 = spirv.GroupNonUniformUMax <Subgroup> <Reduce> %arg0 : i32 -> i32147 spirv.ReturnValue %0 : i32148}149 150// CHECK-LABEL: llvm.func @non_uniform_fmax(151// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {152// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32153// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32154// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMaxiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32155// CHECK: llvm.return %[[VAL_3]] : f32156// CHECK: }157spirv.func @non_uniform_fmax(%arg0: f32) -> f32 "None" {158 %0 = spirv.GroupNonUniformFMax <Subgroup> <Reduce> %arg0 : f32 -> f32159 spirv.ReturnValue %0 : f32160}161 162// CHECK-LABEL: llvm.func @non_uniform_smax_cluster(163// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {164// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i32165// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i32166// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i32167// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMaxiijj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {convergent, no_unwind, will_return} : (i32, i32, i32, i32) -> i32168// CHECK: llvm.return %[[VAL_4]] : i32169// CHECK: }170spirv.func @non_uniform_smax_cluster(%arg0: i32) -> i32 "None" {171 %0 = spirv.Constant 16 : i32172 %1 = spirv.GroupNonUniformSMax <Subgroup> <ClusteredReduce> %arg0 cluster_size(%0) : i32, i32 -> i32173 spirv.ReturnValue %1 : i32174}175 176// CHECK-LABEL: llvm.func @non_uniform_bitwise_and(177// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {178// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32179// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32180// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformBitwiseAndiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32181// CHECK: llvm.return %[[VAL_3]] : i32182// CHECK: }183spirv.func @non_uniform_bitwise_and(%arg0: i32) -> i32 "None" {184 %0 = spirv.GroupNonUniformBitwiseAnd <Subgroup> <Reduce> %arg0 : i32 -> i32185 spirv.ReturnValue %0 : i32186}187 188// CHECK-LABEL: llvm.func @non_uniform_bitwise_or(189// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {190// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32191// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32192// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z32__spirv_GroupNonUniformBitwiseOriij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32193// CHECK: llvm.return %[[VAL_3]] : i32194// CHECK: }195spirv.func @non_uniform_bitwise_or(%arg0: i32) -> i32 "None" {196 %0 = spirv.GroupNonUniformBitwiseOr <Subgroup> <Reduce> %arg0 : i32 -> i32197 spirv.ReturnValue %0 : i32198}199 200// CHECK-LABEL: llvm.func @non_uniform_bitwise_xor(201// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {202// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32203// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32204// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformBitwiseXoriij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32205// CHECK: llvm.return %[[VAL_3]] : i32206// CHECK: }207spirv.func @non_uniform_bitwise_xor(%arg0: i32) -> i32 "None" {208 %0 = spirv.GroupNonUniformBitwiseXor <Subgroup> <Reduce> %arg0 : i32 -> i32209 spirv.ReturnValue %0 : i32210}211 212// CHECK-LABEL: llvm.func @non_uniform_logical_and(213// CHECK-SAME: %[[VAL_0:.*]]: i1) -> i1 {214// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32215// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32216// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformLogicalAndiib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i1) -> i1217// CHECK: llvm.return %[[VAL_3]] : i1218// CHECK: }219spirv.func @non_uniform_logical_and(%arg0: i1) -> i1 "None" {220 %0 = spirv.GroupNonUniformLogicalAnd <Subgroup> <Reduce> %arg0 : i1 -> i1221 spirv.ReturnValue %0 : i1222}223 224// CHECK-LABEL: llvm.func @non_uniform_logical_or(225// CHECK-SAME: %[[VAL_0:.*]]: i1) -> i1 {226// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32227// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32228// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z32__spirv_GroupNonUniformLogicalOriib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i1) -> i1229// CHECK: llvm.return %[[VAL_3]] : i1230// CHECK: }231spirv.func @non_uniform_logical_or(%arg0: i1) -> i1 "None" {232 %0 = spirv.GroupNonUniformLogicalOr <Subgroup> <Reduce> %arg0 : i1 -> i1233 spirv.ReturnValue %0 : i1234}235 236// CHECK-LABEL: llvm.func @non_uniform_logical_xor(237// CHECK-SAME: %[[VAL_0:.*]]: i1) -> i1 {238// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32239// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32240// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformLogicalXoriib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i1) -> i1241// CHECK: llvm.return %[[VAL_3]] : i1242// CHECK: }243spirv.func @non_uniform_logical_xor(%arg0: i1) -> i1 "None" {244 %0 = spirv.GroupNonUniformLogicalXor <Subgroup> <Reduce> %arg0 : i1 -> i1245 spirv.ReturnValue %0 : i1246}247