@@ -112,7 +112,7 @@ gpu.module @test_module_3 {
112
112
113
113
gpu.module @test_module_4 {
114
114
// CHECK-LABEL: func @gpu_shuffle()
115
- func.func @gpu_shuffle () -> (f32 , f32 , f32 , f32 ) {
115
+ func.func @gpu_shuffle () -> (f32 , f32 , f32 , f32 , i1 , i1 , i1 , i1 ) {
116
116
// CHECK: %[[#VALUE:]] = llvm.mlir.constant(1.000000e+00 : f32) : f32
117
117
%arg0 = arith.constant 1.0 : f32
118
118
// CHECK: %[[#OFFSET:]] = llvm.mlir.constant(4 : i32) : i32
@@ -143,11 +143,41 @@ gpu.module @test_module_4 {
143
143
// CHECK: nvvm.shfl.sync idx {{.*}} {return_value_and_is_valid} : f32 -> !llvm.struct<(f32, i1)>
144
144
%shfli , %predi = gpu.shuffle idx %arg0 , %arg1 , %arg2 : f32
145
145
146
- func.return %shfl , %shflu , %shfld , %shfli : f32 , f32 ,f32 , f32
146
+ func.return %shfl , %shflu , %shfld , %shfli , %pred , %predu , %predd , %predi
147
+ : f32 , f32 ,f32 , f32 , i1 , i1 , i1 , i1
147
148
}
148
- }
149
149
150
+ // CHECK-LABEL: func @gpu_shuffle_unused_pred()
151
+ func.func @gpu_shuffle_unused_pred () -> (f32 , f32 , f32 , f32 ) {
152
+ // CHECK: %[[#VALUE:]] = llvm.mlir.constant(1.000000e+00 : f32) : f32
153
+ %arg0 = arith.constant 1.0 : f32
154
+ // CHECK: %[[#OFFSET:]] = llvm.mlir.constant(4 : i32) : i32
155
+ %arg1 = arith.constant 4 : i32
156
+ // CHECK: %[[#WIDTH:]] = llvm.mlir.constant(23 : i32) : i32
157
+ %arg2 = arith.constant 23 : i32
158
+ // CHECK: %[[#ONE:]] = llvm.mlir.constant(1 : i32) : i32
159
+ // CHECK: %[[#MINUS_ONE:]] = llvm.mlir.constant(-1 : i32) : i32
160
+ // CHECK: %[[#THIRTY_TWO:]] = llvm.mlir.constant(32 : i32) : i32
161
+ // CHECK: %[[#NUM_LANES:]] = llvm.sub %[[#THIRTY_TWO]], %[[#WIDTH]] : i32
162
+ // CHECK: %[[#MASK:]] = llvm.lshr %[[#MINUS_ONE]], %[[#NUM_LANES]] : i32
163
+ // CHECK: %[[#CLAMP:]] = llvm.sub %[[#WIDTH]], %[[#ONE]] : i32
164
+ // CHECK: %[[#SHFL:]] = nvvm.shfl.sync bfly %[[#MASK]], %[[#VALUE]], %[[#OFFSET]], %[[#CLAMP]] : f32 -> f32
165
+ %shfl , %pred = gpu.shuffle xor %arg0 , %arg1 , %arg2 : f32
166
+ // CHECK: %[[#ONE:]] = llvm.mlir.constant(1 : i32) : i32
167
+ // CHECK: %[[#MINUS_ONE:]] = llvm.mlir.constant(-1 : i32) : i32
168
+ // CHECK: %[[#THIRTY_TWO:]] = llvm.mlir.constant(32 : i32) : i32
169
+ // CHECK: %[[#NUM_LANES:]] = llvm.sub %[[#THIRTY_TWO]], %[[#WIDTH]] : i32
170
+ // CHECK: %[[#MASK:]] = llvm.lshr %[[#MINUS_ONE]], %[[#NUM_LANES]] : i32
171
+ // CHECK: %[[#SHFL:]] = nvvm.shfl.sync up %[[#MASK]], %[[#VALUE]], %[[#OFFSET]], %[[#NUM_LANES]] : f32 -> f32
172
+ %shflu , %predu = gpu.shuffle up %arg0 , %arg1 , %arg2 : f32
173
+ // CHECK: nvvm.shfl.sync down {{.*}} : f32 -> f32
174
+ %shfld , %predd = gpu.shuffle down %arg0 , %arg1 , %arg2 : f32
175
+ // CHECK: nvvm.shfl.sync idx {{.*}} : f32 -> f32
176
+ %shfli , %predi = gpu.shuffle idx %arg0 , %arg1 , %arg2 : f32
150
177
178
+ func.return %shfl , %shflu , %shfld , %shfli : f32 , f32 ,f32 , f32
179
+ }
180
+ }
151
181
152
182
gpu.module @test_module_5 {
153
183
// CHECK-LABEL: func @gpu_sync()
0 commit comments