1*5df1ac78Salex-t; RUN: llc -march=amdgcn -mcpu=tahiti -stop-after=instruction-select -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX6 %s 2*5df1ac78Salex-t; RUN: llc -march=amdgcn -mcpu=fiji -stop-after=instruction-select -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX8-10 %s 3*5df1ac78Salex-t; RUN: llc -march=amdgcn -mcpu=gfx1010 -stop-after=instruction-select -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX8-10 %s 4*5df1ac78Salex-t 5*5df1ac78Salex-t; GCN-LABEL: name: s_shl_i32 6*5df1ac78Salex-t; GCN: S_LSHL_B32 7*5df1ac78Salex-tdefine amdgpu_kernel void @s_shl_i32(i32 addrspace(1)* %out, i32 %lhs, i32 %rhs) { 8*5df1ac78Salex-t %result = shl i32 %lhs, %rhs 9*5df1ac78Salex-t store i32 %result, i32 addrspace(1)* %out 10*5df1ac78Salex-t ret void 11*5df1ac78Salex-t} 12*5df1ac78Salex-t 13*5df1ac78Salex-t; GCN-LABEL: name: v_shl_i32 14*5df1ac78Salex-t; GFX6: V_LSHL_B32_e32 15*5df1ac78Salex-t; GFX8-10: V_LSHLREV_B32_e32 16*5df1ac78Salex-tdefine amdgpu_kernel void @v_shl_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 17*5df1ac78Salex-t %tid = call i32 @llvm.amdgcn.workitem.id.x() 18*5df1ac78Salex-t %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 %tid 19*5df1ac78Salex-t %a = load i32, i32 addrspace(1)* %in 20*5df1ac78Salex-t %b = load i32, i32 addrspace(1)* %b_ptr 21*5df1ac78Salex-t %result = shl i32 %a, %b 22*5df1ac78Salex-t store i32 %result, i32 addrspace(1)* %out 23*5df1ac78Salex-t ret void 24*5df1ac78Salex-t} 25*5df1ac78Salex-t 26*5df1ac78Salex-t; GCN-LABEL: name: s_lshr_i32 27*5df1ac78Salex-t; GCN: S_LSHR_B32 28*5df1ac78Salex-tdefine amdgpu_kernel void @s_lshr_i32(i32 addrspace(1)* %out, i32 %lhs, i32 %rhs) { 29*5df1ac78Salex-t %result = lshr i32 %lhs, %rhs 30*5df1ac78Salex-t store i32 %result, i32 addrspace(1)* %out 31*5df1ac78Salex-t ret void 32*5df1ac78Salex-t} 33*5df1ac78Salex-t 34*5df1ac78Salex-t; GCN-LABEL: name: v_lshr_i32 35*5df1ac78Salex-t; GFX6: V_LSHR_B32_e32 36*5df1ac78Salex-t; GFX8-10: V_LSHRREV_B32_e64 37*5df1ac78Salex-tdefine amdgpu_kernel void @v_lshr_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 38*5df1ac78Salex-t %tid = call i32 @llvm.amdgcn.workitem.id.x() 39*5df1ac78Salex-t %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 %tid 40*5df1ac78Salex-t %a = load i32, i32 addrspace(1)* %in 41*5df1ac78Salex-t %b = load i32, i32 addrspace(1)* %b_ptr 42*5df1ac78Salex-t %result = lshr i32 %a, %b 43*5df1ac78Salex-t store i32 %result, i32 addrspace(1)* %out 44*5df1ac78Salex-t ret void 45*5df1ac78Salex-t} 46*5df1ac78Salex-t 47*5df1ac78Salex-t; GCN-LABEL: name: s_ashr_i32 48*5df1ac78Salex-t; GCN: S_ASHR_I32 49*5df1ac78Salex-tdefine amdgpu_kernel void @s_ashr_i32(i32 addrspace(1)* %out, i32 %lhs, i32 %rhs) #0 { 50*5df1ac78Salex-t %result = ashr i32 %lhs, %rhs 51*5df1ac78Salex-t store i32 %result, i32 addrspace(1)* %out 52*5df1ac78Salex-t ret void 53*5df1ac78Salex-t} 54*5df1ac78Salex-t 55*5df1ac78Salex-t; GCN-LABEL: name: v_ashr_i32 56*5df1ac78Salex-t; GFX6: V_ASHR_I32_e32 57*5df1ac78Salex-t; GFX8-10: V_ASHRREV_I32_e64 58*5df1ac78Salex-tdefine amdgpu_kernel void @v_ashr_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 59*5df1ac78Salex-t %tid = call i32 @llvm.amdgcn.workitem.id.x() 60*5df1ac78Salex-t %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 %tid 61*5df1ac78Salex-t %a = load i32, i32 addrspace(1)* %in 62*5df1ac78Salex-t %b = load i32, i32 addrspace(1)* %b_ptr 63*5df1ac78Salex-t %result = ashr i32 %a, %b 64*5df1ac78Salex-t store i32 %result, i32 addrspace(1)* %out 65*5df1ac78Salex-t ret void 66*5df1ac78Salex-t} 67*5df1ac78Salex-t 68*5df1ac78Salex-t; GCN-LABEL: name: s_shl_i64 69*5df1ac78Salex-t; GCN: S_LSHL_B64 70*5df1ac78Salex-tdefine amdgpu_kernel void @s_shl_i64(i64 addrspace(1)* %out, i64 %lhs, i64 %rhs) { 71*5df1ac78Salex-t %result = shl i64 %lhs, %rhs 72*5df1ac78Salex-t store i64 %result, i64 addrspace(1)* %out 73*5df1ac78Salex-t ret void 74*5df1ac78Salex-t} 75*5df1ac78Salex-t 76*5df1ac78Salex-t; GCN-LABEL: name: v_shl_i64 77*5df1ac78Salex-t; GFX6: V_LSHL_B64 78*5df1ac78Salex-t; GFX8: V_LSHLREV_B64 79*5df1ac78Salex-tdefine amdgpu_kernel void @v_shl_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 80*5df1ac78Salex-t %tid = call i32 @llvm.amdgcn.workitem.id.x() 81*5df1ac78Salex-t %idx = zext i32 %tid to i64 82*5df1ac78Salex-t %b_ptr = getelementptr i64, i64 addrspace(1)* %in, i64 %idx 83*5df1ac78Salex-t %a = load i64, i64 addrspace(1)* %in 84*5df1ac78Salex-t %b = load i64, i64 addrspace(1)* %b_ptr 85*5df1ac78Salex-t %result = shl i64 %a, %b 86*5df1ac78Salex-t store i64 %result, i64 addrspace(1)* %out 87*5df1ac78Salex-t ret void 88*5df1ac78Salex-t} 89*5df1ac78Salex-t 90*5df1ac78Salex-t; GCN-LABEL: name: s_lshr_i64 91*5df1ac78Salex-t; GCN: S_LSHR_B64 92*5df1ac78Salex-tdefine amdgpu_kernel void @s_lshr_i64(i64 addrspace(1)* %out, i64 %lhs, i64 %rhs) { 93*5df1ac78Salex-t %result = lshr i64 %lhs, %rhs 94*5df1ac78Salex-t store i64 %result, i64 addrspace(1)* %out 95*5df1ac78Salex-t ret void 96*5df1ac78Salex-t} 97*5df1ac78Salex-t 98*5df1ac78Salex-t; GCN-LABEL: name: v_lshr_i64 99*5df1ac78Salex-t; GFX6: V_LSHR_B64 100*5df1ac78Salex-t; GFX8: V_LSHRREV_B64 101*5df1ac78Salex-tdefine amdgpu_kernel void @v_lshr_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 102*5df1ac78Salex-t %tid = call i32 @llvm.amdgcn.workitem.id.x() 103*5df1ac78Salex-t %idx = zext i32 %tid to i64 104*5df1ac78Salex-t %b_ptr = getelementptr i64, i64 addrspace(1)* %in, i64 %idx 105*5df1ac78Salex-t %a = load i64, i64 addrspace(1)* %in 106*5df1ac78Salex-t %b = load i64, i64 addrspace(1)* %b_ptr 107*5df1ac78Salex-t %result = lshr i64 %a, %b 108*5df1ac78Salex-t store i64 %result, i64 addrspace(1)* %out 109*5df1ac78Salex-t ret void 110*5df1ac78Salex-t} 111*5df1ac78Salex-t 112*5df1ac78Salex-t; GCN-LABEL: name: s_ashr_i64 113*5df1ac78Salex-t; GCN: S_ASHR_I64 114*5df1ac78Salex-tdefine amdgpu_kernel void @s_ashr_i64(i64 addrspace(1)* %out, i64 %lhs, i64 %rhs) { 115*5df1ac78Salex-t %result = ashr i64 %lhs, %rhs 116*5df1ac78Salex-t store i64 %result, i64 addrspace(1)* %out 117*5df1ac78Salex-t ret void 118*5df1ac78Salex-t} 119*5df1ac78Salex-t 120*5df1ac78Salex-t; GCN-LABEL: name: v_ashr_i64 121*5df1ac78Salex-t; GFX6: V_ASHR_I64 122*5df1ac78Salex-t; GFX8: V_ASHRREV_I64 123*5df1ac78Salex-tdefine amdgpu_kernel void @v_ashr_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 124*5df1ac78Salex-t %tid = call i32 @llvm.amdgcn.workitem.id.x() 125*5df1ac78Salex-t %idx = zext i32 %tid to i64 126*5df1ac78Salex-t %b_ptr = getelementptr i64, i64 addrspace(1)* %in, i64 %idx 127*5df1ac78Salex-t %a = load i64, i64 addrspace(1)* %in 128*5df1ac78Salex-t %b = load i64, i64 addrspace(1)* %b_ptr 129*5df1ac78Salex-t %result = ashr i64 %a, %b 130*5df1ac78Salex-t store i64 %result, i64 addrspace(1)* %out 131*5df1ac78Salex-t ret void 132*5df1ac78Salex-t} 133*5df1ac78Salex-t 134*5df1ac78Salex-tdeclare i32 @llvm.amdgcn.workitem.id.x() 135