brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.7 KiB · c18d994 Raw
274 lines · plain
1; RUN: opt -S -mtriple=amdgcn-unknown-unknown -passes=amdgpu-promote-alloca -disable-promote-alloca-to-vector < %s | FileCheck --check-prefixes=SI,SICI,ALL %s2; RUN: opt -S -mcpu=tonga -mtriple=amdgcn-unknown-unknown -passes=amdgpu-promote-alloca -disable-promote-alloca-to-vector < %s | FileCheck --check-prefixes=CI,SICI,ALL %s3; RUN: opt -S -mcpu=gfx1010 -mtriple=amdgcn-unknown-unknown -passes=amdgpu-promote-alloca -disable-promote-alloca-to-vector < %s | FileCheck --check-prefixes=GFX10PLUS,ALL %s4; RUN: opt -S -mcpu=gfx1100 -mtriple=amdgcn-unknown-unknown -passes=amdgpu-promote-alloca -disable-promote-alloca-to-vector < %s | FileCheck --check-prefixes=GFX10PLUS,ALL %s5 6; SI-NOT: @promote_alloca_size_63.stack = internal unnamed_addr addrspace(3) global [63 x [5 x i32]] poison, align 47; CI: @promote_alloca_size_63.stack = internal unnamed_addr addrspace(3) global [63 x [5 x i32]] poison, align 48 9define amdgpu_kernel void @promote_alloca_size_63(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #0 {10entry:11  %stack = alloca [5 x i32], align 4, addrspace(5)12  %0 = load i32, ptr addrspace(1) %in, align 413  %arrayidx1 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %014  store i32 4, ptr addrspace(5) %arrayidx1, align 415  %arrayidx2 = getelementptr inbounds i32, ptr addrspace(1) %in, i32 116  %1 = load i32, ptr addrspace(1) %arrayidx2, align 417  %arrayidx3 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %118  store i32 5, ptr addrspace(5) %arrayidx3, align 419  %2 = load i32, ptr addrspace(5) %stack, align 420  store i32 %2, ptr addrspace(1) %out, align 421  %arrayidx12 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 122  %3 = load i32, ptr addrspace(5) %arrayidx1223  %arrayidx13 = getelementptr inbounds i32, ptr addrspace(1) %out, i32 124  store i32 %3, ptr addrspace(1) %arrayidx1325  ret void26}27 28; ALL: @promote_alloca_size_256.stack = internal unnamed_addr addrspace(3) global [256 x [5 x i32]] poison, align 429 30define amdgpu_kernel void @promote_alloca_size_256(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #1 {31entry:32  %stack = alloca [5 x i32], align 4, addrspace(5)33  %0 = load i32, ptr addrspace(1) %in, align 434  %arrayidx1 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %035  store i32 4, ptr addrspace(5) %arrayidx1, align 436  %arrayidx2 = getelementptr inbounds i32, ptr addrspace(1) %in, i32 137  %1 = load i32, ptr addrspace(1) %arrayidx2, align 438  %arrayidx3 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %139  store i32 5, ptr addrspace(5) %arrayidx3, align 440  %2 = load i32, ptr addrspace(5) %stack, align 441  store i32 %2, ptr addrspace(1) %out, align 442  %arrayidx12 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 143  %3 = load i32, ptr addrspace(5) %arrayidx1244  %arrayidx13 = getelementptr inbounds i32, ptr addrspace(1) %out, i32 145  store i32 %3, ptr addrspace(1) %arrayidx1346  ret void47}48 49; SI-NOT: @promote_alloca_size_1600.stack50; CI: @promote_alloca_size_1600.stack = internal unnamed_addr addrspace(3) global [1024 x [5 x i32]] poison, align 451; GFX10PLUS: @promote_alloca_size_1600.stack = internal unnamed_addr addrspace(3) global [1024 x [5 x i32]] poison, align 452 53define amdgpu_kernel void @promote_alloca_size_1600(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #2 {54entry:55  %stack = alloca [5 x i32], align 4, addrspace(5)56  %0 = load i32, ptr addrspace(1) %in, align 457  %arrayidx1 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %058  store i32 4, ptr addrspace(5) %arrayidx1, align 459  %arrayidx2 = getelementptr inbounds i32, ptr addrspace(1) %in, i32 160  %1 = load i32, ptr addrspace(1) %arrayidx2, align 461  %arrayidx3 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %162  store i32 5, ptr addrspace(5) %arrayidx3, align 463  %2 = load i32, ptr addrspace(5) %stack, align 464  store i32 %2, ptr addrspace(1) %out, align 465  %arrayidx12 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 166  %3 = load i32, ptr addrspace(5) %arrayidx1267  %arrayidx13 = getelementptr inbounds i32, ptr addrspace(1) %out, i32 168  store i32 %3, ptr addrspace(1) %arrayidx1369  ret void70}71 72; ALL-LABEL: @occupancy_0(73; CI-NOT: alloca [5 x i32]74; SI: alloca [5 x i32]75define amdgpu_kernel void @occupancy_0(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #3 {76entry:77  %stack = alloca [5 x i32], align 4, addrspace(5)78  %0 = load i32, ptr addrspace(1) %in, align 479  %arrayidx1 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %080  store i32 4, ptr addrspace(5) %arrayidx1, align 481  %arrayidx2 = getelementptr inbounds i32, ptr addrspace(1) %in, i32 182  %1 = load i32, ptr addrspace(1) %arrayidx2, align 483  %arrayidx3 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %184  store i32 5, ptr addrspace(5) %arrayidx3, align 485  %2 = load i32, ptr addrspace(5) %stack, align 486  store i32 %2, ptr addrspace(1) %out, align 487  %arrayidx12 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 188  %3 = load i32, ptr addrspace(5) %arrayidx1289  %arrayidx13 = getelementptr inbounds i32, ptr addrspace(1) %out, i32 190  store i32 %3, ptr addrspace(1) %arrayidx1391  ret void92}93 94; ALL-LABEL: @occupancy_max(95; CI-NOT: alloca [5 x i32]96; SI: alloca [5 x i32]97define amdgpu_kernel void @occupancy_max(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #4 {98entry:99  %stack = alloca [5 x i32], align 4, addrspace(5)100  %0 = load i32, ptr addrspace(1) %in, align 4101  %arrayidx1 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %0102  store i32 4, ptr addrspace(5) %arrayidx1, align 4103  %arrayidx2 = getelementptr inbounds i32, ptr addrspace(1) %in, i32 1104  %1 = load i32, ptr addrspace(1) %arrayidx2, align 4105  %arrayidx3 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 %1106  store i32 5, ptr addrspace(5) %arrayidx3, align 4107  %2 = load i32, ptr addrspace(5) %stack, align 4108  store i32 %2, ptr addrspace(1) %out, align 4109  %arrayidx12 = getelementptr inbounds [5 x i32], ptr addrspace(5) %stack, i32 0, i32 1110  %3 = load i32, ptr addrspace(5) %arrayidx12111  %arrayidx13 = getelementptr inbounds i32, ptr addrspace(1) %out, i32 1112  store i32 %3, ptr addrspace(1) %arrayidx13113  ret void114}115 116; SI-LABEL: @occupancy_6(117; CI-LABEL: @occupancy_6(118; SI: alloca119; CI-NOT: alloca120define amdgpu_kernel void @occupancy_6(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #5 {121entry:122  %stack = alloca [42 x i8], align 4, addrspace(5)123  %tmp = load i8, ptr addrspace(1) %in, align 1124  %tmp4 = sext i8 %tmp to i64125  %arrayidx1 = getelementptr inbounds [42 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp4126  store i8 4, ptr addrspace(5) %arrayidx1, align 1127  %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %in, i64 1128  %tmp1 = load i8, ptr addrspace(1) %arrayidx2, align 1129  %tmp5 = sext i8 %tmp1 to i64130  %arrayidx3 = getelementptr inbounds [42 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp5131  store i8 5, ptr addrspace(5) %arrayidx3, align 1132  %tmp2 = load i8, ptr addrspace(5) %stack, align 1133  store i8 %tmp2, ptr addrspace(1) %out, align 1134  %arrayidx12 = getelementptr inbounds [42 x i8], ptr addrspace(5) %stack, i64 0, i64 1135  %tmp3 = load i8, ptr addrspace(5) %arrayidx12, align 1136  %arrayidx13 = getelementptr inbounds i8, ptr addrspace(1) %out, i64 1137  store i8 %tmp3, ptr addrspace(1) %arrayidx13, align 1138  ret void139}140 141; ALL-LABEL: @occupancy_6_over(142; SICI: alloca [43 x i8]143; GFX10PLUS-NOT: alloca144 145define amdgpu_kernel void @occupancy_6_over(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #5 {146entry:147  %stack = alloca [43 x i8], align 4, addrspace(5)148  %tmp = load i8, ptr addrspace(1) %in, align 1149  %tmp4 = sext i8 %tmp to i64150  %arrayidx1 = getelementptr inbounds [43 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp4151  store i8 4, ptr addrspace(5) %arrayidx1, align 1152  %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %in, i64 1153  %tmp1 = load i8, ptr addrspace(1) %arrayidx2, align 1154  %tmp5 = sext i8 %tmp1 to i64155  %arrayidx3 = getelementptr inbounds [43 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp5156  store i8 5, ptr addrspace(5) %arrayidx3, align 1157  %tmp2 = load i8, ptr addrspace(5) %stack, align 1158  store i8 %tmp2, ptr addrspace(1) %out, align 1159  %arrayidx12 = getelementptr inbounds [43 x i8], ptr addrspace(5) %stack, i64 0, i64 1160  %tmp3 = load i8, ptr addrspace(5) %arrayidx12, align 1161  %arrayidx13 = getelementptr inbounds i8, ptr addrspace(1) %out, i64 1162  store i8 %tmp3, ptr addrspace(1) %arrayidx13, align 1163  ret void164}165 166; SI-LABEL: @occupancy_8(167; CI-LABEL: @occupancy_8(168; SI: alloca169; CI-NOT: alloca170define amdgpu_kernel void @occupancy_8(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #6 {171entry:172  %stack = alloca [32 x i8], align 4, addrspace(5)173  %tmp = load i8, ptr addrspace(1) %in, align 1174  %tmp4 = sext i8 %tmp to i64175  %arrayidx1 = getelementptr inbounds [32 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp4176  store i8 4, ptr addrspace(5) %arrayidx1, align 1177  %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %in, i64 1178  %tmp1 = load i8, ptr addrspace(1) %arrayidx2, align 1179  %tmp5 = sext i8 %tmp1 to i64180  %arrayidx3 = getelementptr inbounds [32 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp5181  store i8 5, ptr addrspace(5) %arrayidx3, align 1182  %tmp2 = load i8, ptr addrspace(5) %stack, align 1183  store i8 %tmp2, ptr addrspace(1) %out, align 1184  %arrayidx12 = getelementptr inbounds [32 x i8], ptr addrspace(5) %stack, i64 0, i64 1185  %tmp3 = load i8, ptr addrspace(5) %arrayidx12, align 1186  %arrayidx13 = getelementptr inbounds i8, ptr addrspace(1) %out, i64 1187  store i8 %tmp3, ptr addrspace(1) %arrayidx13, align 1188  ret void189}190 191; ALL-LABEL: @occupancy_8_over(192; SICI: alloca [33 x i8]193; GFX10PLUS-NOT: alloca194 195define amdgpu_kernel void @occupancy_8_over(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #6 {196entry:197  %stack = alloca [33 x i8], align 4, addrspace(5)198  %tmp = load i8, ptr addrspace(1) %in, align 1199  %tmp4 = sext i8 %tmp to i64200  %arrayidx1 = getelementptr inbounds [33 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp4201  store i8 4, ptr addrspace(5) %arrayidx1, align 1202  %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %in, i64 1203  %tmp1 = load i8, ptr addrspace(1) %arrayidx2, align 1204  %tmp5 = sext i8 %tmp1 to i64205  %arrayidx3 = getelementptr inbounds [33 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp5206  store i8 5, ptr addrspace(5) %arrayidx3, align 1207  %tmp2 = load i8, ptr addrspace(5) %stack, align 1208  store i8 %tmp2, ptr addrspace(1) %out, align 1209  %arrayidx12 = getelementptr inbounds [33 x i8], ptr addrspace(5) %stack, i64 0, i64 1210  %tmp3 = load i8, ptr addrspace(5) %arrayidx12, align 1211  %arrayidx13 = getelementptr inbounds i8, ptr addrspace(1) %out, i64 1212  store i8 %tmp3, ptr addrspace(1) %arrayidx13, align 1213  ret void214}215 216; SI-LABEL: @occupancy_9(217; CI-LABEL: @occupancy_9(218; SI: alloca219; CI-NOT: alloca220define amdgpu_kernel void @occupancy_9(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #7 {221entry:222  %stack = alloca [28 x i8], align 4, addrspace(5)223  %tmp = load i8, ptr addrspace(1) %in, align 1224  %tmp4 = sext i8 %tmp to i64225  %arrayidx1 = getelementptr inbounds [28 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp4226  store i8 4, ptr addrspace(5) %arrayidx1, align 1227  %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %in, i64 1228  %tmp1 = load i8, ptr addrspace(1) %arrayidx2, align 1229  %tmp5 = sext i8 %tmp1 to i64230  %arrayidx3 = getelementptr inbounds [28 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp5231  store i8 5, ptr addrspace(5) %arrayidx3, align 1232  %tmp2 = load i8, ptr addrspace(5) %stack, align 1233  store i8 %tmp2, ptr addrspace(1) %out, align 1234  %arrayidx12 = getelementptr inbounds [28 x i8], ptr addrspace(5) %stack, i64 0, i64 1235  %tmp3 = load i8, ptr addrspace(5) %arrayidx12, align 1236  %arrayidx13 = getelementptr inbounds i8, ptr addrspace(1) %out, i64 1237  store i8 %tmp3, ptr addrspace(1) %arrayidx13, align 1238  ret void239}240 241; ALL-LABEL: @occupancy_9_over(242; SICI: alloca [29 x i8]243; GFX10PLUS-NOT: alloca244 245define amdgpu_kernel void @occupancy_9_over(ptr addrspace(1) nocapture %out, ptr addrspace(1) nocapture %in) #7 {246entry:247  %stack = alloca [29 x i8], align 4, addrspace(5)248  %tmp = load i8, ptr addrspace(1) %in, align 1249  %tmp4 = sext i8 %tmp to i64250  %arrayidx1 = getelementptr inbounds [29 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp4251  store i8 4, ptr addrspace(5) %arrayidx1, align 1252  %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %in, i64 1253  %tmp1 = load i8, ptr addrspace(1) %arrayidx2, align 1254  %tmp5 = sext i8 %tmp1 to i64255  %arrayidx3 = getelementptr inbounds [29 x i8], ptr addrspace(5) %stack, i64 0, i64 %tmp5256  store i8 5, ptr addrspace(5) %arrayidx3, align 1257  %tmp2 = load i8, ptr addrspace(5) %stack, align 1258  store i8 %tmp2, ptr addrspace(1) %out, align 1259  %arrayidx12 = getelementptr inbounds [29 x i8], ptr addrspace(5) %stack, i64 0, i64 1260  %tmp3 = load i8, ptr addrspace(5) %arrayidx12, align 1261  %arrayidx13 = getelementptr inbounds i8, ptr addrspace(1) %out, i64 1262  store i8 %tmp3, ptr addrspace(1) %arrayidx13, align 1263  ret void264}265 266attributes #0 = { nounwind "amdgpu-flat-work-group-size"="63,63" }267attributes #1 = { nounwind "amdgpu-waves-per-eu"="1,3" "amdgpu-flat-work-group-size"="256,256" }268attributes #2 = { nounwind "amdgpu-waves-per-eu"="1,9" "amdgpu-flat-work-group-size"="1024,1024" }269attributes #3 = { nounwind "amdgpu-waves-per-eu"="1,10" }270attributes #4 = { nounwind "amdgpu-waves-per-eu"="1,10" }271attributes #5 = { nounwind "amdgpu-waves-per-eu"="1,6" "amdgpu-flat-work-group-size"="64,64" }272attributes #6 = { nounwind "amdgpu-waves-per-eu"="1,8" "amdgpu-flat-work-group-size"="64,64" }273attributes #7 = { nounwind "amdgpu-waves-per-eu"="1,9" "amdgpu-flat-work-group-size"="64,64" }274