Skip to content

Commit 4adeb6c

Browse files
authored
[mlir][spirv] Add convergent attribute to builtin (#122131)
Add the `convergent` attribute to builtin functions and builtin function calls when lowering SPIR-V non-uniform group functions to LLVM dialect. --------- Signed-off-by: Lukas Sommer <[email protected]>
1 parent 75a4563 commit 4adeb6c

File tree

2 files changed

+38
-38
lines changed

2 files changed

+38
-38
lines changed

mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,8 +1253,8 @@ class GroupReducePattern : public SPIRVToLLVMConversion<ReduceOp> {
12531253
Operation *symbolTable =
12541254
op->template getParentWithTrait<OpTrait::SymbolTable>();
12551255

1256-
LLVM::LLVMFuncOp func = lookupOrCreateSPIRVFn(
1257-
symbolTable, funcName, paramTypes, retTy, !NonUniform);
1256+
LLVM::LLVMFuncOp func =
1257+
lookupOrCreateSPIRVFn(symbolTable, funcName, paramTypes, retTy);
12581258

12591259
Location loc = op.getLoc();
12601260
Value scope = rewriter.create<LLVM::ConstantOp>(

mlir/test/Conversion/SPIRVToLLVM/non-uniform-ops-to-llvm.mlir

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,30 @@
22

33
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
44

5-
// CHECK-LABEL: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformLogicalXoriib(i32, i32, i1) -> i1 attributes {no_unwind, will_return}
6-
// CHECK: llvm.func spir_funccc @_Z32__spirv_GroupNonUniformLogicalOriib(i32, i32, i1) -> i1 attributes {no_unwind, will_return}
7-
// CHECK: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformLogicalAndiib(i32, i32, i1) -> i1 attributes {no_unwind, will_return}
8-
// CHECK: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformBitwiseXoriij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
9-
// CHECK: llvm.func spir_funccc @_Z32__spirv_GroupNonUniformBitwiseOriij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
10-
// CHECK: llvm.func spir_funccc @_Z33__spirv_GroupNonUniformBitwiseAndiij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
11-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformSMaxiijj(i32, i32, i32, i32) -> i32 attributes {no_unwind, will_return}
12-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMaxiif(i32, i32, f32) -> f32 attributes {no_unwind, will_return}
13-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformUMaxiij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
14-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformSMaxiij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
15-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMiniifj(i32, i32, f32, i32) -> f32 attributes {no_unwind, will_return}
16-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMiniif(i32, i32, f32) -> f32 attributes {no_unwind, will_return}
17-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformUMiniij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
18-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformSMiniij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
19-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFMuliif(i32, i32, f32) -> f32 attributes {no_unwind, will_return}
20-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformIMuliijj(i32, i32, i32, i32) -> i32 attributes {no_unwind, will_return}
21-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformFAddiifj(i32, i32, f32, i32) -> f32 attributes {no_unwind, will_return}
22-
// CHECK: llvm.func spir_funccc @_Z27__spirv_GroupNonUniformIAddiij(i32, i32, i32) -> i32 attributes {no_unwind, will_return}
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}
2323

2424
// CHECK-LABEL: llvm.func @non_uniform_iadd(
2525
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
2626
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
2727
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
28-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformIAddiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
28+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformIAddiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
2929
// CHECK: llvm.return %[[VAL_3]] : i32
3030
// CHECK: }
3131
spirv.func @non_uniform_iadd(%arg0: i32) -> i32 "None" {
@@ -38,7 +38,7 @@ spirv.func @non_uniform_iadd(%arg0: i32) -> i32 "None" {
3838
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i32
3939
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i32
4040
// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i32
41-
// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFAddiifj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {no_unwind, will_return} : (i32, i32, f32, i32) -> f32
41+
// 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) -> f32
4242
// CHECK: llvm.return %[[VAL_4]] : f32
4343
// CHECK: }
4444
spirv.func @non_uniform_fadd(%arg0: f32) -> f32 "None" {
@@ -52,7 +52,7 @@ spirv.func @non_uniform_fadd(%arg0: f32) -> f32 "None" {
5252
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i32
5353
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i32
5454
// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i32
55-
// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformIMuliijj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {no_unwind, will_return} : (i32, i32, i32, i32) -> i32
55+
// 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) -> i32
5656
// CHECK: llvm.return %[[VAL_4]] : i32
5757
// CHECK: }
5858
spirv.func @non_uniform_imul(%arg0: i32) -> i32 "None" {
@@ -65,7 +65,7 @@ spirv.func @non_uniform_imul(%arg0: i32) -> i32 "None" {
6565
// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {
6666
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
6767
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
68-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMuliif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, f32) -> f32
68+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMuliif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32
6969
// CHECK: llvm.return %[[VAL_3]] : f32
7070
// CHECK: }
7171
spirv.func @non_uniform_fmul(%arg0: f32) -> f32 "None" {
@@ -77,7 +77,7 @@ spirv.func @non_uniform_fmul(%arg0: f32) -> f32 "None" {
7777
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
7878
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
7979
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
80-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
80+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
8181
// CHECK: llvm.return %[[VAL_3]] : i32
8282
// CHECK: }
8383
spirv.func @non_uniform_smin(%arg0: i32) -> i32 "None" {
@@ -89,7 +89,7 @@ spirv.func @non_uniform_smin(%arg0: i32) -> i32 "None" {
8989
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
9090
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
9191
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
92-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformUMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
92+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformUMiniij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
9393
// CHECK: llvm.return %[[VAL_3]] : i32
9494
// CHECK: }
9595
spirv.func @non_uniform_umin(%arg0: i32) -> i32 "None" {
@@ -101,7 +101,7 @@ spirv.func @non_uniform_umin(%arg0: i32) -> i32 "None" {
101101
// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {
102102
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
103103
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
104-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMiniif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, f32) -> f32
104+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMiniif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32
105105
// CHECK: llvm.return %[[VAL_3]] : f32
106106
// CHECK: }
107107
spirv.func @non_uniform_fmin(%arg0: f32) -> f32 "None" {
@@ -114,7 +114,7 @@ spirv.func @non_uniform_fmin(%arg0: f32) -> f32 "None" {
114114
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i32
115115
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i32
116116
// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i32
117-
// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMiniifj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {no_unwind, will_return} : (i32, i32, f32, i32) -> f32
117+
// 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) -> f32
118118
// CHECK: llvm.return %[[VAL_4]] : f32
119119
// CHECK: }
120120
spirv.func @non_uniform_fmin_cluster(%arg0: f32) -> f32 "None" {
@@ -127,7 +127,7 @@ spirv.func @non_uniform_fmin_cluster(%arg0: f32) -> f32 "None" {
127127
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
128128
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
129129
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
130-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
130+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
131131
// CHECK: llvm.return %[[VAL_3]] : i32
132132
// CHECK: }
133133
spirv.func @non_uniform_smax(%arg0: i32) -> i32 "None" {
@@ -139,7 +139,7 @@ spirv.func @non_uniform_smax(%arg0: i32) -> i32 "None" {
139139
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
140140
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
141141
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
142-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformUMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
142+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformUMaxiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
143143
// CHECK: llvm.return %[[VAL_3]] : i32
144144
// CHECK: }
145145
spirv.func @non_uniform_umax(%arg0: i32) -> i32 "None" {
@@ -151,7 +151,7 @@ spirv.func @non_uniform_umax(%arg0: i32) -> i32 "None" {
151151
// CHECK-SAME: %[[VAL_0:.*]]: f32) -> f32 {
152152
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
153153
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
154-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMaxiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, f32) -> f32
154+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformFMaxiif(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, f32) -> f32
155155
// CHECK: llvm.return %[[VAL_3]] : f32
156156
// CHECK: }
157157
spirv.func @non_uniform_fmax(%arg0: f32) -> f32 "None" {
@@ -164,7 +164,7 @@ spirv.func @non_uniform_fmax(%arg0: f32) -> f32 "None" {
164164
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(16 : i32) : i32
165165
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(3 : i32) : i32
166166
// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(3 : i32) : i32
167-
// CHECK: %[[VAL_4:.*]] = llvm.call spir_funccc @_Z27__spirv_GroupNonUniformSMaxiijj(%[[VAL_2]], %[[VAL_3]], %[[VAL_0]], %[[VAL_1]]) {no_unwind, will_return} : (i32, i32, i32, i32) -> i32
167+
// 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) -> i32
168168
// CHECK: llvm.return %[[VAL_4]] : i32
169169
// CHECK: }
170170
spirv.func @non_uniform_smax_cluster(%arg0: i32) -> i32 "None" {
@@ -177,7 +177,7 @@ spirv.func @non_uniform_smax_cluster(%arg0: i32) -> i32 "None" {
177177
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
178178
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
179179
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
180-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformBitwiseAndiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
180+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformBitwiseAndiij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
181181
// CHECK: llvm.return %[[VAL_3]] : i32
182182
// CHECK: }
183183
spirv.func @non_uniform_bitwise_and(%arg0: i32) -> i32 "None" {
@@ -189,7 +189,7 @@ spirv.func @non_uniform_bitwise_and(%arg0: i32) -> i32 "None" {
189189
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
190190
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
191191
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
192-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z32__spirv_GroupNonUniformBitwiseOriij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
192+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z32__spirv_GroupNonUniformBitwiseOriij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
193193
// CHECK: llvm.return %[[VAL_3]] : i32
194194
// CHECK: }
195195
spirv.func @non_uniform_bitwise_or(%arg0: i32) -> i32 "None" {
@@ -201,7 +201,7 @@ spirv.func @non_uniform_bitwise_or(%arg0: i32) -> i32 "None" {
201201
// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 {
202202
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
203203
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
204-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformBitwiseXoriij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i32) -> i32
204+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformBitwiseXoriij(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i32) -> i32
205205
// CHECK: llvm.return %[[VAL_3]] : i32
206206
// CHECK: }
207207
spirv.func @non_uniform_bitwise_xor(%arg0: i32) -> i32 "None" {
@@ -213,7 +213,7 @@ spirv.func @non_uniform_bitwise_xor(%arg0: i32) -> i32 "None" {
213213
// CHECK-SAME: %[[VAL_0:.*]]: i1) -> i1 {
214214
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
215215
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
216-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformLogicalAndiib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i1) -> i1
216+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformLogicalAndiib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i1) -> i1
217217
// CHECK: llvm.return %[[VAL_3]] : i1
218218
// CHECK: }
219219
spirv.func @non_uniform_logical_and(%arg0: i1) -> i1 "None" {
@@ -225,7 +225,7 @@ spirv.func @non_uniform_logical_and(%arg0: i1) -> i1 "None" {
225225
// CHECK-SAME: %[[VAL_0:.*]]: i1) -> i1 {
226226
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
227227
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
228-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z32__spirv_GroupNonUniformLogicalOriib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i1) -> i1
228+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z32__spirv_GroupNonUniformLogicalOriib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i1) -> i1
229229
// CHECK: llvm.return %[[VAL_3]] : i1
230230
// CHECK: }
231231
spirv.func @non_uniform_logical_or(%arg0: i1) -> i1 "None" {
@@ -237,7 +237,7 @@ spirv.func @non_uniform_logical_or(%arg0: i1) -> i1 "None" {
237237
// CHECK-SAME: %[[VAL_0:.*]]: i1) -> i1 {
238238
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(3 : i32) : i32
239239
// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(0 : i32) : i32
240-
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformLogicalXoriib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {no_unwind, will_return} : (i32, i32, i1) -> i1
240+
// CHECK: %[[VAL_3:.*]] = llvm.call spir_funccc @_Z33__spirv_GroupNonUniformLogicalXoriib(%[[VAL_1]], %[[VAL_2]], %[[VAL_0]]) {convergent, no_unwind, will_return} : (i32, i32, i1) -> i1
241241
// CHECK: llvm.return %[[VAL_3]] : i1
242242
// CHECK: }
243243
spirv.func @non_uniform_logical_xor(%arg0: i1) -> i1 "None" {

0 commit comments

Comments
 (0)