1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck -check-prefix=GCN -check-prefix=SI %s 2*9880d681SAndroid Build Coastguard Worker; XUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck -check-prefix=GCN -check-prefix=VI %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck --check-prefix=EG %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() #0 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker;EG: {{^}}shl_v2i32: 9*9880d681SAndroid Build Coastguard Worker;EG: LSHL {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 10*9880d681SAndroid Build Coastguard Worker;EG: LSHL {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker;SI: {{^}}shl_v2i32: 13*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 14*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker;VI: {{^}}shl_v2i32: 17*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 18*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine void @shl_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in) { 21*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %in, i32 1 22*9880d681SAndroid Build Coastguard Worker %a = load <2 x i32>, <2 x i32> addrspace(1) * %in 23*9880d681SAndroid Build Coastguard Worker %b = load <2 x i32>, <2 x i32> addrspace(1) * %b_ptr 24*9880d681SAndroid Build Coastguard Worker %result = shl <2 x i32> %a, %b 25*9880d681SAndroid Build Coastguard Worker store <2 x i32> %result, <2 x i32> addrspace(1)* %out 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker;EG: {{^}}shl_v4i32: 30*9880d681SAndroid Build Coastguard Worker;EG: LSHL {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 31*9880d681SAndroid Build Coastguard Worker;EG: LSHL {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 32*9880d681SAndroid Build Coastguard Worker;EG: LSHL {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 33*9880d681SAndroid Build Coastguard Worker;EG: LSHL {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker;SI: {{^}}shl_v4i32: 36*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 37*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 38*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 39*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker;VI: {{^}}shl_v4i32: 42*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 43*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 44*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 45*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine void @shl_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) { 48*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1 49*9880d681SAndroid Build Coastguard Worker %a = load <4 x i32>, <4 x i32> addrspace(1) * %in 50*9880d681SAndroid Build Coastguard Worker %b = load <4 x i32>, <4 x i32> addrspace(1) * %b_ptr 51*9880d681SAndroid Build Coastguard Worker %result = shl <4 x i32> %a, %b 52*9880d681SAndroid Build Coastguard Worker store <4 x i32> %result, <4 x i32> addrspace(1)* %out 53*9880d681SAndroid Build Coastguard Worker ret void 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker;EG-LABEL: {{^}}shl_i64: 57*9880d681SAndroid Build Coastguard Worker;EG: SUB_INT {{\*? *}}[[COMPSH:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHIFT:T[0-9]+\.[XYZW]]] 58*9880d681SAndroid Build Coastguard Worker;EG: LSHR {{\* *}}[[TEMP:T[0-9]+\.[XYZW]]], [[OPLO:T[0-9]+\.[XYZW]]], {{[[COMPSH]]|PV.[XYZW]}} 59*9880d681SAndroid Build Coastguard Worker;EG-DAG: ADD_INT {{\*? *}}[[BIGSH:T[0-9]+\.[XYZW]]], [[SHIFT]], literal 60*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{\*? *}}[[OVERF:T[0-9]+\.[XYZW]]], {{[[TEMP]]|PV.[XYZW]}}, 1 61*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{\*? *}}[[HISMTMP:T[0-9]+\.[XYZW]]], [[OPHI:T[0-9]+\.[XYZW]]], [[SHIFT]] 62*9880d681SAndroid Build Coastguard Worker;EG-DAG: OR_INT {{\*? *}}[[HISM:T[0-9]+\.[XYZW]]], {{[[HISMTMP]]|PV.[XYZW]|PS}}, {{[[OVERF]]|PV.[XYZW]}} 63*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{\*? *}}[[LOSM:T[0-9]+\.[XYZW]]], [[OPLO]], {{PS|[[SHIFT]]|PV.[XYZW]}} 64*9880d681SAndroid Build Coastguard Worker;EG-DAG: SETGT_UINT {{\*? *}}[[RESC:T[0-9]+\.[XYZW]]], [[SHIFT]], literal 65*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{\*? *}}[[RESLO:T[0-9]+\.[XYZW]]], {{T[0-9]+\.[XYZW]}} 66*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{\*? *}}[[RESHI:T[0-9]+\.[XYZW]]], {{T[0-9]+\.[XYZW], .*}}, 0.0 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker;SI: {{^}}shl_i64: 69*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker;VI: {{^}}shl_i64: 72*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine void @shl_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 75*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr i64, i64 addrspace(1)* %in, i64 1 76*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1) * %in 77*9880d681SAndroid Build Coastguard Worker %b = load i64, i64 addrspace(1) * %b_ptr 78*9880d681SAndroid Build Coastguard Worker %result = shl i64 %a, %b 79*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %out 80*9880d681SAndroid Build Coastguard Worker ret void 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker;EG-LABEL: {{^}}shl_v2i64: 84*9880d681SAndroid Build Coastguard Worker;EG-DAG: SUB_INT {{\*? *}}[[COMPSHA:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHA:T[0-9]+\.[XYZW]]] 85*9880d681SAndroid Build Coastguard Worker;EG-DAG: SUB_INT {{\*? *}}[[COMPSHB:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHB:T[0-9]+\.[XYZW]]] 86*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{\*? *}}[[COMPSHA]] 87*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{\*? *}}[[COMPSHB]] 88*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{.*}}, 1 89*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{.*}}, 1 90*9880d681SAndroid Build Coastguard Worker;EG-DAG: ADD_INT {{\*? *}}[[BIGSHA:T[0-9]+\.[XYZW]]]{{.*}}, literal 91*9880d681SAndroid Build Coastguard Worker;EG-DAG: ADD_INT {{\*? *}}[[BIGSHB:T[0-9]+\.[XYZW]]]{{.*}}, literal 92*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHA]] 93*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHB]] 94*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHA]] 95*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHB]] 96*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL 97*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL 98*9880d681SAndroid Build Coastguard Worker;EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHA]], literal 99*9880d681SAndroid Build Coastguard Worker;EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHB]], literal 100*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{.*}}, 0.0 101*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{.*}}, 0.0 102*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT 103*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker;SI: {{^}}shl_v2i64: 106*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 107*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker;VI: {{^}}shl_v2i64: 110*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 111*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefine void @shl_v2i64(<2 x i64> addrspace(1)* %out, <2 x i64> addrspace(1)* %in) { 114*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <2 x i64>, <2 x i64> addrspace(1)* %in, i64 1 115*9880d681SAndroid Build Coastguard Worker %a = load <2 x i64>, <2 x i64> addrspace(1) * %in 116*9880d681SAndroid Build Coastguard Worker %b = load <2 x i64>, <2 x i64> addrspace(1) * %b_ptr 117*9880d681SAndroid Build Coastguard Worker %result = shl <2 x i64> %a, %b 118*9880d681SAndroid Build Coastguard Worker store <2 x i64> %result, <2 x i64> addrspace(1)* %out 119*9880d681SAndroid Build Coastguard Worker ret void 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker;EG: {{^}}shl_v4i64: 123*9880d681SAndroid Build Coastguard Worker;EG-DAG: SUB_INT {{\*? *}}[[COMPSHA:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHA:T[0-9]+\.[XYZW]]] 124*9880d681SAndroid Build Coastguard Worker;EG-DAG: SUB_INT {{\*? *}}[[COMPSHB:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHB:T[0-9]+\.[XYZW]]] 125*9880d681SAndroid Build Coastguard Worker;EG-DAG: SUB_INT {{\*? *}}[[COMPSHC:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHC:T[0-9]+\.[XYZW]]] 126*9880d681SAndroid Build Coastguard Worker;EG-DAG: SUB_INT {{\*? *}}[[COMPSHD:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHD:T[0-9]+\.[XYZW]]] 127*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{\*? *}}[[COMPSHA]] 128*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{\*? *}}[[COMPSHB]] 129*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{\*? *}}[[COMPSHC]] 130*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{\*? *}}[[COMPSHD]] 131*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{.*}}, 1 132*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{.*}}, 1 133*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{.*}}, 1 134*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHR {{.*}}, 1 135*9880d681SAndroid Build Coastguard Worker;EG-DAG: ADD_INT {{\*? *}}[[BIGSHA:T[0-9]+\.[XYZW]]]{{.*}}, literal 136*9880d681SAndroid Build Coastguard Worker;EG-DAG: ADD_INT {{\*? *}}[[BIGSHB:T[0-9]+\.[XYZW]]]{{.*}}, literal 137*9880d681SAndroid Build Coastguard Worker;EG-DAG: ADD_INT {{\*? *}}[[BIGSHC:T[0-9]+\.[XYZW]]]{{.*}}, literal 138*9880d681SAndroid Build Coastguard Worker;EG-DAG: ADD_INT {{\*? *}}[[BIGSHD:T[0-9]+\.[XYZW]]]{{.*}}, literal 139*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHA]] 140*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHB]] 141*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHC]] 142*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHD]] 143*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHA]] 144*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHB]] 145*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHC]] 146*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL {{.*}}, [[SHD]] 147*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL 148*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL 149*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL 150*9880d681SAndroid Build Coastguard Worker;EG-DAG: LSHL 151*9880d681SAndroid Build Coastguard Worker;EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHA]], literal 152*9880d681SAndroid Build Coastguard Worker;EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHB]], literal 153*9880d681SAndroid Build Coastguard Worker;EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHC]], literal 154*9880d681SAndroid Build Coastguard Worker;EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHD]], literal 155*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{.*}}, 0.0 156*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{.*}}, 0.0 157*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{.*}}, 0.0 158*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT {{.*}}, 0.0 159*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT 160*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT 161*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT 162*9880d681SAndroid Build Coastguard Worker;EG-DAG: CNDE_INT 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker;SI: {{^}}shl_v4i64: 165*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 166*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 167*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 168*9880d681SAndroid Build Coastguard Worker;SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker;VI: {{^}}shl_v4i64: 171*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 172*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 173*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 174*9880d681SAndroid Build Coastguard Worker;VI: v_lshlrev_b64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerdefine void @shl_v4i64(<4 x i64> addrspace(1)* %out, <4 x i64> addrspace(1)* %in) { 177*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i64>, <4 x i64> addrspace(1)* %in, i64 1 178*9880d681SAndroid Build Coastguard Worker %a = load <4 x i64>, <4 x i64> addrspace(1) * %in 179*9880d681SAndroid Build Coastguard Worker %b = load <4 x i64>, <4 x i64> addrspace(1) * %b_ptr 180*9880d681SAndroid Build Coastguard Worker %result = shl <4 x i64> %a, %b 181*9880d681SAndroid Build Coastguard Worker store <4 x i64> %result, <4 x i64> addrspace(1)* %out 182*9880d681SAndroid Build Coastguard Worker ret void 183*9880d681SAndroid Build Coastguard Worker} 184*9880d681SAndroid Build Coastguard Worker 185*9880d681SAndroid Build Coastguard Worker; Make sure load width gets reduced to i32 load. 186*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_shl_32_i64: 187*9880d681SAndroid Build Coastguard Worker; GCN-DAG: s_load_dword [[LO_A:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0xb{{$}} 188*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[VLO:[0-9]+]], 0{{$}} 189*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[VHI:[0-9]+]], [[LO_A]] 190*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[VLO]]:[[VHI]]{{\]}} 191*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_32_i64(i64 addrspace(1)* %out, i64 %a) { 192*9880d681SAndroid Build Coastguard Worker %result = shl i64 %a, 32 193*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %out 194*9880d681SAndroid Build Coastguard Worker ret void 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_shl_32_i64: 198*9880d681SAndroid Build Coastguard Worker; GCN-DAG: buffer_load_dword v[[LO_A:[0-9]+]], 199*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[VLO:[0-9]+]], 0{{$}} 200*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[VLO]]:[[LO_A]]{{\]}} 201*9880d681SAndroid Build Coastguard Workerdefine void @v_shl_32_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 202*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() #0 203*9880d681SAndroid Build Coastguard Worker %gep.in = getelementptr i64, i64 addrspace(1)* %in, i32 %tid 204*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr i64, i64 addrspace(1)* %out, i32 %tid 205*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %gep.in 206*9880d681SAndroid Build Coastguard Worker %result = shl i64 %a, 32 207*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %gep.out 208*9880d681SAndroid Build Coastguard Worker ret void 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_constant_i64 212*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}} 213*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_constant_i64(i64 addrspace(1)* %out, i64 %a) { 214*9880d681SAndroid Build Coastguard Worker %shl = shl i64 281474976710655, %a 215*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 216*9880d681SAndroid Build Coastguard Worker ret void 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_shl_constant_i64: 220*9880d681SAndroid Build Coastguard Worker; SI-DAG: buffer_load_dword [[VAL:v[0-9]+]] 221*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[KLO:[0-9]+]], 0xab19b207 222*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_movk_i32 s[[KHI:[0-9]+]], 0x11e{{$}} 223*9880d681SAndroid Build Coastguard Worker; SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\]}}, s{{\[}}[[KLO]]:[[KHI]]{{\]}}, [[VAL]] 224*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 225*9880d681SAndroid Build Coastguard Workerdefine void @v_shl_constant_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 226*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %aptr, align 8 227*9880d681SAndroid Build Coastguard Worker %shl = shl i64 1231231234567, %a 228*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 229*9880d681SAndroid Build Coastguard Worker ret void 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_shl_i64_32_bit_constant: 233*9880d681SAndroid Build Coastguard Worker; SI-DAG: buffer_load_dword [[VAL:v[0-9]+]] 234*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[KLO:[0-9]+]], 0x12d687{{$}} 235*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[KHI:[0-9]+]], 0{{$}} 236*9880d681SAndroid Build Coastguard Worker; SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\]}}, s{{\[}}[[KLO]]:[[KHI]]{{\]}}, [[VAL]] 237*9880d681SAndroid Build Coastguard Workerdefine void @v_shl_i64_32_bit_constant(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 238*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %aptr, align 8 239*9880d681SAndroid Build Coastguard Worker %shl = shl i64 1234567, %a 240*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 241*9880d681SAndroid Build Coastguard Worker ret void 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_shl_inline_imm_64_i64: 245*9880d681SAndroid Build Coastguard Worker; SI: v_lshl_b64 {{v\[[0-9]+:[0-9]+\]}}, 64, {{v[0-9]+}} 246*9880d681SAndroid Build Coastguard Workerdefine void @v_shl_inline_imm_64_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 247*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %aptr, align 8 248*9880d681SAndroid Build Coastguard Worker %shl = shl i64 64, %a 249*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 250*9880d681SAndroid Build Coastguard Worker ret void 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_64_i64: 254*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, 64, s{{[0-9]+}} 255*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_64_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 256*9880d681SAndroid Build Coastguard Worker %shl = shl i64 64, %a 257*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 258*9880d681SAndroid Build Coastguard Worker ret void 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_1_i64: 262*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, 1, s{{[0-9]+}} 263*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_1_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 264*9880d681SAndroid Build Coastguard Worker %shl = shl i64 1, %a 265*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 266*9880d681SAndroid Build Coastguard Worker ret void 267*9880d681SAndroid Build Coastguard Worker} 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_1.0_i64: 270*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, 1.0, s{{[0-9]+}} 271*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_1.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 272*9880d681SAndroid Build Coastguard Worker %shl = shl i64 4607182418800017408, %a 273*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 274*9880d681SAndroid Build Coastguard Worker ret void 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_neg_1.0_i64: 278*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, -1.0, s{{[0-9]+}} 279*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_neg_1.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 280*9880d681SAndroid Build Coastguard Worker %shl = shl i64 13830554455654793216, %a 281*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 282*9880d681SAndroid Build Coastguard Worker ret void 283*9880d681SAndroid Build Coastguard Worker} 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_0.5_i64: 286*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, 0.5, s{{[0-9]+}} 287*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_0.5_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 288*9880d681SAndroid Build Coastguard Worker %shl = shl i64 4602678819172646912, %a 289*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 290*9880d681SAndroid Build Coastguard Worker ret void 291*9880d681SAndroid Build Coastguard Worker} 292*9880d681SAndroid Build Coastguard Worker 293*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_neg_0.5_i64: 294*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, -0.5, s{{[0-9]+}} 295*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_neg_0.5_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 296*9880d681SAndroid Build Coastguard Worker %shl = shl i64 13826050856027422720, %a 297*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 298*9880d681SAndroid Build Coastguard Worker ret void 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_2.0_i64: 302*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, 2.0, s{{[0-9]+}} 303*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_2.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 304*9880d681SAndroid Build Coastguard Worker %shl = shl i64 4611686018427387904, %a 305*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 306*9880d681SAndroid Build Coastguard Worker ret void 307*9880d681SAndroid Build Coastguard Worker} 308*9880d681SAndroid Build Coastguard Worker 309*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_neg_2.0_i64: 310*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, -2.0, s{{[0-9]+}} 311*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_neg_2.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 312*9880d681SAndroid Build Coastguard Worker %shl = shl i64 13835058055282163712, %a 313*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 314*9880d681SAndroid Build Coastguard Worker ret void 315*9880d681SAndroid Build Coastguard Worker} 316*9880d681SAndroid Build Coastguard Worker 317*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_4.0_i64: 318*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, 4.0, s{{[0-9]+}} 319*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 320*9880d681SAndroid Build Coastguard Worker %shl = shl i64 4616189618054758400, %a 321*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 322*9880d681SAndroid Build Coastguard Worker ret void 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_neg_4.0_i64: 326*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, -4.0, s{{[0-9]+}} 327*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_neg_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 328*9880d681SAndroid Build Coastguard Worker %shl = shl i64 13839561654909534208, %a 329*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 330*9880d681SAndroid Build Coastguard Worker ret void 331*9880d681SAndroid Build Coastguard Worker} 332*9880d681SAndroid Build Coastguard Worker 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Worker; Test with the 64-bit integer bitpattern for a 32-bit float in the 335*9880d681SAndroid Build Coastguard Worker; low 32-bits, which is not a valid 64-bit inline immmediate. 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_f32_4.0_i64: 338*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_LO:[0-9]+]], 4.0 339*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_HI:[0-9]+]], 0{{$}} 340*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[}}[[K_LO]]:[[K_HI]]{{\]}}, s{{[0-9]+}} 341*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_f32_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 342*9880d681SAndroid Build Coastguard Worker %shl = shl i64 1082130432, %a 343*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 344*9880d681SAndroid Build Coastguard Worker ret void 345*9880d681SAndroid Build Coastguard Worker} 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Worker; FIXME: Copy of -1 register 348*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_imm_f32_neg_4.0_i64: 349*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_LO:[0-9]+]], -4.0 350*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_HI:[0-9]+]], -1{{$}} 351*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_HI_COPY:[0-9]+]], s[[K_HI]] 352*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[}}[[K_LO]]:[[K_HI_COPY]]{{\]}}, s{{[0-9]+}} 353*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_imm_f32_neg_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 354*9880d681SAndroid Build Coastguard Worker %shl = shl i64 -1065353216, %a 355*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 356*9880d681SAndroid Build Coastguard Worker ret void 357*9880d681SAndroid Build Coastguard Worker} 358*9880d681SAndroid Build Coastguard Worker 359*9880d681SAndroid Build Coastguard Worker; Shift into upper 32-bits 360*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_high_imm_f32_4.0_i64: 361*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_HI:[0-9]+]], 4.0 362*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_LO:[0-9]+]], 0{{$}} 363*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[}}[[K_LO]]:[[K_HI]]{{\]}}, s{{[0-9]+}} 364*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_high_imm_f32_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 365*9880d681SAndroid Build Coastguard Worker %shl = shl i64 4647714815446351872, %a 366*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 367*9880d681SAndroid Build Coastguard Worker ret void 368*9880d681SAndroid Build Coastguard Worker} 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_shl_inline_high_imm_f32_neg_4.0_i64: 371*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_HI:[0-9]+]], -4.0 372*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 s[[K_LO:[0-9]+]], 0{{$}} 373*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[}}[[K_LO]]:[[K_HI]]{{\]}}, s{{[0-9]+}} 374*9880d681SAndroid Build Coastguard Workerdefine void @s_shl_inline_high_imm_f32_neg_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 375*9880d681SAndroid Build Coastguard Worker %shl = shl i64 13871086852301127680, %a 376*9880d681SAndroid Build Coastguard Worker store i64 %shl, i64 addrspace(1)* %out, align 8 377*9880d681SAndroid Build Coastguard Worker ret void 378*9880d681SAndroid Build Coastguard Worker} 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 381