313 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 @_Z17__spirv_GroupSMaxiij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}6// CHECK: llvm.func spir_funccc @_Z17__spirv_GroupUMaxiij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}7// CHECK: llvm.func spir_funccc @_Z17__spirv_GroupFMaxiif(i32, i32, f32) -> f32 attributes {convergent, no_unwind, will_return}8// CHECK: llvm.func spir_funccc @_Z17__spirv_GroupSMiniij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}9// CHECK: llvm.func spir_funccc @_Z17__spirv_GroupUMiniij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}10// CHECK: llvm.func spir_funccc @_Z17__spirv_GroupFMiniif(i32, i32, f32) -> f32 attributes {convergent, no_unwind, will_return}11// CHECK: llvm.func spir_funccc @_Z17__spirv_GroupFAddiif(i32, i32, f32) -> f32 attributes {convergent, no_unwind, will_return}12// CHECK: llvm.func spir_funccc @_Z17__spirv_GroupIAddiij(i32, i32, i32) -> i32 attributes {convergent, no_unwind, will_return}13 14// CHECK-LABEL: llvm.func @group_reduce_iadd(15// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {16// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i3217// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3218// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupIAddiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i3219// CHECK: llvm.return %[[VAL_3]] : i3220// CHECK: }21spirv.func @group_reduce_iadd(%arg0: i32) -> i32 "None" {22 %0 = spirv.GroupIAdd <Workgroup> <Reduce> %arg0 : i3223 spirv.ReturnValue %0 : i3224}25 26// CHECK-LABEL: llvm.func @group_reduce_fadd(27// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {28// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i3229// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3230// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFAddiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f3231// CHECK: llvm.return %[[VAL_3]] : f3232// CHECK: }33spirv.func @group_reduce_fadd(%arg0: f32) -> f32 "None" {34 %0 = spirv.GroupFAdd <Workgroup> <Reduce> %arg0 : f3235 spirv.ReturnValue %0 : f3236}37 38// CHECK-LABEL: llvm.func @group_reduce_fmin(39// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {40// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i3241// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3242// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFMiniif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f3243// CHECK: llvm.return %[[VAL_3]] : f3244// CHECK: }45spirv.func @group_reduce_fmin(%arg0: f32) -> f32 "None" {46 %0 = spirv.GroupFMin <Workgroup> <Reduce> %arg0 : f3247 spirv.ReturnValue %0 : f3248}49 50// CHECK-LABEL: llvm.func @group_reduce_umin(51// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {52// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i3253// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3254// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupUMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i3255// CHECK: llvm.return %[[VAL_3]] : i3256// CHECK: }57spirv.func @group_reduce_umin(%arg0: i32) -> i32 "None" {58 %0 = spirv.GroupUMin <Workgroup> <Reduce> %arg0 : i3259 spirv.ReturnValue %0 : i3260}61 62// CHECK-LABEL: llvm.func @group_reduce_smin(63// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {64// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i3265// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3266// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupSMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i3267// CHECK: llvm.return %[[VAL_3]] : i3268// CHECK: }69spirv.func @group_reduce_smin(%arg0: i32) -> i32 "None" {70 %0 = spirv.GroupSMin <Workgroup> <Reduce> %arg0 : i3271 spirv.ReturnValue %0 : i3272}73 74// CHECK-LABEL: llvm.func @group_reduce_fmax(75// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {76// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i3277// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3278// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFMaxiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f3279// CHECK: llvm.return %[[VAL_3]] : f3280// CHECK: }81spirv.func @group_reduce_fmax(%arg0: f32) -> f32 "None" {82 %0 = spirv.GroupFMax <Workgroup> <Reduce> %arg0 : f3283 spirv.ReturnValue %0 : f3284}85 86// CHECK-LABEL: llvm.func @group_reduce_umax(87// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {88// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i3289// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i3290// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupUMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i3291// CHECK: llvm.return %[[VAL_3]] : i3292// CHECK: }93spirv.func @group_reduce_umax(%arg0: i32) -> i32 "None" {94 %0 = spirv.GroupUMax <Workgroup> <Reduce> %arg0 : i3295 spirv.ReturnValue %0 : i3296}97 98// CHECK-LABEL: llvm.func @group_reduce_smax(99// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {100// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32101// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32102// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupSMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32103// CHECK: llvm.return %[[VAL_3]] : i32104// CHECK: }105spirv.func @group_reduce_smax(%arg0: i32) -> i32 "None" {106 %0 = spirv.GroupSMax <Workgroup> <Reduce> %arg0 : i32107 spirv.ReturnValue %0 : i32108}109 110// CHECK-LABEL: llvm.func @group_inclusive_scan_iadd(111// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {112// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32113// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i32) : i32114// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupIAddiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32115// CHECK: llvm.return %[[VAL_3]] : i32116// CHECK: }117spirv.func @group_inclusive_scan_iadd(%arg0: i32) -> i32 "None" {118 %0 = spirv.GroupIAdd <Workgroup> <InclusiveScan> %arg0 : i32119 spirv.ReturnValue %0 : i32120}121 122// CHECK-LABEL: llvm.func @group_inclusive_scan_fadd(123// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {124// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32125// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i32) : i32126// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFAddiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32127// CHECK: llvm.return %[[VAL_3]] : f32128// CHECK: }129spirv.func @group_inclusive_scan_fadd(%arg0: f32) -> f32 "None" {130 %0 = spirv.GroupFAdd <Workgroup> <InclusiveScan> %arg0 : f32131 spirv.ReturnValue %0 : f32132}133 134// CHECK-LABEL: llvm.func @group_inclusive_scan_fmin(135// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {136// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32137// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i32) : i32138// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFMiniif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32139// CHECK: llvm.return %[[VAL_3]] : f32140// CHECK: }141spirv.func @group_inclusive_scan_fmin(%arg0: f32) -> f32 "None" {142 %0 = spirv.GroupFMin <Workgroup> <InclusiveScan> %arg0 : f32143 spirv.ReturnValue %0 : f32144}145 146// CHECK-LABEL: llvm.func @group_inclusive_scan_umin(147// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {148// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32149// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i32) : i32150// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupUMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32151// CHECK: llvm.return %[[VAL_3]] : i32152// CHECK: }153spirv.func @group_inclusive_scan_umin(%arg0: i32) -> i32 "None" {154 %0 = spirv.GroupUMin <Workgroup> <InclusiveScan> %arg0 : i32155 spirv.ReturnValue %0 : i32156}157 158// CHECK-LABEL: llvm.func @group_inclusive_scan_smin(159// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {160// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32161// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i32) : i32162// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupSMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32163// CHECK: llvm.return %[[VAL_3]] : i32164// CHECK: }165spirv.func @group_inclusive_scan_smin(%arg0: i32) -> i32 "None" {166 %0 = spirv.GroupSMin <Workgroup> <InclusiveScan> %arg0 : i32167 spirv.ReturnValue %0 : i32168}169 170// CHECK-LABEL: llvm.func @group_inclusive_scan_fmax(171// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {172// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32173// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i32) : i32174// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFMaxiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32175// CHECK: llvm.return %[[VAL_3]] : f32176// CHECK: }177spirv.func @group_inclusive_scan_fmax(%arg0: f32) -> f32 "None" {178 %0 = spirv.GroupFMax <Workgroup> <InclusiveScan> %arg0 : f32179 spirv.ReturnValue %0 : f32180}181 182// CHECK-LABEL: llvm.func @group_inclusive_scan_umax(183// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {184// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32185// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i32) : i32186// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupUMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32187// CHECK: llvm.return %[[VAL_3]] : i32188// CHECK: }189spirv.func @group_inclusive_scan_umax(%arg0: i32) -> i32 "None" {190 %0 = spirv.GroupUMax <Workgroup> <InclusiveScan> %arg0 : i32191 spirv.ReturnValue %0 : i32192}193 194// CHECK-LABEL: llvm.func @group_inclusive_scan_smax(195// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {196// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32197// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32198// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupSMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32199// CHECK: llvm.return %[[VAL_3]] : i32200// CHECK: }201spirv.func @group_inclusive_scan_smax(%arg0: i32) -> i32 "None" {202 %0 = spirv.GroupSMax <Workgroup> <ExclusiveScan> %arg0 : i32203 spirv.ReturnValue %0 : i32204}205 206// CHECK-LABEL: llvm.func @group_exclusive_scan_iadd(207// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {208// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32209// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32210// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupIAddiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32211// CHECK: llvm.return %[[VAL_3]] : i32212// CHECK: }213spirv.func @group_exclusive_scan_iadd(%arg0: i32) -> i32 "None" {214 %0 = spirv.GroupIAdd <Workgroup> <ExclusiveScan> %arg0 : i32215 spirv.ReturnValue %0 : i32216}217 218// CHECK-LABEL: llvm.func @group_exclusive_scan_fadd(219// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {220// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32221// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32222// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFAddiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32223// CHECK: llvm.return %[[VAL_3]] : f32224// CHECK: }225spirv.func @group_exclusive_scan_fadd(%arg0: f32) -> f32 "None" {226 %0 = spirv.GroupFAdd <Workgroup> <ExclusiveScan> %arg0 : f32227 spirv.ReturnValue %0 : f32228}229 230// CHECK-LABEL: llvm.func @group_exclusive_scan_fmin(231// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {232// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32233// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32234// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFMiniif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32235// CHECK: llvm.return %[[VAL_3]] : f32236// CHECK: }237spirv.func @group_exclusive_scan_fmin(%arg0: f32) -> f32 "None" {238 %0 = spirv.GroupFMin <Workgroup> <ExclusiveScan> %arg0 : f32239 spirv.ReturnValue %0 : f32240}241 242// CHECK-LABEL: llvm.func @group_exclusive_scan_umin(243// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {244// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32245// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32246// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupUMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32247// CHECK: llvm.return %[[VAL_3]] : i32248// CHECK: }249spirv.func @group_exclusive_scan_umin(%arg0: i32) -> i32 "None" {250 %0 = spirv.GroupUMin <Workgroup> <ExclusiveScan> %arg0 : i32251 spirv.ReturnValue %0 : i32252}253 254// CHECK-LABEL: llvm.func @group_exclusive_scan_smin(255// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {256// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32257// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32258// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupSMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32259// CHECK: llvm.return %[[VAL_3]] : i32260// CHECK: }261spirv.func @group_exclusive_scan_smin(%arg0: i32) -> i32 "None" {262 %0 = spirv.GroupSMin <Workgroup> <ExclusiveScan> %arg0 : i32263 spirv.ReturnValue %0 : i32264}265 266// CHECK-LABEL: llvm.func @group_exclusive_scan_fmax(267// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {268// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32269// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32270// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupFMaxiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32271// CHECK: llvm.return %[[VAL_3]] : f32272// CHECK: }273spirv.func @group_exclusive_scan_fmax(%arg0: f32) -> f32 "None" {274 %0 = spirv.GroupFMax <Workgroup> <ExclusiveScan> %arg0 : f32275 spirv.ReturnValue %0 : f32276}277 278// CHECK-LABEL: llvm.func @group_exclusive_scan_umax(279// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {280// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32281// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32282// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupUMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32283// CHECK: llvm.return %[[VAL_3]] : i32284// CHECK: }285spirv.func @group_exclusive_scan_umax(%arg0: i32) -> i32 "None" {286 %0 = spirv.GroupUMax <Workgroup> <ExclusiveScan> %arg0 : i32287 spirv.ReturnValue %0 : i32288}289 290// CHECK-LABEL: llvm.func @group_exclusive_scan_smax(291// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {292// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(2 : i32) : i32293// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32294// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupSMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32295// CHECK: llvm.return %[[VAL_3]] : i32296// CHECK: }297spirv.func @group_exclusive_scan_smax(%arg0: i32) -> i32 "None" {298 %0 = spirv.GroupSMax <Workgroup> <ExclusiveScan> %arg0 : i32299 spirv.ReturnValue %0 : i32300}301 302// CHECK-LABEL: llvm.func @subgroup_exclusive_scan_smax(303// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {304// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32305// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(2 : i32) : i32306// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z17__spirv_GroupSMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32307// CHECK: llvm.return %[[VAL_3]] : i32308// CHECK: }309spirv.func @subgroup_exclusive_scan_smax(%arg0: i32) -> i32 "None" {310 %0 = spirv.GroupSMax <Subgroup> <ExclusiveScan> %arg0 : i32311 spirv.ReturnValue %0 : i32312}313