136 lines · plain
1; RUN: llc -mtriple=amdgcn -mcpu=tahiti -stop-after=instruction-select < %s | FileCheck -check-prefixes=GCN,GFX6 %s2; RUN: llc -mtriple=amdgcn -mcpu=fiji -stop-after=instruction-select < %s | FileCheck -check-prefixes=GCN,GFX8PLUS %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -stop-after=instruction-select < %s | FileCheck -check-prefixes=GCN,GFX8PLUS %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-vopd=0 -stop-after=instruction-select < %s | FileCheck -check-prefixes=GCN,GFX8PLUS %s5 6; GCN-LABEL: name: s_shl_i327; GCN: S_LSHL_B328define amdgpu_kernel void @s_shl_i32(ptr addrspace(1) %out, i32 %lhs, i32 %rhs) {9 %result = shl i32 %lhs, %rhs10 store i32 %result, ptr addrspace(1) %out11 ret void12}13 14; GCN-LABEL: name: v_shl_i3215; GFX6: V_LSHL_B32_e3216; GFX8PLUS: V_LSHLREV_B32_e3217define amdgpu_kernel void @v_shl_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {18 %tid = call i32 @llvm.amdgcn.workitem.id.x()19 %b_ptr = getelementptr i32, ptr addrspace(1) %in, i32 %tid20 %a = load i32, ptr addrspace(1) %in21 %b = load i32, ptr addrspace(1) %b_ptr22 %result = shl i32 %a, %b23 store i32 %result, ptr addrspace(1) %out24 ret void25}26 27; GCN-LABEL: name: s_lshr_i3228; GCN: S_LSHR_B3229define amdgpu_kernel void @s_lshr_i32(ptr addrspace(1) %out, i32 %lhs, i32 %rhs) {30 %result = lshr i32 %lhs, %rhs31 store i32 %result, ptr addrspace(1) %out32 ret void33}34 35; GCN-LABEL: name: v_lshr_i3236; GFX6: V_LSHR_B32_e3237; GFX8PLUS: V_LSHRREV_B32_e6438define amdgpu_kernel void @v_lshr_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {39 %tid = call i32 @llvm.amdgcn.workitem.id.x()40 %b_ptr = getelementptr i32, ptr addrspace(1) %in, i32 %tid41 %a = load i32, ptr addrspace(1) %in42 %b = load i32, ptr addrspace(1) %b_ptr43 %result = lshr i32 %a, %b44 store i32 %result, ptr addrspace(1) %out45 ret void46}47 48; GCN-LABEL: name: s_ashr_i3249; GCN: S_ASHR_I3250define amdgpu_kernel void @s_ashr_i32(ptr addrspace(1) %out, i32 %lhs, i32 %rhs) #0 {51 %result = ashr i32 %lhs, %rhs52 store i32 %result, ptr addrspace(1) %out53 ret void54}55 56; GCN-LABEL: name: v_ashr_i3257; GFX6: V_ASHR_I32_e3258; GFX8PLUS: V_ASHRREV_I32_e6459define amdgpu_kernel void @v_ashr_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {60 %tid = call i32 @llvm.amdgcn.workitem.id.x()61 %b_ptr = getelementptr i32, ptr addrspace(1) %in, i32 %tid62 %a = load i32, ptr addrspace(1) %in63 %b = load i32, ptr addrspace(1) %b_ptr64 %result = ashr i32 %a, %b65 store i32 %result, ptr addrspace(1) %out66 ret void67}68 69; GCN-LABEL: name: s_shl_i6470; GCN: S_LSHL_B6471define amdgpu_kernel void @s_shl_i64(ptr addrspace(1) %out, i64 %lhs, i64 %rhs) {72 %result = shl i64 %lhs, %rhs73 store i64 %result, ptr addrspace(1) %out74 ret void75}76 77; GCN-LABEL: name: v_shl_i6478; GFX6: V_LSHL_B6479; GFX8: V_LSHLREV_B6480define amdgpu_kernel void @v_shl_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {81 %tid = call i32 @llvm.amdgcn.workitem.id.x()82 %idx = zext i32 %tid to i6483 %b_ptr = getelementptr i64, ptr addrspace(1) %in, i64 %idx84 %a = load i64, ptr addrspace(1) %in85 %b = load i64, ptr addrspace(1) %b_ptr86 %result = shl i64 %a, %b87 store i64 %result, ptr addrspace(1) %out88 ret void89}90 91; GCN-LABEL: name: s_lshr_i6492; GCN: S_LSHR_B6493define amdgpu_kernel void @s_lshr_i64(ptr addrspace(1) %out, i64 %lhs, i64 %rhs) {94 %result = lshr i64 %lhs, %rhs95 store i64 %result, ptr addrspace(1) %out96 ret void97}98 99; GCN-LABEL: name: v_lshr_i64100; GFX6: V_LSHR_B64101; GFX8: V_LSHRREV_B64102define amdgpu_kernel void @v_lshr_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {103 %tid = call i32 @llvm.amdgcn.workitem.id.x()104 %idx = zext i32 %tid to i64105 %b_ptr = getelementptr i64, ptr addrspace(1) %in, i64 %idx106 %a = load i64, ptr addrspace(1) %in107 %b = load i64, ptr addrspace(1) %b_ptr108 %result = lshr i64 %a, %b109 store i64 %result, ptr addrspace(1) %out110 ret void111}112 113; GCN-LABEL: name: s_ashr_i64114; GCN: S_ASHR_I64115define amdgpu_kernel void @s_ashr_i64(ptr addrspace(1) %out, i64 %lhs, i64 %rhs) {116 %result = ashr i64 %lhs, %rhs117 store i64 %result, ptr addrspace(1) %out118 ret void119}120 121; GCN-LABEL: name: v_ashr_i64122; GFX6: V_ASHR_I64123; GFX8: V_ASHRREV_I64124define amdgpu_kernel void @v_ashr_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {125 %tid = call i32 @llvm.amdgcn.workitem.id.x()126 %idx = zext i32 %tid to i64127 %b_ptr = getelementptr i64, ptr addrspace(1) %in, i64 %idx128 %a = load i64, ptr addrspace(1) %in129 %b = load i64, ptr addrspace(1) %b_ptr130 %result = ashr i64 %a, %b131 store i64 %result, ptr addrspace(1) %out132 ret void133}134 135declare i32 @llvm.amdgcn.workitem.id.x()136