@@ -8,11 +8,13 @@ target triple = "amdgcn-amd-amdhsa"
8
8
@ReachableKernel = internal addrspace (3 ) global i32 3 , align 4
9
9
@UnreachableKernel = internal addrspace (3 ) global i32 42 , align 4
10
10
@ReachableKernelAS0 = internal global i32 7 , align 4
11
+ @AS3OneKernelAtATime = internal addrspace (3 ) global i32 42 , align 4
11
12
12
13
;.
13
14
; CHECK: @[[REACHABLEKERNEL:[a-zA-Z0-9_$"\\.-]+]] = internal addrspace(3) global i32 3, align 4
14
15
; CHECK: @[[UNREACHABLEKERNEL:[a-zA-Z0-9_$"\\.-]+]] = internal addrspace(3) global i32 42, align 4
15
16
; CHECK: @[[REACHABLEKERNELAS0:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 7, align 4
17
+ ; CHECK: @[[AS3ONEKERNELATATIME:[a-zA-Z0-9_$"\\.-]+]] = internal addrspace(3) global i32 42, align 4
16
18
; CHECK: @[[REACHABLENONKERNEL:[a-zA-Z0-9_$"\\.-]+]] = internal addrspace(3) global i32 0, align 4
17
19
; CHECK: @[[UNREACHABLENONKERNEL:[a-zA-Z0-9_$"\\.-]+]] = internal addrspace(3) global i32 0, align 4
18
20
;.
@@ -354,6 +356,79 @@ entry:
354
356
ret void
355
357
}
356
358
359
+ define dso_local void @kernel2 (i32 %C ) norecurse "kernel" {
360
+ ; TUNIT: Function Attrs: norecurse nosync nounwind
361
+ ; TUNIT-LABEL: define {{[^@]+}}@kernel2
362
+ ; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {
363
+ ; TUNIT-NEXT: [[I:%.*]] = icmp eq i32 [[C]], 42
364
+ ; TUNIT-NEXT: br i1 [[I]], label [[T:%.*]], label [[F:%.*]]
365
+ ; TUNIT: t:
366
+ ; TUNIT-NEXT: store i32 333, ptr addrspace(3) @AS3OneKernelAtATime, align 4
367
+ ; TUNIT-NEXT: br label [[F]]
368
+ ; TUNIT: f:
369
+ ; TUNIT-NEXT: [[L:%.*]] = load i32, ptr addrspace(3) @AS3OneKernelAtATime, align 4
370
+ ; TUNIT-NEXT: call void @use(i32 noundef [[L]], i32 noundef [[L]], i32 noundef [[L]]) #[[ATTR7]]
371
+ ; TUNIT-NEXT: ret void
372
+ ;
373
+ ; CGSCC: Function Attrs: norecurse nosync nounwind
374
+ ; CGSCC-LABEL: define {{[^@]+}}@kernel2
375
+ ; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {
376
+ ; CGSCC-NEXT: [[I:%.*]] = icmp eq i32 [[C]], 42
377
+ ; CGSCC-NEXT: br i1 [[I]], label [[T:%.*]], label [[F:%.*]]
378
+ ; CGSCC: t:
379
+ ; CGSCC-NEXT: store i32 333, ptr addrspace(3) @AS3OneKernelAtATime, align 4
380
+ ; CGSCC-NEXT: br label [[F]]
381
+ ; CGSCC: f:
382
+ ; CGSCC-NEXT: [[L:%.*]] = load i32, ptr addrspace(3) @AS3OneKernelAtATime, align 4
383
+ ; CGSCC-NEXT: call void @use(i32 noundef [[L]], i32 noundef [[L]], i32 noundef [[L]]) #[[ATTR4]]
384
+ ; CGSCC-NEXT: ret void
385
+ ;
386
+ %i = icmp eq i32 %C , 42
387
+ br i1 %i , label %t , label %f
388
+ t:
389
+ store i32 333 , ptr addrspace (3 ) @AS3OneKernelAtATime
390
+ br label %f
391
+ f:
392
+ %l = load i32 , ptr addrspace (3 ) @AS3OneKernelAtATime
393
+ call void @use (i32 %l ,i32 %l , i32 %l )
394
+ ret void
395
+ }
396
+
397
+ define dso_local void @kernel3 (i32 %C ) norecurse "kernel" {
398
+ ; TUNIT: Function Attrs: norecurse nosync nounwind
399
+ ; TUNIT-LABEL: define {{[^@]+}}@kernel3
400
+ ; TUNIT-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {
401
+ ; TUNIT-NEXT: [[I:%.*]] = icmp eq i32 [[C]], 42
402
+ ; TUNIT-NEXT: br i1 [[I]], label [[T:%.*]], label [[F:%.*]]
403
+ ; TUNIT: t:
404
+ ; TUNIT-NEXT: [[L:%.*]] = load i32, ptr addrspace(3) @AS3OneKernelAtATime, align 4
405
+ ; TUNIT-NEXT: call void @use(i32 noundef [[L]], i32 noundef [[L]], i32 noundef [[L]]) #[[ATTR7]]
406
+ ; TUNIT-NEXT: ret void
407
+ ; TUNIT: f:
408
+ ; TUNIT-NEXT: ret void
409
+ ;
410
+ ; CGSCC: Function Attrs: norecurse nosync nounwind
411
+ ; CGSCC-LABEL: define {{[^@]+}}@kernel3
412
+ ; CGSCC-SAME: (i32 [[C:%.*]]) #[[ATTR0]] {
413
+ ; CGSCC-NEXT: [[I:%.*]] = icmp eq i32 [[C]], 42
414
+ ; CGSCC-NEXT: br i1 [[I]], label [[T:%.*]], label [[F:%.*]]
415
+ ; CGSCC: t:
416
+ ; CGSCC-NEXT: [[L:%.*]] = load i32, ptr addrspace(3) @AS3OneKernelAtATime, align 4
417
+ ; CGSCC-NEXT: call void @use(i32 noundef [[L]], i32 noundef [[L]], i32 noundef [[L]]) #[[ATTR4]]
418
+ ; CGSCC-NEXT: ret void
419
+ ; CGSCC: f:
420
+ ; CGSCC-NEXT: ret void
421
+ ;
422
+ %i = icmp eq i32 %C , 42
423
+ br i1 %i , label %t , label %f
424
+ t:
425
+ %l = load i32 , ptr addrspace (3 ) @AS3OneKernelAtATime
426
+ call void @use (i32 %l ,i32 %l , i32 %l )
427
+ ret void
428
+ f:
429
+ ret void
430
+ }
431
+
357
432
declare dso_local void @use (i32 , i32 , i32 ) nosync norecurse nounwind
358
433
359
434
;.
0 commit comments