Skip to content

Commit 37c1083

Browse files
committed
Add test with convergence tokens
1 parent 2fede9c commit 37c1083

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

llvm/test/Transforms/InstCombine/AMDGPU/bitcast-fold-lane-ops.ll

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,22 @@ define i32 @test_bitcast_update_dpp_f32_to_i32(float %val0, float %val1) {
256256
ret i32 %dpp
257257
}
258258

259+
define i32 @test_bitcast_update_dpp_f32_to_i32_convergencetoken(float %val0, float %val1) convergent {
260+
; CHECK-LABEL: define i32 @test_bitcast_update_dpp_f32_to_i32_convergencetoken(
261+
; CHECK-SAME: float [[VAL0:%.*]], float [[VAL1:%.*]]) #[[ATTR1:[0-9]+]] {
262+
; CHECK-NEXT: [[T:%.*]] = call token @llvm.experimental.convergence.entry()
263+
; CHECK-NEXT: [[BITCAST0:%.*]] = bitcast float [[VAL0]] to i32
264+
; CHECK-NEXT: [[BITCAST1:%.*]] = bitcast float [[VAL1]] to i32
265+
; CHECK-NEXT: [[DPP:%.*]] = call i32 @llvm.amdgcn.update.dpp.i32(i32 [[BITCAST0]], i32 [[BITCAST1]], i32 1, i32 1, i32 1, i1 false) [ "convergencectrl"(token [[T]]) ]
266+
; CHECK-NEXT: ret i32 [[DPP]]
267+
;
268+
%t = call token @llvm.experimental.convergence.entry()
269+
%bitcast0 = bitcast float %val0 to i32
270+
%bitcast1 = bitcast float %val1 to i32
271+
%dpp = call i32 @llvm.amdgcn.update.dpp.i32(i32 %bitcast0, i32 %bitcast1, i32 1, i32 1, i32 1, i1 false) [ "convergencectrl"(token %t) ]
272+
ret i32 %dpp
273+
}
274+
259275
define i32 @test_bitcast_update_dpp_sources_different_type(float %val0, <2 x half> %val1) {
260276
; CHECK-LABEL: define i32 @test_bitcast_update_dpp_sources_different_type(
261277
; CHECK-SAME: float [[VAL0:%.*]], <2 x half> [[VAL1:%.*]]) #[[ATTR0]] {
@@ -269,3 +285,31 @@ define i32 @test_bitcast_update_dpp_sources_different_type(float %val0, <2 x hal
269285
%dpp = call i32 @llvm.amdgcn.update.dpp.i32(i32 %bitcast0, i32 %bitcast1, i32 1, i32 1, i32 1, i1 false)
270286
ret i32 %dpp
271287
}
288+
289+
define i32 @test_bitcast_f32_to_i32_readfirstlane_convergencetoken(float %val) convergent {
290+
; CHECK-LABEL: define i32 @test_bitcast_f32_to_i32_readfirstlane_convergencetoken(
291+
; CHECK-SAME: float [[VAL:%.*]]) #[[ATTR1]] {
292+
; CHECK-NEXT: [[T:%.*]] = call token @llvm.experimental.convergence.entry()
293+
; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
294+
; CHECK-NEXT: [[RESULT:%.*]] = call i32 @llvm.amdgcn.readfirstlane.i32(i32 [[BITCAST]]) [ "convergencectrl"(token [[T]]) ]
295+
; CHECK-NEXT: ret i32 [[RESULT]]
296+
;
297+
%t = call token @llvm.experimental.convergence.entry()
298+
%bitcast = bitcast float %val to i32
299+
%result = call i32 @llvm.amdgcn.readfirstlane.i32(i32 %bitcast) [ "convergencectrl"(token %t) ]
300+
ret i32 %result
301+
}
302+
303+
define i32 @test_bitcast_f32_to_i32_readlane_convergencetoken(float %val, i32 inreg %lane.index) convergent {
304+
; CHECK-LABEL: define i32 @test_bitcast_f32_to_i32_readlane_convergencetoken(
305+
; CHECK-SAME: float [[VAL:%.*]], i32 inreg [[LANE_INDEX:%.*]]) #[[ATTR1]] {
306+
; CHECK-NEXT: [[T:%.*]] = call token @llvm.experimental.convergence.entry()
307+
; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
308+
; CHECK-NEXT: [[RESULT:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[BITCAST]], i32 [[LANE_INDEX]]) [ "convergencectrl"(token [[T]]) ]
309+
; CHECK-NEXT: ret i32 [[RESULT]]
310+
;
311+
%t = call token @llvm.experimental.convergence.entry()
312+
%bitcast = bitcast float %val to i32
313+
%result = call i32 @llvm.amdgcn.readlane.i32(i32 %bitcast, i32 %lane.index) [ "convergencectrl"(token %t) ]
314+
ret i32 %result
315+
}

llvm/test/Transforms/InstCombine/AMDGPU/permlane64.ll

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,17 @@ define i32 @test_bitcast_f32_to_i32_permlane64(float %val) {
2121
ret i32 %result
2222
}
2323

24+
define i32 @test_bitcast_f32_to_i32_permlane64_convergencetokenn(float %val) convergent {
25+
; CHECK-LABEL: @test_bitcast_f32_to_i32_permlane64_convergencetokenn(
26+
; CHECK-NEXT: [[T:%.*]] = call token @llvm.experimental.convergence.entry()
27+
; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL:%.*]] to i32
28+
; CHECK-NEXT: [[RESULT:%.*]] = call i32 @llvm.amdgcn.permlane64.i32(i32 [[BITCAST]]) [ "convergencectrl"(token [[T]]) ]
29+
; CHECK-NEXT: ret i32 [[RESULT]]
30+
;
31+
%t = call token @llvm.experimental.convergence.entry()
32+
%bitcast = bitcast float %val to i32
33+
%result = call i32 @llvm.amdgcn.permlane64.i32(i32 %bitcast) [ "convergencectrl"(token %t) ]
34+
ret i32 %result
35+
}
36+
2437
declare i32 @llvm.amdgcn.permlane64.i32(i32)

0 commit comments

Comments
 (0)