@@ -54,12 +54,41 @@ func.func @launch() {
54
54
// CHECK-NEXT: %[[BDIM:.*]] = gpu.block_dim x
55
55
// CHECK-NEXT: = gpu.block_dim y
56
56
// CHECK-NEXT: = gpu.block_dim z
57
- // CHECK-NEXT: cf.br ^[[BLOCK:.*]]
58
- // CHECK-NEXT: ^[[BLOCK]]:
59
57
// CHECK-NEXT: "use"(%[[KERNEL_ARG0]]) : (f32) -> ()
60
58
// CHECK-NEXT: "some_op"(%[[BID]], %[[BDIM]]) : (index, index) -> ()
61
59
// CHECK-NEXT: = memref.load %[[KERNEL_ARG1]][%[[TID]]] : memref<?xf32, 1>
62
60
61
+ // -----
62
+
63
+ // Verify that we can outline a CFG
64
+ // CHECK-LABEL: gpu.func @launchCFG_kernel(
65
+ // CHECK: cf.br
66
+ // CHECK: gpu.return
67
+ func.func @launchCFG () {
68
+ %0 = " op" () : () -> (f32 )
69
+ %1 = " op" () : () -> (memref <?xf32 , 1 >)
70
+ %gDimX = arith.constant 8 : index
71
+ %gDimY = arith.constant 12 : index
72
+ %gDimZ = arith.constant 16 : index
73
+ %bDimX = arith.constant 20 : index
74
+ %bDimY = arith.constant 24 : index
75
+ %bDimZ = arith.constant 28 : index
76
+
77
+ gpu.launch blocks (%bx , %by , %bz ) in (%grid_x = %gDimX , %grid_y = %gDimY ,
78
+ %grid_z = %gDimZ )
79
+ threads (%tx , %ty , %tz ) in (%block_x = %bDimX , %block_y = %bDimY ,
80
+ %block_z = %bDimZ ) {
81
+ " use" (%0 ): (f32 ) -> ()
82
+ cf.br ^bb1
83
+ ^bb1 :
84
+ " some_op" (%bx , %block_x ) : (index , index ) -> ()
85
+ %42 = memref.load %1 [%tx ] : memref <?xf32 , 1 >
86
+ gpu.terminator
87
+ }
88
+ return
89
+ }
90
+
91
+
63
92
// -----
64
93
65
94
// This test checks gpu-out-lining can handle gpu.launch kernel from an llvm.func
@@ -475,8 +504,6 @@ func.func @launch_cluster() {
475
504
// CHECK-NEXT: %[[CDIM:.*]] = gpu.cluster_dim x
476
505
// CHECK-NEXT: = gpu.cluster_dim y
477
506
// CHECK-NEXT: = gpu.cluster_dim z
478
- // CHECK-NEXT: cf.br ^[[BLOCK:.*]]
479
- // CHECK-NEXT: ^[[BLOCK]]:
480
507
// CHECK-NEXT: "use"(%[[KERNEL_ARG0]]) : (f32) -> ()
481
508
// CHECK-NEXT: "some_op"(%[[CID]], %[[BID]], %[[BDIM]]) : (index, index, index) -> ()
482
509
// CHECK-NEXT: = memref.load %[[KERNEL_ARG1]][%[[TID]]] : memref<?xf32, 1>
0 commit comments