brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · b922854 Raw
312 lines · plain
1; RUN: llc -mtriple=amdgcn < %s | FileCheck -check-prefixes=GCN,SI %s2; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,VI %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9_1250 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GCN,GFX1250,GFX9_1250 %s5 6; GCN-LABEL: {{^}}v_test_imax3_sgt_i32:7; GCN: v_max3_i328define amdgpu_kernel void @v_test_imax3_sgt_i32(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {9  %tid = call i32 @llvm.amdgcn.workitem.id.x()10  %gep0 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid11  %gep1 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid12  %gep2 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid13  %outgep = getelementptr i32, ptr addrspace(1) %out, i32 %tid14  %a = load i32, ptr addrspace(1) %gep015  %b = load i32, ptr addrspace(1) %gep116  %c = load i32, ptr addrspace(1) %gep217  %icmp0 = icmp sgt i32 %a, %b18  %i0 = select i1 %icmp0, i32 %a, i32 %b19  %icmp1 = icmp sgt i32 %i0, %c20  %i1 = select i1 %icmp1, i32 %i0, i32 %c21  store i32 %i1, ptr addrspace(1) %out22  ret void23}24 25; GCN-LABEL: {{^}}v_test_umax3_ugt_i32:26; GCN: v_max3_u3227define amdgpu_kernel void @v_test_umax3_ugt_i32(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {28  %tid = call i32 @llvm.amdgcn.workitem.id.x()29  %gep0 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid30  %gep1 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid31  %gep2 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid32  %outgep = getelementptr i32, ptr addrspace(1) %out, i32 %tid33  %a = load i32, ptr addrspace(1) %gep034  %b = load i32, ptr addrspace(1) %gep135  %c = load i32, ptr addrspace(1) %gep236  %icmp0 = icmp ugt i32 %a, %b37  %i0 = select i1 %icmp0, i32 %a, i32 %b38  %icmp1 = icmp ugt i32 %i0, %c39  %i1 = select i1 %icmp1, i32 %i0, i32 %c40  store i32 %i1, ptr addrspace(1) %out41  ret void42}43 44; GCN-LABEL: {{^}}v_test_imax3_sgt_i16:45; SI: v_max3_i3246 47; VI: v_max_i1648; VI: v_max_i1649 50; GFX9_1250: v_max3_i1651define amdgpu_kernel void @v_test_imax3_sgt_i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {52  %tid = call i32 @llvm.amdgcn.workitem.id.x()53  %gep0 = getelementptr i16, ptr addrspace(1) %aptr, i32 %tid54  %gep1 = getelementptr i16, ptr addrspace(1) %bptr, i32 %tid55  %gep2 = getelementptr i16, ptr addrspace(1) %cptr, i32 %tid56  %outgep = getelementptr i16, ptr addrspace(1) %out, i32 %tid57  %a = load i16, ptr addrspace(1) %gep058  %b = load i16, ptr addrspace(1) %gep159  %c = load i16, ptr addrspace(1) %gep260  %icmp0 = icmp sgt i16 %a, %b61  %i0 = select i1 %icmp0, i16 %a, i16 %b62  %icmp1 = icmp sgt i16 %i0, %c63  %i1 = select i1 %icmp1, i16 %i0, i16 %c64  store i16 %i1, ptr addrspace(1) %out65  ret void66}67 68; GCN-LABEL: {{^}}v_test_umax3_ugt_i16:69; SI: v_max3_u3270 71; VI: v_max_u1672; VI: v_max_u1673 74; GFX9_1250: v_max3_u1675define amdgpu_kernel void @v_test_umax3_ugt_i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {76  %tid = call i32 @llvm.amdgcn.workitem.id.x()77  %gep0 = getelementptr i16, ptr addrspace(1) %aptr, i32 %tid78  %gep1 = getelementptr i16, ptr addrspace(1) %bptr, i32 %tid79  %gep2 = getelementptr i16, ptr addrspace(1) %cptr, i32 %tid80  %outgep = getelementptr i16, ptr addrspace(1) %out, i32 %tid81  %a = load i16, ptr addrspace(1) %gep082  %b = load i16, ptr addrspace(1) %gep183  %c = load i16, ptr addrspace(1) %gep284  %icmp0 = icmp ugt i16 %a, %b85  %i0 = select i1 %icmp0, i16 %a, i16 %b86  %icmp1 = icmp ugt i16 %i0, %c87  %i1 = select i1 %icmp1, i16 %i0, i16 %c88  store i16 %i1, ptr addrspace(1) %out89  ret void90}91 92; GCN-LABEL: {{^}}v_test_imax3_sgt_i8:93; SI: v_max3_i3294 95; VI: v_max_i1696; VI: v_max_i1697 98; GFX9_1250: v_max3_i1699define amdgpu_kernel void @v_test_imax3_sgt_i8(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {100  %tid = call i32 @llvm.amdgcn.workitem.id.x()101  %gep0 = getelementptr i8, ptr addrspace(1) %aptr, i32 %tid102  %gep1 = getelementptr i8, ptr addrspace(1) %bptr, i32 %tid103  %gep2 = getelementptr i8, ptr addrspace(1) %cptr, i32 %tid104  %outgep = getelementptr i8, ptr addrspace(1) %out, i32 %tid105  %a = load i8, ptr addrspace(1) %gep0106  %b = load i8, ptr addrspace(1) %gep1107  %c = load i8, ptr addrspace(1) %gep2108  %icmp0 = icmp sgt i8 %a, %b109  %i0 = select i1 %icmp0, i8 %a, i8 %b110  %icmp1 = icmp sgt i8 %i0, %c111  %i1 = select i1 %icmp1, i8 %i0, i8 %c112  store i8 %i1, ptr addrspace(1) %out113  ret void114}115 116; GCN-LABEL: {{^}}v_test_umax3_ugt_i8:117; SI: v_max3_u32118 119; VI: v_max_u16120; VI: v_max_u16121 122; GFX9_1250: v_max3_u16123define amdgpu_kernel void @v_test_umax3_ugt_i8(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {124  %tid = call i32 @llvm.amdgcn.workitem.id.x()125  %gep0 = getelementptr i8, ptr addrspace(1) %aptr, i32 %tid126  %gep1 = getelementptr i8, ptr addrspace(1) %bptr, i32 %tid127  %gep2 = getelementptr i8, ptr addrspace(1) %cptr, i32 %tid128  %outgep = getelementptr i8, ptr addrspace(1) %out, i32 %tid129  %a = load i8, ptr addrspace(1) %gep0130  %b = load i8, ptr addrspace(1) %gep1131  %c = load i8, ptr addrspace(1) %gep2132  %icmp0 = icmp ugt i8 %a, %b133  %i0 = select i1 %icmp0, i8 %a, i8 %b134  %icmp1 = icmp ugt i8 %i0, %c135  %i1 = select i1 %icmp1, i8 %i0, i8 %c136  store i8 %i1, ptr addrspace(1) %out137  ret void138}139 140; GCN-LABEL: {{^}}v_test_imax3_sgt_i7:141; SI: v_max3_i32142 143; VI: v_max_i16144; VI: v_max_i16145 146; GFX9_1250: v_max3_i16147define amdgpu_kernel void @v_test_imax3_sgt_i7(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {148  %tid = call i32 @llvm.amdgcn.workitem.id.x()149  %gep0 = getelementptr i7, ptr addrspace(1) %aptr, i32 %tid150  %gep1 = getelementptr i7, ptr addrspace(1) %bptr, i32 %tid151  %gep2 = getelementptr i7, ptr addrspace(1) %cptr, i32 %tid152  %outgep = getelementptr i7, ptr addrspace(1) %out, i32 %tid153  %a = load i7, ptr addrspace(1) %gep0154  %b = load i7, ptr addrspace(1) %gep1155  %c = load i7, ptr addrspace(1) %gep2156  %icmp0 = icmp sgt i7 %a, %b157  %i0 = select i1 %icmp0, i7 %a, i7 %b158  %icmp1 = icmp sgt i7 %i0, %c159  %i1 = select i1 %icmp1, i7 %i0, i7 %c160  store i7 %i1, ptr addrspace(1) %out161  ret void162}163 164; GCN-LABEL: {{^}}v_test_umax3_ugt_i7:165; SI: v_max3_u32166 167; VI: v_max_u16168; VI: v_max_u16169 170; GFX9_1250: v_max3_u16171define amdgpu_kernel void @v_test_umax3_ugt_i7(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {172  %tid = call i32 @llvm.amdgcn.workitem.id.x()173  %gep0 = getelementptr i7, ptr addrspace(1) %aptr, i32 %tid174  %gep1 = getelementptr i7, ptr addrspace(1) %bptr, i32 %tid175  %gep2 = getelementptr i7, ptr addrspace(1) %cptr, i32 %tid176  %outgep = getelementptr i7, ptr addrspace(1) %out, i32 %tid177  %a = load i7, ptr addrspace(1) %gep0178  %b = load i7, ptr addrspace(1) %gep1179  %c = load i7, ptr addrspace(1) %gep2180  %icmp0 = icmp ugt i7 %a, %b181  %i0 = select i1 %icmp0, i7 %a, i7 %b182  %icmp1 = icmp ugt i7 %i0, %c183  %i1 = select i1 %icmp1, i7 %i0, i7 %c184  store i7 %i1, ptr addrspace(1) %out185  ret void186}187 188; GCN-LABEL: {{^}}v_test_imax3_sgt_i33:189; GCN-NOT: v_max3190define amdgpu_kernel void @v_test_imax3_sgt_i33(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {191  %tid = call i32 @llvm.amdgcn.workitem.id.x()192  %gep0 = getelementptr i33, ptr addrspace(1) %aptr, i32 %tid193  %gep1 = getelementptr i33, ptr addrspace(1) %bptr, i32 %tid194  %gep2 = getelementptr i33, ptr addrspace(1) %cptr, i32 %tid195  %outgep = getelementptr i33, ptr addrspace(1) %out, i32 %tid196  %a = load i33, ptr addrspace(1) %gep0197  %b = load i33, ptr addrspace(1) %gep1198  %c = load i33, ptr addrspace(1) %gep2199  %icmp0 = icmp sgt i33 %a, %b200  %i0 = select i1 %icmp0, i33 %a, i33 %b201  %icmp1 = icmp sgt i33 %i0, %c202  %i1 = select i1 %icmp1, i33 %i0, i33 %c203  store i33 %i1, ptr addrspace(1) %out204  ret void205}206 207; GCN-LABEL: {{^}}v_test_umax3_ugt_i33:208; GCN-NOT: v_max3209define amdgpu_kernel void @v_test_umax3_ugt_i33(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {210  %tid = call i32 @llvm.amdgcn.workitem.id.x()211  %gep0 = getelementptr i33, ptr addrspace(1) %aptr, i32 %tid212  %gep1 = getelementptr i33, ptr addrspace(1) %bptr, i32 %tid213  %gep2 = getelementptr i33, ptr addrspace(1) %cptr, i32 %tid214  %outgep = getelementptr i33, ptr addrspace(1) %out, i32 %tid215  %a = load i33, ptr addrspace(1) %gep0216  %b = load i33, ptr addrspace(1) %gep1217  %c = load i33, ptr addrspace(1) %gep2218  %icmp0 = icmp ugt i33 %a, %b219  %i0 = select i1 %icmp0, i33 %a, i33 %b220  %icmp1 = icmp ugt i33 %i0, %c221  %i1 = select i1 %icmp1, i33 %i0, i33 %c222  store i33 %i1, ptr addrspace(1) %out223  ret void224}225 226; GCN-LABEL: {{^}}v_test_imax3_sgt_i64:227; GCN-NOT: v_max3228define amdgpu_kernel void @v_test_imax3_sgt_i64(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {229  %tid = call i32 @llvm.amdgcn.workitem.id.x()230  %gep0 = getelementptr i64, ptr addrspace(1) %aptr, i32 %tid231  %gep1 = getelementptr i64, ptr addrspace(1) %bptr, i32 %tid232  %gep2 = getelementptr i64, ptr addrspace(1) %cptr, i32 %tid233  %outgep = getelementptr i64, ptr addrspace(1) %out, i32 %tid234  %a = load i64, ptr addrspace(1) %gep0235  %b = load i64, ptr addrspace(1) %gep1236  %c = load i64, ptr addrspace(1) %gep2237  %icmp0 = icmp sgt i64 %a, %b238  %i0 = select i1 %icmp0, i64 %a, i64 %b239  %icmp1 = icmp sgt i64 %i0, %c240  %i1 = select i1 %icmp1, i64 %i0, i64 %c241  store i64 %i1, ptr addrspace(1) %out242  ret void243}244 245; GCN-LABEL: {{^}}v_test_umax3_ugt_i64:246; GCN-NOT: v_max3247define amdgpu_kernel void @v_test_umax3_ugt_i64(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {248  %tid = call i32 @llvm.amdgcn.workitem.id.x()249  %gep0 = getelementptr i64, ptr addrspace(1) %aptr, i32 %tid250  %gep1 = getelementptr i64, ptr addrspace(1) %bptr, i32 %tid251  %gep2 = getelementptr i64, ptr addrspace(1) %cptr, i32 %tid252  %outgep = getelementptr i64, ptr addrspace(1) %out, i32 %tid253  %a = load i64, ptr addrspace(1) %gep0254  %b = load i64, ptr addrspace(1) %gep1255  %c = load i64, ptr addrspace(1) %gep2256  %icmp0 = icmp ugt i64 %a, %b257  %i0 = select i1 %icmp0, i64 %a, i64 %b258  %icmp1 = icmp ugt i64 %i0, %c259  %i1 = select i1 %icmp1, i64 %i0, i64 %c260  store i64 %i1, ptr addrspace(1) %out261  ret void262}263 264; GCN-LABEL: {{^}}v_test_imax3_sgt_v2i16:265; SI-COUNT-2:   v_max3_i32266; VI-COUNT-2:   v_max_i16267; GFX9-COUNT-2: v_pk_max_i16268; GFX1250:      v_pk_max3_i16269define amdgpu_kernel void @v_test_imax3_sgt_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {270  %tid = call i32 @llvm.amdgcn.workitem.id.x()271  %gep0 = getelementptr <2 x i16>, ptr addrspace(1) %aptr, i32 %tid272  %gep1 = getelementptr <2 x i16>, ptr addrspace(1) %bptr, i32 %tid273  %gep2 = getelementptr <2 x i16>, ptr addrspace(1) %cptr, i32 %tid274  %outgep = getelementptr <2 x i16>, ptr addrspace(1) %out, i32 %tid275  %a = load <2 x i16>, ptr addrspace(1) %gep0276  %b = load <2 x i16>, ptr addrspace(1) %gep1277  %c = load <2 x i16>, ptr addrspace(1) %gep2278  %icmp0 = icmp sgt <2 x i16> %a, %b279  %i0 = select <2 x i1> %icmp0, <2 x i16> %a, <2 x i16> %b280  %icmp1 = icmp sgt <2 x i16> %i0, %c281  %i1 = select <2 x i1> %icmp1, <2 x i16> %i0, <2 x i16> %c282  store <2 x i16> %i1, ptr addrspace(1) %out283  ret void284}285 286; GCN-LABEL: {{^}}v_test_imax3_ugt_v2i16:287; SI-COUNT-2:   v_max3_u32288; VI-COUNT-2:   v_max_u16289; GFX9-COUNT-2: v_pk_max_u16290; GFX1250:      v_pk_max3_u16291define amdgpu_kernel void @v_test_imax3_ugt_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {292  %tid = call i32 @llvm.amdgcn.workitem.id.x()293  %gep0 = getelementptr <2 x i16>, ptr addrspace(1) %aptr, i32 %tid294  %gep1 = getelementptr <2 x i16>, ptr addrspace(1) %bptr, i32 %tid295  %gep2 = getelementptr <2 x i16>, ptr addrspace(1) %cptr, i32 %tid296  %outgep = getelementptr <2 x i16>, ptr addrspace(1) %out, i32 %tid297  %a = load <2 x i16>, ptr addrspace(1) %gep0298  %b = load <2 x i16>, ptr addrspace(1) %gep1299  %c = load <2 x i16>, ptr addrspace(1) %gep2300  %icmp0 = icmp ugt <2 x i16> %a, %b301  %i0 = select <2 x i1> %icmp0, <2 x i16> %a, <2 x i16> %b302  %icmp1 = icmp ugt <2 x i16> %i0, %c303  %i1 = select <2 x i1> %icmp1, <2 x i16> %i0, <2 x i16> %c304  store <2 x i16> %i1, ptr addrspace(1) %out305  ret void306}307 308declare i32 @llvm.amdgcn.workitem.id.x() #1309 310attributes #0 = { nounwind }311attributes #1 = { nounwind readnone speculatable }312