239 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 52; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-attributor %s | FileCheck %s3 4; External call to avoid inferring argument attributes. This makes the5; final attribute groups easier to read6declare void @dummy()7 8define void @extern_callee() {9; CHECK-LABEL: define void @extern_callee(10; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {11; CHECK-NEXT: call void @dummy()12; CHECK-NEXT: ret void13;14 call void @dummy()15 ret void16}17 18define internal void @callee_1_2_3() {19; CHECK-LABEL: define internal void @callee_1_2_3(20; CHECK-SAME: ) #[[ATTR1:[0-9]+]] {21; CHECK-NEXT: call void @dummy()22; CHECK-NEXT: ret void23;24 call void @dummy()25 ret void26}27 28define amdgpu_kernel void @kernel_1_2_3() #0 {29; CHECK-LABEL: define amdgpu_kernel void @kernel_1_2_3(30; CHECK-SAME: ) #[[ATTR1]] {31; CHECK-NEXT: call void @callee_1_2_3()32; CHECK-NEXT: call void @extern_callee()33; CHECK-NEXT: call void @dummy()34; CHECK-NEXT: ret void35;36 call void @callee_1_2_3()37 call void @extern_callee()38 call void @dummy()39 ret void40}41 42attributes #0 = {"amdgpu-max-num-workgroups"="1,2,3"}43 44; -> 100,10,9945define internal void @callee_merge_100_8_32__16_10_99() {46; CHECK-LABEL: define internal void @callee_merge_100_8_32__16_10_99(47; CHECK-SAME: ) #[[ATTR2:[0-9]+]] {48; CHECK-NEXT: call void @dummy()49; CHECK-NEXT: ret void50;51 call void @dummy()52 ret void53}54 55define amdgpu_kernel void @kernel_100_8_32() #1 {56; CHECK-LABEL: define amdgpu_kernel void @kernel_100_8_32(57; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {58; CHECK-NEXT: call void @callee_merge_100_8_32__16_10_99()59; CHECK-NEXT: ret void60;61 call void @callee_merge_100_8_32__16_10_99()62 ret void63}64 65define amdgpu_cs void @amdgpu_cs_100_8_32() #1 {66; CHECK-LABEL: define amdgpu_cs void @amdgpu_cs_100_8_32(67; CHECK-SAME: ) #[[ATTR3]] {68; CHECK-NEXT: call void @callee_merge_100_8_32__16_10_99()69; CHECK-NEXT: ret void70;71 call void @callee_merge_100_8_32__16_10_99()72 ret void73}74 75attributes #1 = {"amdgpu-max-num-workgroups"="100,8,32"}76 77define amdgpu_kernel void @kernel_16_10_99() #2 {78; CHECK-LABEL: define amdgpu_kernel void @kernel_16_10_99(79; CHECK-SAME: ) #[[ATTR4:[0-9]+]] {80; CHECK-NEXT: call void @callee_merge_100_8_32__16_10_99()81; CHECK-NEXT: call void @dummy()82; CHECK-NEXT: ret void83;84 call void @callee_merge_100_8_32__16_10_99()85 call void @dummy()86 ret void87}88 89attributes #2 = {"amdgpu-max-num-workgroups"="16,10,99"}90 91define internal void @merge_to_worst_case() {92; CHECK-LABEL: define internal void @merge_to_worst_case(93; CHECK-SAME: ) #[[ATTR0]] {94; CHECK-NEXT: call void @dummy()95; CHECK-NEXT: ret void96;97 call void @dummy()98 ret void99}100 101define internal void @callee_x_worst_case() {102; CHECK-LABEL: define internal void @callee_x_worst_case(103; CHECK-SAME: ) #[[ATTR0]] {104; CHECK-NEXT: call void @dummy()105; CHECK-NEXT: ret void106;107 call void @dummy()108 ret void109}110 111define amdgpu_kernel void @kernel_x_maximum() #3 {112; CHECK-LABEL: define amdgpu_kernel void @kernel_x_maximum(113; CHECK-SAME: ) #[[ATTR5:[0-9]+]] {114; CHECK-NEXT: call void @merge_to_worst_case()115; CHECK-NEXT: call void @callee_x_worst_case()116; CHECK-NEXT: call void @dummy()117; CHECK-NEXT: ret void118;119 call void @merge_to_worst_case()120 call void @callee_x_worst_case()121 call void @dummy()122 ret void123}124 125attributes #3 = {"amdgpu-max-num-workgroups"="4294967295,1,1"}126 127define amdgpu_kernel void @kernel_y_maximum() #4 {128; CHECK-LABEL: define amdgpu_kernel void @kernel_y_maximum(129; CHECK-SAME: ) #[[ATTR6:[0-9]+]] {130; CHECK-NEXT: call void @merge_to_worst_case()131; CHECK-NEXT: call void @dummy()132; CHECK-NEXT: ret void133;134 call void @merge_to_worst_case()135 call void @dummy()136 ret void137}138 139attributes #4 = {"amdgpu-max-num-workgroups"="1,4294967295,1"}140 141define amdgpu_kernel void @kernel_z_maximum() #5 {142; CHECK-LABEL: define amdgpu_kernel void @kernel_z_maximum(143; CHECK-SAME: ) #[[ATTR7:[0-9]+]] {144; CHECK-NEXT: call void @merge_to_worst_case()145; CHECK-NEXT: call void @dummy()146; CHECK-NEXT: ret void147;148 call void @merge_to_worst_case()149 call void @dummy()150 ret void151}152 153attributes #5 = {"amdgpu-max-num-workgroups"="1,1,4294967295"}154 155; Make sure the attribute isn't lost from the callee.156define internal void @annotated_callee_from_unannotated_kernel() #6 {157; CHECK-LABEL: define internal void @annotated_callee_from_unannotated_kernel(158; CHECK-SAME: ) #[[ATTR8:[0-9]+]] {159; CHECK-NEXT: call void @dummy()160; CHECK-NEXT: ret void161;162 call void @dummy()163 ret void164}165 166attributes #6 = {"amdgpu-max-num-workgroups"="42,99,123"}167 168define amdgpu_kernel void @unannotated_kernel_calls_annotated_callee() {169; CHECK-LABEL: define amdgpu_kernel void @unannotated_kernel_calls_annotated_callee(170; CHECK-SAME: ) #[[ATTR0]] {171; CHECK-NEXT: call void @annotated_callee_from_unannotated_kernel()172; CHECK-NEXT: ret void173;174 call void @annotated_callee_from_unannotated_kernel()175 ret void176}177 178 179define internal void @annotated_callee_merge_caller() #7 {180; CHECK-LABEL: define internal void @annotated_callee_merge_caller(181; CHECK-SAME: ) #[[ATTR9:[0-9]+]] {182; CHECK-NEXT: call void @dummy()183; CHECK-NEXT: ret void184;185 call void @dummy()186 ret void187}188 189attributes #7 = {"amdgpu-max-num-workgroups"="512,256,1024"}190 191define amdgpu_kernel void @call_annotated_callee_merge_caller() #8 {192; CHECK-LABEL: define amdgpu_kernel void @call_annotated_callee_merge_caller(193; CHECK-SAME: ) #[[ATTR10:[0-9]+]] {194; CHECK-NEXT: call void @annotated_callee_merge_caller()195; CHECK-NEXT: ret void196;197 call void @annotated_callee_merge_caller()198 ret void199}200 201attributes #8 = {"amdgpu-max-num-workgroups"="256,128,2048"}202 203define internal void @called_by_explicit_worst_case() {204; CHECK-LABEL: define internal void @called_by_explicit_worst_case(205; CHECK-SAME: ) #[[ATTR0]] {206; CHECK-NEXT: call void @dummy()207; CHECK-NEXT: ret void208;209 call void @dummy()210 ret void211}212 213define amdgpu_kernel void @kernel_explicit_worst_case() #9 {214; CHECK-LABEL: define amdgpu_kernel void @kernel_explicit_worst_case(215; CHECK-SAME: ) #[[ATTR11:[0-9]+]] {216; CHECK-NEXT: call void @called_by_explicit_worst_case()217; CHECK-NEXT: ret void218;219 call void @called_by_explicit_worst_case()220 ret void221}222 223attributes #9 = {"amdgpu-max-num-workgroups"="4294967295,4294967295,4294967295"}224 225;.226; CHECK: attributes #[[ATTR0]] = { "uniform-work-group-size"="false" }227; CHECK: attributes #[[ATTR1]] = { "amdgpu-max-num-workgroups"="1,2,3" "uniform-work-group-size"="false" }228; CHECK: attributes #[[ATTR2]] = { "amdgpu-max-num-workgroups"="100,10,99" "uniform-work-group-size"="false" }229; CHECK: attributes #[[ATTR3]] = { "amdgpu-max-num-workgroups"="100,8,32" "uniform-work-group-size"="false" }230; CHECK: attributes #[[ATTR4]] = { "amdgpu-max-num-workgroups"="16,10,99" "uniform-work-group-size"="false" }231; CHECK: attributes #[[ATTR5]] = { "amdgpu-max-num-workgroups"="4294967295,1,1" "uniform-work-group-size"="false" }232; CHECK: attributes #[[ATTR6]] = { "amdgpu-max-num-workgroups"="1,4294967295,1" "uniform-work-group-size"="false" }233; CHECK: attributes #[[ATTR7]] = { "amdgpu-max-num-workgroups"="1,1,4294967295" "uniform-work-group-size"="false" }234; CHECK: attributes #[[ATTR8]] = { "amdgpu-max-num-workgroups"="42,99,123" "uniform-work-group-size"="false" }235; CHECK: attributes #[[ATTR9]] = { "amdgpu-max-num-workgroups"="256,128,1024" "uniform-work-group-size"="false" }236; CHECK: attributes #[[ATTR10]] = { "amdgpu-max-num-workgroups"="256,128,2048" "uniform-work-group-size"="false" }237; CHECK: attributes #[[ATTR11]] = { "amdgpu-max-num-workgroups"="4294967295,4294967295,4294967295" "uniform-work-group-size"="false" }238;.239