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