| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 5 |
| ; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -passes=amdgpu-attributor %s -o - | FileCheck %s |
| |
| declare void @unknown() |
| |
| ; fixed_cluster_dims_0 is only used by fixed_cluster_dims_1 that is expected to |
| ; have fixed dims. |
| define internal void @fixed_cluster_dims_before_0() { |
| ; CHECK-LABEL: define internal void @fixed_cluster_dims_before_0( |
| ; CHECK-SAME: ) #[[ATTR1:[0-9]+]] { |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown() |
| ret void |
| } |
| |
| ; fixed_cluster_dims_1 is used by two kernels with the same cluster dims. |
| define internal void @fixed_cluster_dims_1() { |
| ; CHECK-LABEL: define internal void @fixed_cluster_dims_1( |
| ; CHECK-SAME: ) #[[ATTR1]] { |
| ; CHECK-NEXT: call void @fixed_cluster_dims_before_0() |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @fixed_cluster_dims_before_0() |
| call void @unknown() |
| ret void |
| } |
| |
| ; no_cluster_dims_0 is only used by no_cluster_dims_1 that is expected to not use |
| ; cluster. |
| define internal void @no_cluster_dims_0() { |
| ; CHECK-LABEL: define internal void @no_cluster_dims_0( |
| ; CHECK-SAME: ) #[[ATTR2:[0-9]+]] { |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown() |
| ret void |
| } |
| |
| ; no_cluster_dims_1 is used by two kernels that don't use cluster. |
| define internal void @no_cluster_dims_1() { |
| ; CHECK-LABEL: define internal void @no_cluster_dims_1( |
| ; CHECK-SAME: ) #[[ATTR2]] { |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: call void @no_cluster_dims_0() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown() |
| call void @no_cluster_dims_0() |
| ret void |
| } |
| |
| ; non_fixed_cluster_dims is used by two kernels with different cluster dims, so |
| ; it will use cluster but cluster dims is unknown. |
| define internal void @non_fixed_cluster_dims() { |
| ; CHECK-LABEL: define internal void @non_fixed_cluster_dims( |
| ; CHECK-SAME: ) #[[ATTR3:[0-9]+]] { |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown() |
| ret void |
| } |
| |
| ; unknown_cluster_dims is used by a kernel that uses cluster and another one that |
| ; doesn't use cluster, so it is unknown that whether cluster is used or not. |
| define internal void @unknown_cluster_dims() { |
| ; CHECK-LABEL: define internal void @unknown_cluster_dims( |
| ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown() |
| ret void |
| } |
| |
| ; unknown_cluster_use is used by a kernel that we don't know whether cluster will |
| ; be used or not (because it doesn't have any attribute), so it is unknown that |
| ; whether cluster is used or not. |
| define internal void @unknown_cluster_use() { |
| ; CHECK-LABEL: define internal void @unknown_cluster_use( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown() |
| ret void |
| } |
| |
| ; unknown_call_site has unknown call site, so it is unknown that whether cluster |
| ; is used or not. |
| define void @unknown_call_site() { |
| ; CHECK-LABEL: define void @unknown_call_site( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: call void @unknown() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown() |
| ret void |
| } |
| |
| define amdgpu_kernel void @cluster_kernel_0() #0 { |
| ; CHECK-LABEL: define amdgpu_kernel void @cluster_kernel_0( |
| ; CHECK-SAME: ) #[[ATTR1]] { |
| ; CHECK-NEXT: call void @fixed_cluster_dims_1() |
| ; CHECK-NEXT: call void @non_fixed_cluster_dims() |
| ; CHECK-NEXT: call void @unknown_cluster_dims() |
| ; CHECK-NEXT: call void @unknown_call_site() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @fixed_cluster_dims_1() |
| call void @non_fixed_cluster_dims() |
| call void @unknown_cluster_dims() |
| call void @unknown_call_site() |
| ret void |
| } |
| |
| define amdgpu_kernel void @cluster_kernel_0_1() #0 { |
| ; CHECK-LABEL: define amdgpu_kernel void @cluster_kernel_0_1( |
| ; CHECK-SAME: ) #[[ATTR1]] { |
| ; CHECK-NEXT: call void @fixed_cluster_dims_1() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @fixed_cluster_dims_1() |
| ret void |
| } |
| |
| define amdgpu_kernel void @cluster_kernel_1() #1 { |
| ; CHECK-LABEL: define amdgpu_kernel void @cluster_kernel_1( |
| ; CHECK-SAME: ) #[[ATTR4:[0-9]+]] { |
| ; CHECK-NEXT: call void @non_fixed_cluster_dims() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @non_fixed_cluster_dims() |
| ret void |
| } |
| |
| define amdgpu_kernel void @no_cluster_kernel() #2 { |
| ; CHECK-LABEL: define amdgpu_kernel void @no_cluster_kernel( |
| ; CHECK-SAME: ) #[[ATTR2]] { |
| ; CHECK-NEXT: call void @no_cluster_dims_1() |
| ; CHECK-NEXT: call void @unknown_cluster_dims() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @no_cluster_dims_1() |
| call void @unknown_cluster_dims() |
| ret void |
| } |
| |
| define amdgpu_kernel void @no_cluster_kernel_1() #2 { |
| ; CHECK-LABEL: define amdgpu_kernel void @no_cluster_kernel_1( |
| ; CHECK-SAME: ) #[[ATTR2]] { |
| ; CHECK-NEXT: call void @no_cluster_dims_1() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @no_cluster_dims_1() |
| ret void |
| } |
| |
| define amdgpu_kernel void @unknown_cluster_use_kernel() { |
| ; CHECK-LABEL: define amdgpu_kernel void @unknown_cluster_use_kernel( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: call void @unknown_cluster_use() |
| ; CHECK-NEXT: ret void |
| ; |
| call void @unknown_cluster_use() |
| ret void |
| } |
| |
| attributes #0 = { "amdgpu-cluster-dims"="2,2,2" } |
| attributes #1 = { "amdgpu-cluster-dims"="1,2,1" } |
| attributes #2 = { "amdgpu-cluster-dims"="0,0,0" } |
| ;. |
| ; CHECK: attributes #[[ATTR0]] = { "target-cpu"="gfx1250" "uniform-work-group-size"="false" } |
| ; CHECK: attributes #[[ATTR1]] = { "amdgpu-cluster-dims"="2,2,2" "target-cpu"="gfx1250" "uniform-work-group-size"="false" } |
| ; CHECK: attributes #[[ATTR2]] = { "amdgpu-cluster-dims"="0,0,0" "target-cpu"="gfx1250" "uniform-work-group-size"="false" } |
| ; CHECK: attributes #[[ATTR3]] = { "amdgpu-cluster-dims"="1024,1024,1024" "target-cpu"="gfx1250" "uniform-work-group-size"="false" } |
| ; CHECK: attributes #[[ATTR4]] = { "amdgpu-cluster-dims"="1,2,1" "target-cpu"="gfx1250" "uniform-work-group-size"="false" } |
| ;. |