brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.8 KiB · e30b929 Raw
382 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_imin3_slt_i32:7; GCN: v_min3_i328define amdgpu_kernel void @v_test_imin3_slt_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 slt i32 %a, %b18  %i0 = select i1 %icmp0, i32 %a, i32 %b19  %icmp1 = icmp slt i32 %i0, %c20  %i1 = select i1 %icmp1, i32 %i0, i32 %c21  store i32 %i1, ptr addrspace(1) %outgep22  ret void23}24 25; GCN-LABEL: {{^}}v_test_umin3_ult_i32:26; GCN: v_min3_u3227define amdgpu_kernel void @v_test_umin3_ult_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 ult i32 %a, %b37  %i0 = select i1 %icmp0, i32 %a, i32 %b38  %icmp1 = icmp ult i32 %i0, %c39  %i1 = select i1 %icmp1, i32 %i0, i32 %c40  store i32 %i1, ptr addrspace(1) %outgep41  ret void42}43 44; GCN-LABEL: {{^}}v_test_umin_umin_umin:45; GCN: v_min_i3246; GCN: v_min3_i3247define amdgpu_kernel void @v_test_umin_umin_umin(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {48  %tid = call i32 @llvm.amdgcn.workitem.id.x()49  %tid2 = mul i32 %tid, 250  %gep0 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid51  %gep1 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid52  %gep2 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid53 54  %gep3 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid255  %gep4 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid256  %gep5 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid257 58  %outgep0 = getelementptr i32, ptr addrspace(1) %out, i32 %tid59  %outgep1 = getelementptr i32, ptr addrspace(1) %out, i32 %tid260 61  %a = load i32, ptr addrspace(1) %gep062  %b = load i32, ptr addrspace(1) %gep163  %c = load i32, ptr addrspace(1) %gep264  %d = load i32, ptr addrspace(1) %gep365 66  %icmp0 = icmp slt i32 %a, %b67  %i0 = select i1 %icmp0, i32 %a, i32 %b68 69  %icmp1 = icmp slt i32 %c, %d70  %i1 = select i1 %icmp1, i32 %c, i32 %d71 72  %icmp2 = icmp slt i32 %i0, %i173  %i2 = select i1 %icmp2, i32 %i0, i32 %i174 75  store i32 %i2, ptr addrspace(1) %outgep176  ret void77}78 79; GCN-LABEL: {{^}}v_test_umin3_2_uses:80; GCN-NOT: v_min381define amdgpu_kernel void @v_test_umin3_2_uses(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {82  %tid = call i32 @llvm.amdgcn.workitem.id.x()83  %tid2 = mul i32 %tid, 284  %gep0 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid85  %gep1 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid86  %gep2 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid87 88  %gep3 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid289  %gep4 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid290  %gep5 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid291 92  %outgep0 = getelementptr i32, ptr addrspace(1) %out, i32 %tid93  %outgep1 = getelementptr i32, ptr addrspace(1) %out, i32 %tid294 95  %a = load i32, ptr addrspace(1) %gep096  %b = load i32, ptr addrspace(1) %gep197  %c = load i32, ptr addrspace(1) %gep298  %d = load i32, ptr addrspace(1) %gep399 100  %icmp0 = icmp slt i32 %a, %b101  %i0 = select i1 %icmp0, i32 %a, i32 %b102 103  %icmp1 = icmp slt i32 %c, %d104  %i1 = select i1 %icmp1, i32 %c, i32 %d105 106  %icmp2 = icmp slt i32 %i0, %c107  %i2 = select i1 %icmp2, i32 %i0, i32 %c108 109  store i32 %i2, ptr addrspace(1) %outgep0110  store i32 %i0, ptr addrspace(1) %outgep1111  ret void112}113 114; GCN-LABEL: {{^}}v_test_imin3_slt_i16:115; SI: v_min3_i32116 117; VI: v_min_i16118; VI: v_min_i16119 120; GFX9_1250: v_min3_i16121define amdgpu_kernel void @v_test_imin3_slt_i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {122  %tid = call i32 @llvm.amdgcn.workitem.id.x()123  %gep0 = getelementptr i16, ptr addrspace(1) %aptr, i32 %tid124  %gep1 = getelementptr i16, ptr addrspace(1) %bptr, i32 %tid125  %gep2 = getelementptr i16, ptr addrspace(1) %cptr, i32 %tid126  %outgep = getelementptr i16, ptr addrspace(1) %out, i32 %tid127  %a = load i16, ptr addrspace(1) %gep0128  %b = load i16, ptr addrspace(1) %gep1129  %c = load i16, ptr addrspace(1) %gep2130  %icmp0 = icmp slt i16 %a, %b131  %i0 = select i1 %icmp0, i16 %a, i16 %b132  %icmp1 = icmp slt i16 %i0, %c133  %i1 = select i1 %icmp1, i16 %i0, i16 %c134  store i16 %i1, ptr addrspace(1) %outgep135  ret void136}137 138; GCN-LABEL: {{^}}v_test_umin3_ult_i16:139; SI: v_min3_u32140 141; VI: v_min_u16142; VI: v_min_u16143 144; GFX9_1250: v_min3_u16145define amdgpu_kernel void @v_test_umin3_ult_i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {146  %tid = call i32 @llvm.amdgcn.workitem.id.x()147  %gep0 = getelementptr i16, ptr addrspace(1) %aptr, i32 %tid148  %gep1 = getelementptr i16, ptr addrspace(1) %bptr, i32 %tid149  %gep2 = getelementptr i16, ptr addrspace(1) %cptr, i32 %tid150  %outgep = getelementptr i16, ptr addrspace(1) %out, i32 %tid151  %a = load i16, ptr addrspace(1) %gep0152  %b = load i16, ptr addrspace(1) %gep1153  %c = load i16, ptr addrspace(1) %gep2154  %icmp0 = icmp ult i16 %a, %b155  %i0 = select i1 %icmp0, i16 %a, i16 %b156  %icmp1 = icmp ult i16 %i0, %c157  %i1 = select i1 %icmp1, i16 %i0, i16 %c158  store i16 %i1, ptr addrspace(1) %outgep159  ret void160}161 162; GCN-LABEL: {{^}}v_test_imin3_slt_i8:163; SI: v_min3_i32164 165; VI: v_min_i16166; VI: v_min_i16167 168; GFX9_1250: v_min3_i16169define amdgpu_kernel void @v_test_imin3_slt_i8(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {170  %tid = call i32 @llvm.amdgcn.workitem.id.x()171  %gep0 = getelementptr i8, ptr addrspace(1) %aptr, i32 %tid172  %gep1 = getelementptr i8, ptr addrspace(1) %bptr, i32 %tid173  %gep2 = getelementptr i8, ptr addrspace(1) %cptr, i32 %tid174  %outgep = getelementptr i8, ptr addrspace(1) %out, i32 %tid175  %a = load i8, ptr addrspace(1) %gep0176  %b = load i8, ptr addrspace(1) %gep1177  %c = load i8, ptr addrspace(1) %gep2178  %icmp0 = icmp slt i8 %a, %b179  %i0 = select i1 %icmp0, i8 %a, i8 %b180  %icmp1 = icmp slt i8 %i0, %c181  %i1 = select i1 %icmp1, i8 %i0, i8 %c182  store i8 %i1, ptr addrspace(1) %outgep183  ret void184}185 186; GCN-LABEL: {{^}}v_test_umin3_ult_i8:187; SI: v_min3_u32188 189; VI: v_min_u16190; VI: v_min_u16191 192; GFX9_1250: v_min3_u16193define amdgpu_kernel void @v_test_umin3_ult_i8(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {194  %tid = call i32 @llvm.amdgcn.workitem.id.x()195  %gep0 = getelementptr i8, ptr addrspace(1) %aptr, i32 %tid196  %gep1 = getelementptr i8, ptr addrspace(1) %bptr, i32 %tid197  %gep2 = getelementptr i8, ptr addrspace(1) %cptr, i32 %tid198  %outgep = getelementptr i8, ptr addrspace(1) %out, i32 %tid199  %a = load i8, ptr addrspace(1) %gep0200  %b = load i8, ptr addrspace(1) %gep1201  %c = load i8, ptr addrspace(1) %gep2202  %icmp0 = icmp ult i8 %a, %b203  %i0 = select i1 %icmp0, i8 %a, i8 %b204  %icmp1 = icmp ult i8 %i0, %c205  %i1 = select i1 %icmp1, i8 %i0, i8 %c206  store i8 %i1, ptr addrspace(1) %outgep207  ret void208}209 210; GCN-LABEL: {{^}}v_test_imin3_slt_i7:211; SI: v_min3_i32212 213; VI: v_min_i16214; VI: v_min_i16215 216; GFX9_1250: v_min3_i16217define amdgpu_kernel void @v_test_imin3_slt_i7(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {218  %tid = call i32 @llvm.amdgcn.workitem.id.x()219  %gep0 = getelementptr i7, ptr addrspace(1) %aptr, i32 %tid220  %gep1 = getelementptr i7, ptr addrspace(1) %bptr, i32 %tid221  %gep2 = getelementptr i7, ptr addrspace(1) %cptr, i32 %tid222  %outgep = getelementptr i7, ptr addrspace(1) %out, i32 %tid223  %a = load i7, ptr addrspace(1) %gep0224  %b = load i7, ptr addrspace(1) %gep1225  %c = load i7, ptr addrspace(1) %gep2226  %icmp0 = icmp slt i7 %a, %b227  %i0 = select i1 %icmp0, i7 %a, i7 %b228  %icmp1 = icmp slt i7 %i0, %c229  %i1 = select i1 %icmp1, i7 %i0, i7 %c230  store i7 %i1, ptr addrspace(1) %outgep231  ret void232}233 234; GCN-LABEL: {{^}}v_test_umin3_ult_i7:235; SI: v_min3_u32236 237; VI: v_min_u16238; VI: v_min_u16239 240; GFX9_1250: v_min3_u16241define amdgpu_kernel void @v_test_umin3_ult_i7(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {242  %tid = call i32 @llvm.amdgcn.workitem.id.x()243  %gep0 = getelementptr i7, ptr addrspace(1) %aptr, i32 %tid244  %gep1 = getelementptr i7, ptr addrspace(1) %bptr, i32 %tid245  %gep2 = getelementptr i7, ptr addrspace(1) %cptr, i32 %tid246  %outgep = getelementptr i7, ptr addrspace(1) %out, i32 %tid247  %a = load i7, ptr addrspace(1) %gep0248  %b = load i7, ptr addrspace(1) %gep1249  %c = load i7, ptr addrspace(1) %gep2250  %icmp0 = icmp ult i7 %a, %b251  %i0 = select i1 %icmp0, i7 %a, i7 %b252  %icmp1 = icmp ult i7 %i0, %c253  %i1 = select i1 %icmp1, i7 %i0, i7 %c254  store i7 %i1, ptr addrspace(1) %outgep255  ret void256}257 258; GCN-LABEL: {{^}}v_test_imin3_slt_i33:259; GCN-NOT: v_min3260define amdgpu_kernel void @v_test_imin3_slt_i33(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {261  %tid = call i32 @llvm.amdgcn.workitem.id.x()262  %gep0 = getelementptr i33, ptr addrspace(1) %aptr, i32 %tid263  %gep1 = getelementptr i33, ptr addrspace(1) %bptr, i32 %tid264  %gep2 = getelementptr i33, ptr addrspace(1) %cptr, i32 %tid265  %outgep = getelementptr i33, ptr addrspace(1) %out, i32 %tid266  %a = load i33, ptr addrspace(1) %gep0267  %b = load i33, ptr addrspace(1) %gep1268  %c = load i33, ptr addrspace(1) %gep2269  %icmp0 = icmp slt i33 %a, %b270  %i0 = select i1 %icmp0, i33 %a, i33 %b271  %icmp1 = icmp slt i33 %i0, %c272  %i1 = select i1 %icmp1, i33 %i0, i33 %c273  store i33 %i1, ptr addrspace(1) %outgep274  ret void275}276 277; GCN-LABEL: {{^}}v_test_umin3_ult_i33:278; GCN-NOT: v_min3279define amdgpu_kernel void @v_test_umin3_ult_i33(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {280  %tid = call i32 @llvm.amdgcn.workitem.id.x()281  %gep0 = getelementptr i33, ptr addrspace(1) %aptr, i32 %tid282  %gep1 = getelementptr i33, ptr addrspace(1) %bptr, i32 %tid283  %gep2 = getelementptr i33, ptr addrspace(1) %cptr, i32 %tid284  %outgep = getelementptr i33, ptr addrspace(1) %out, i32 %tid285  %a = load i33, ptr addrspace(1) %gep0286  %b = load i33, ptr addrspace(1) %gep1287  %c = load i33, ptr addrspace(1) %gep2288  %icmp0 = icmp ult i33 %a, %b289  %i0 = select i1 %icmp0, i33 %a, i33 %b290  %icmp1 = icmp ult i33 %i0, %c291  %i1 = select i1 %icmp1, i33 %i0, i33 %c292  store i33 %i1, ptr addrspace(1) %outgep293  ret void294}295 296; GCN-LABEL: {{^}}v_test_imin3_slt_i64:297; GCN-NOT: v_min3298define amdgpu_kernel void @v_test_imin3_slt_i64(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {299  %tid = call i32 @llvm.amdgcn.workitem.id.x()300  %gep0 = getelementptr i64, ptr addrspace(1) %aptr, i32 %tid301  %gep1 = getelementptr i64, ptr addrspace(1) %bptr, i32 %tid302  %gep2 = getelementptr i64, ptr addrspace(1) %cptr, i32 %tid303  %outgep = getelementptr i64, ptr addrspace(1) %out, i32 %tid304  %a = load i64, ptr addrspace(1) %gep0305  %b = load i64, ptr addrspace(1) %gep1306  %c = load i64, ptr addrspace(1) %gep2307  %icmp0 = icmp slt i64 %a, %b308  %i0 = select i1 %icmp0, i64 %a, i64 %b309  %icmp1 = icmp slt i64 %i0, %c310  %i1 = select i1 %icmp1, i64 %i0, i64 %c311  store i64 %i1, ptr addrspace(1) %outgep312  ret void313}314 315; GCN-LABEL: {{^}}v_test_umin3_ult_i64:316; GCN-NOT: v_min3317define amdgpu_kernel void @v_test_umin3_ult_i64(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {318  %tid = call i32 @llvm.amdgcn.workitem.id.x()319  %gep0 = getelementptr i64, ptr addrspace(1) %aptr, i32 %tid320  %gep1 = getelementptr i64, ptr addrspace(1) %bptr, i32 %tid321  %gep2 = getelementptr i64, ptr addrspace(1) %cptr, i32 %tid322  %outgep = getelementptr i64, ptr addrspace(1) %out, i32 %tid323  %a = load i64, ptr addrspace(1) %gep0324  %b = load i64, ptr addrspace(1) %gep1325  %c = load i64, ptr addrspace(1) %gep2326  %icmp0 = icmp ult i64 %a, %b327  %i0 = select i1 %icmp0, i64 %a, i64 %b328  %icmp1 = icmp ult i64 %i0, %c329  %i1 = select i1 %icmp1, i64 %i0, i64 %c330  store i64 %i1, ptr addrspace(1) %outgep331  ret void332}333 334; GCN-LABEL: {{^}}v_test_imin3_slt_v2i16:335; SI-COUNT-2:   v_min3_i32336; VI-COUNT-2:   v_min_i16337; GFX9-COUNT-2: v_pk_min_i16338; GFX1250:      v_pk_min3_i16339define amdgpu_kernel void @v_test_imin3_slt_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {340  %tid = call i32 @llvm.amdgcn.workitem.id.x()341  %gep0 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid342  %gep1 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid343  %gep2 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid344  %outgep = getelementptr <2 x i16>, ptr addrspace(1) %out, i32 %tid345  %a = load <2 x i16>, ptr addrspace(1) %gep0346  %b = load <2 x i16>, ptr addrspace(1) %gep1347  %c = load <2 x i16>, ptr addrspace(1) %gep2348  %icmp0 = icmp slt <2 x i16> %a, %b349  %i0 = select <2 x i1> %icmp0, <2 x i16> %a, <2 x i16> %b350  %icmp1 = icmp slt <2 x i16> %i0, %c351  %i1 = select <2 x i1> %icmp1, <2 x i16> %i0, <2 x i16> %c352  store <2 x i16> %i1, ptr addrspace(1) %outgep353  ret void354}355 356; GCN-LABEL: {{^}}v_test_imin3_ult_v2i16:357; SI-COUNT-2:   v_min3_u32358; VI-COUNT-2:   v_min_u16359; GFX9-COUNT-2: v_pk_min_u16360; GFX1250:      v_pk_min3_u16361define amdgpu_kernel void @v_test_imin3_ult_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr, ptr addrspace(1) %cptr) #0 {362  %tid = call i32 @llvm.amdgcn.workitem.id.x()363  %gep0 = getelementptr i32, ptr addrspace(1) %aptr, i32 %tid364  %gep1 = getelementptr i32, ptr addrspace(1) %bptr, i32 %tid365  %gep2 = getelementptr i32, ptr addrspace(1) %cptr, i32 %tid366  %outgep = getelementptr <2 x i16>, ptr addrspace(1) %out, i32 %tid367  %a = load <2 x i16>, ptr addrspace(1) %gep0368  %b = load <2 x i16>, ptr addrspace(1) %gep1369  %c = load <2 x i16>, ptr addrspace(1) %gep2370  %icmp0 = icmp ult <2 x i16> %a, %b371  %i0 = select <2 x i1> %icmp0, <2 x i16> %a, <2 x i16> %b372  %icmp1 = icmp ult <2 x i16> %i0, %c373  %i1 = select <2 x i1> %icmp1, <2 x i16> %i0, <2 x i16> %c374  store <2 x i16> %i1, ptr addrspace(1) %outgep375  ret void376}377 378declare i32 @llvm.amdgcn.workitem.id.x() #1379 380attributes #0 = { nounwind }381attributes #1 = { nounwind readnone speculatable }382