@@ -181,7 +181,7 @@ define amdgpu_kernel void @kernel_calls_extern() {
181
181
define amdgpu_kernel void @kernel_calls_extern_marked_callsite () {
182
182
; CHECK-LABEL: define amdgpu_kernel void @kernel_calls_extern_marked_callsite(
183
183
; CHECK-SAME: ) #[[ATTR1]] {
184
- ; CHECK-NEXT: call void @unknown() #[[ATTR5 :[0-9]+]]
184
+ ; CHECK-NEXT: call void @unknown() #[[ATTR10 :[0-9]+]]
185
185
; CHECK-NEXT: call void @use_most()
186
186
; CHECK-NEXT: ret void
187
187
;
@@ -205,7 +205,7 @@ define amdgpu_kernel void @kernel_calls_indirect(ptr %indirect) {
205
205
define amdgpu_kernel void @kernel_calls_indirect_marked_callsite (ptr %indirect ) {
206
206
; CHECK-LABEL: define amdgpu_kernel void @kernel_calls_indirect_marked_callsite(
207
207
; CHECK-SAME: ptr [[INDIRECT:%.*]]) #[[ATTR1]] {
208
- ; CHECK-NEXT: call void [[INDIRECT]]() #[[ATTR5 ]]
208
+ ; CHECK-NEXT: call void [[INDIRECT]]() #[[ATTR10 ]]
209
209
; CHECK-NEXT: call void @use_most()
210
210
; CHECK-NEXT: ret void
211
211
;
@@ -701,12 +701,93 @@ define amdgpu_kernel void @align2_align4_virtreg() {
701
701
ret void
702
702
}
703
703
704
+ define amdgpu_kernel void @kernel_uses_write_register_a55 () {
705
+ ; CHECK-LABEL: define amdgpu_kernel void @kernel_uses_write_register_a55(
706
+ ; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {
707
+ ; CHECK-NEXT: call void @llvm.write_register.i32(metadata !"a55", i32 0)
708
+ ; CHECK-NEXT: ret void
709
+ ;
710
+ call void @llvm.write_register.i64 (metadata !"a55" , i32 0 )
711
+ ret void
712
+ }
713
+
714
+ define amdgpu_kernel void @kernel_uses_write_register_v55 () {
715
+ ; CHECK-LABEL: define amdgpu_kernel void @kernel_uses_write_register_v55(
716
+ ; CHECK-SAME: ) #[[ATTR4:[0-9]+]] {
717
+ ; CHECK-NEXT: call void @llvm.write_register.i32(metadata !"v55", i32 0)
718
+ ; CHECK-NEXT: ret void
719
+ ;
720
+ call void @llvm.write_register.i64 (metadata !"v55" , i32 0 )
721
+ ret void
722
+ }
723
+
724
+ define amdgpu_kernel void @kernel_uses_write_register_a55_57 () {
725
+ ; CHECK-LABEL: define amdgpu_kernel void @kernel_uses_write_register_a55_57(
726
+ ; CHECK-SAME: ) #[[ATTR3]] {
727
+ ; CHECK-NEXT: call void @llvm.write_register.i96(metadata !"a[55:57]", i96 0)
728
+ ; CHECK-NEXT: ret void
729
+ ;
730
+ call void @llvm.write_register.i64 (metadata !"a[55:57]" , i96 0 )
731
+ ret void
732
+ }
733
+
734
+ define amdgpu_kernel void @kernel_uses_read_register_a55 (ptr addrspace (1 ) %ptr ) {
735
+ ; CHECK-LABEL: define amdgpu_kernel void @kernel_uses_read_register_a55(
736
+ ; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR3]] {
737
+ ; CHECK-NEXT: [[REG:%.*]] = call i32 @llvm.read_register.i32(metadata !"a55")
738
+ ; CHECK-NEXT: store i32 [[REG]], ptr addrspace(1) [[PTR]], align 4
739
+ ; CHECK-NEXT: ret void
740
+ ;
741
+ %reg = call i32 @llvm.read_register.i64 (metadata !"a55" )
742
+ store i32 %reg , ptr addrspace (1 ) %ptr
743
+ ret void
744
+ }
745
+
746
+ define amdgpu_kernel void @kernel_uses_read_volatile_register_a55 (ptr addrspace (1 ) %ptr ) {
747
+ ; CHECK-LABEL: define amdgpu_kernel void @kernel_uses_read_volatile_register_a55(
748
+ ; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR3]] {
749
+ ; CHECK-NEXT: [[REG:%.*]] = call i32 @llvm.read_volatile_register.i32(metadata !"a55")
750
+ ; CHECK-NEXT: store i32 [[REG]], ptr addrspace(1) [[PTR]], align 4
751
+ ; CHECK-NEXT: ret void
752
+ ;
753
+ %reg = call i32 @llvm.read_volatile_register.i64 (metadata !"a55" )
754
+ store i32 %reg , ptr addrspace (1 ) %ptr
755
+ ret void
756
+ }
757
+
758
+ define amdgpu_kernel void @kernel_uses_read_register_a56_59 (ptr addrspace (1 ) %ptr ) {
759
+ ; CHECK-LABEL: define amdgpu_kernel void @kernel_uses_read_register_a56_59(
760
+ ; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR3]] {
761
+ ; CHECK-NEXT: [[REG:%.*]] = call i128 @llvm.read_register.i128(metadata !"a[56:59]")
762
+ ; CHECK-NEXT: store i128 [[REG]], ptr addrspace(1) [[PTR]], align 8
763
+ ; CHECK-NEXT: ret void
764
+ ;
765
+ %reg = call i128 @llvm.read_register.i64 (metadata !"a[56:59]" )
766
+ store i128 %reg , ptr addrspace (1 ) %ptr
767
+ ret void
768
+ }
769
+
770
+ define amdgpu_kernel void @kernel_uses_write_register_out_of_bounds_a256 () {
771
+ ; CHECK-LABEL: define amdgpu_kernel void @kernel_uses_write_register_out_of_bounds_a256(
772
+ ; CHECK-SAME: ) #[[ATTR3]] {
773
+ ; CHECK-NEXT: call void @llvm.write_register.i32(metadata !"a256", i32 0)
774
+ ; CHECK-NEXT: ret void
775
+ ;
776
+ call void @llvm.write_register.i64 (metadata !"a256" , i32 0 )
777
+ ret void
778
+ }
779
+
704
780
attributes #0 = { "amdgpu-agpr-alloc" ="0" }
705
781
;.
706
782
; CHECK: attributes #[[ATTR0]] = { "amdgpu-agpr-alloc"="0" "target-cpu"="gfx90a" "uniform-work-group-size"="false" }
707
783
; CHECK: attributes #[[ATTR1]] = { "target-cpu"="gfx90a" "uniform-work-group-size"="false" }
708
784
; CHECK: attributes #[[ATTR2:[0-9]+]] = { convergent nocallback nofree nosync nounwind willreturn memory(none) "target-cpu"="gfx90a" }
709
- ; CHECK: attributes #[[ATTR3:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) "target-cpu"="gfx90a" }
710
- ; CHECK: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: readwrite) "target-cpu"="gfx90a" }
711
- ; CHECK: attributes #[[ATTR5]] = { "amdgpu-agpr-alloc"="0" }
785
+ ; CHECK: attributes #[[ATTR3]] = { "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx90a" "uniform-work-group-size"="false" }
786
+ ; CHECK: attributes #[[ATTR4]] = { "amdgpu-agpr-alloc"="0" "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx90a" "uniform-work-group-size"="false" }
787
+ ; CHECK: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) "target-cpu"="gfx90a" }
788
+ ; CHECK: attributes #[[ATTR6:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: readwrite) "target-cpu"="gfx90a" }
789
+ ; CHECK: attributes #[[ATTR7:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(read) "target-cpu"="gfx90a" }
790
+ ; CHECK: attributes #[[ATTR8:[0-9]+]] = { nounwind "target-cpu"="gfx90a" }
791
+ ; CHECK: attributes #[[ATTR9:[0-9]+]] = { nocallback nounwind "target-cpu"="gfx90a" }
792
+ ; CHECK: attributes #[[ATTR10]] = { "amdgpu-agpr-alloc"="0" }
712
793
;.
0 commit comments