1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %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; FUNC-LABEL: {{^}}ashr_v2i32: 8*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 9*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 12*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 15*9880d681SAndroid Build Coastguard Worker; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 16*9880d681SAndroid Build Coastguard Workerdefine void @ashr_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in) { 17*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %in, i32 1 18*9880d681SAndroid Build Coastguard Worker %a = load <2 x i32>, <2 x i32> addrspace(1)* %in 19*9880d681SAndroid Build Coastguard Worker %b = load <2 x i32>, <2 x i32> addrspace(1)* %b_ptr 20*9880d681SAndroid Build Coastguard Worker %result = ashr <2 x i32> %a, %b 21*9880d681SAndroid Build Coastguard Worker store <2 x i32> %result, <2 x i32> addrspace(1)* %out 22*9880d681SAndroid Build Coastguard Worker ret void 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}ashr_v4i32: 26*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 27*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 28*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 29*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 32*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 33*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 34*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 37*9880d681SAndroid Build Coastguard Worker; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 38*9880d681SAndroid Build Coastguard Worker; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 39*9880d681SAndroid Build Coastguard Worker; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 40*9880d681SAndroid Build Coastguard Workerdefine void @ashr_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) { 41*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1 42*9880d681SAndroid Build Coastguard Worker %a = load <4 x i32>, <4 x i32> addrspace(1)* %in 43*9880d681SAndroid Build Coastguard Worker %b = load <4 x i32>, <4 x i32> addrspace(1)* %b_ptr 44*9880d681SAndroid Build Coastguard Worker %result = ashr <4 x i32> %a, %b 45*9880d681SAndroid Build Coastguard Worker store <4 x i32> %result, <4 x i32> addrspace(1)* %out 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_ashr_i64: 50*9880d681SAndroid Build Coastguard Worker; GCN: s_ashr_i64 s[{{[0-9]}}:{{[0-9]}}], s[{{[0-9]}}:{{[0-9]}}], 8 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker; EG: ASHR 53*9880d681SAndroid Build Coastguard Workerdefine void @s_ashr_i64(i64 addrspace(1)* %out, i32 %in) { 54*9880d681SAndroid Build Coastguard Workerentry: 55*9880d681SAndroid Build Coastguard Worker %in.ext = sext i32 %in to i64 56*9880d681SAndroid Build Coastguard Worker %ashr = ashr i64 %in.ext, 8 57*9880d681SAndroid Build Coastguard Worker store i64 %ashr, i64 addrspace(1)* %out 58*9880d681SAndroid Build Coastguard Worker ret void 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}ashr_i64_2: 62*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; EG: SUB_INT {{\*? *}}[[COMPSH:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHIFT:T[0-9]+\.[XYZW]]] 67*9880d681SAndroid Build Coastguard Worker; EG: LSHL {{\* *}}[[TEMP:T[0-9]+\.[XYZW]]], [[OPHI:T[0-9]+\.[XYZW]]], {{[[COMPSH]]|PV.[XYZW]}} 68*9880d681SAndroid Build Coastguard Worker; EG-DAG: ADD_INT {{\*? *}}[[BIGSH:T[0-9]+\.[XYZW]]], [[SHIFT]], literal 69*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{\*? *}}[[OVERF:T[0-9]+\.[XYZW]]], {{[[TEMP]]|PV.[XYZW]}}, 1 70*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHR {{\*? *}}[[LOSMTMP:T[0-9]+\.[XYZW]]], [[OPLO:T[0-9]+\.[XYZW]]], [[SHIFT]] 71*9880d681SAndroid Build Coastguard Worker; EG-DAG: OR_INT {{\*? *}}[[LOSM:T[0-9]+\.[XYZW]]], {{[[LOSMTMP]]|PV.[XYZW]|PS}}, {{[[OVERF]]|PV.[XYZW]}} 72*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{\*? *}}[[HISM:T[0-9]+\.[XYZW]]], [[OPHI]], {{PS|PV.[XYZW]|[[SHIFT]]}} 73*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{\*? *}}[[LOBIG:T[0-9]+\.[XYZW]]], [[OPHI]], literal 74*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{\*? *}}[[HIBIG:T[0-9]+\.[XYZW]]], [[OPHI]], literal 75*9880d681SAndroid Build Coastguard Worker; EG-DAG: SETGT_UINT {{\*? *}}[[RESC:T[0-9]+\.[XYZW]]], [[SHIFT]], literal 76*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\*? *}}[[RESLO:T[0-9]+\.[XYZW]]], {{T[0-9]+\.[XYZW]}} 77*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\*? *}}[[RESHI:T[0-9]+\.[XYZW]]], {{T[0-9]+\.[XYZW]}} 78*9880d681SAndroid Build Coastguard Workerdefine void @ashr_i64_2(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 79*9880d681SAndroid Build Coastguard Workerentry: 80*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr i64, i64 addrspace(1)* %in, i64 1 81*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %in 82*9880d681SAndroid Build Coastguard Worker %b = load i64, i64 addrspace(1)* %b_ptr 83*9880d681SAndroid Build Coastguard Worker %result = ashr i64 %a, %b 84*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %out 85*9880d681SAndroid Build Coastguard Worker ret void 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}ashr_v2i64: 89*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 90*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{\*? *}}[[COMPSHA:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHA:T[0-9]+\.[XYZW]]] 93*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{\*? *}}[[COMPSHB:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHB:T[0-9]+\.[XYZW]]] 94*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{\*? *}}[[COMPSHA]] 95*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{\*? *}}[[COMPSHB]] 96*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{.*}}, 1 97*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{.*}}, 1 98*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, [[SHA]] 99*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, [[SHB]] 100*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHR {{.*}}, [[SHA]] 101*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHR {{.*}}, [[SHB]] 102*9880d681SAndroid Build Coastguard Worker; EG-DAG: OR_INT 103*9880d681SAndroid Build Coastguard Worker; EG-DAG: OR_INT 104*9880d681SAndroid Build Coastguard Worker; EG-DAG: ADD_INT {{\*? *}}[[BIGSHA:T[0-9]+\.[XYZW]]]{{.*}}, literal 105*9880d681SAndroid Build Coastguard Worker; EG-DAG: ADD_INT {{\*? *}}[[BIGSHB:T[0-9]+\.[XYZW]]]{{.*}}, literal 106*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR 107*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR 108*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, literal 109*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, literal 110*9880d681SAndroid Build Coastguard Worker; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHA]], literal 111*9880d681SAndroid Build Coastguard Worker; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHB]], literal 112*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 113*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 114*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 115*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 116*9880d681SAndroid Build Coastguard Workerdefine void @ashr_v2i64(<2 x i64> addrspace(1)* %out, <2 x i64> addrspace(1)* %in) { 117*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <2 x i64>, <2 x i64> addrspace(1)* %in, i64 1 118*9880d681SAndroid Build Coastguard Worker %a = load <2 x i64>, <2 x i64> addrspace(1)* %in 119*9880d681SAndroid Build Coastguard Worker %b = load <2 x i64>, <2 x i64> addrspace(1)* %b_ptr 120*9880d681SAndroid Build Coastguard Worker %result = ashr <2 x i64> %a, %b 121*9880d681SAndroid Build Coastguard Worker store <2 x i64> %result, <2 x i64> addrspace(1)* %out 122*9880d681SAndroid Build Coastguard Worker ret void 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker; FIXME: Broken on r600 126*9880d681SAndroid Build Coastguard Worker; XFUNC-LABEL: {{^}}s_ashr_v2i64: 127*9880d681SAndroid Build Coastguard Worker; XGCN: s_ashr_i64 {{s\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], s[0-9]+}} 128*9880d681SAndroid Build Coastguard Worker; XGCN: s_ashr_i64 {{s\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], s[0-9]+}} 129*9880d681SAndroid Build Coastguard Worker; define void @s_ashr_v2i64(<2 x i64> addrspace(1)* %out, <2 x i64> addrspace(1)* %in, <2 x i64> %a, <2 x i64> %b) { 130*9880d681SAndroid Build Coastguard Worker; %result = ashr <2 x i64> %a, %b 131*9880d681SAndroid Build Coastguard Worker; store <2 x i64> %result, <2 x i64> addrspace(1)* %out 132*9880d681SAndroid Build Coastguard Worker; ret void 133*9880d681SAndroid Build Coastguard Worker; } 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}ashr_v4i64: 136*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 137*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 138*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 139*9880d681SAndroid Build Coastguard Worker; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 142*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 143*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 144*9880d681SAndroid Build Coastguard Worker; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{\*? *}}[[COMPSHA:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHA:T[0-9]+\.[XYZW]]] 147*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{\*? *}}[[COMPSHB:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHB:T[0-9]+\.[XYZW]]] 148*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{\*? *}}[[COMPSHC:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHC:T[0-9]+\.[XYZW]]] 149*9880d681SAndroid Build Coastguard Worker; EG-DAG: SUB_INT {{\*? *}}[[COMPSHD:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHD:T[0-9]+\.[XYZW]]] 150*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{\*? *}}[[COMPSHA]] 151*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{\*? *}}[[COMPSHB]] 152*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{\*? *}}[[COMPSHC]] 153*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{\*? *}}[[COMPSHD]] 154*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{.*}}, 1 155*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{.*}}, 1 156*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{.*}}, 1 157*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHL {{.*}}, 1 158*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, [[SHA]] 159*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, [[SHB]] 160*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, [[SHC]] 161*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, [[SHD]] 162*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHR {{.*}}, [[SHA]] 163*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHR {{.*}}, [[SHB]] 164*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHR {{.*}}, [[SHA]] 165*9880d681SAndroid Build Coastguard Worker; EG-DAG: LSHR {{.*}}, [[SHB]] 166*9880d681SAndroid Build Coastguard Worker; EG-DAG: OR_INT 167*9880d681SAndroid Build Coastguard Worker; EG-DAG: OR_INT 168*9880d681SAndroid Build Coastguard Worker; EG-DAG: OR_INT 169*9880d681SAndroid Build Coastguard Worker; EG-DAG: OR_INT 170*9880d681SAndroid Build Coastguard Worker; EG-DAG: ADD_INT {{\*? *}}[[BIGSHA:T[0-9]+\.[XYZW]]]{{.*}}, literal 171*9880d681SAndroid Build Coastguard Worker; EG-DAG: ADD_INT {{\*? *}}[[BIGSHB:T[0-9]+\.[XYZW]]]{{.*}}, literal 172*9880d681SAndroid Build Coastguard Worker; EG-DAG: ADD_INT {{\*? *}}[[BIGSHC:T[0-9]+\.[XYZW]]]{{.*}}, literal 173*9880d681SAndroid Build Coastguard Worker; EG-DAG: ADD_INT {{\*? *}}[[BIGSHD:T[0-9]+\.[XYZW]]]{{.*}}, literal 174*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR 175*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR 176*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR 177*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR 178*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, literal 179*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, literal 180*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, literal 181*9880d681SAndroid Build Coastguard Worker; EG-DAG: ASHR {{.*}}, literal 182*9880d681SAndroid Build Coastguard Worker; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHA]], literal 183*9880d681SAndroid Build Coastguard Worker; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHB]], literal 184*9880d681SAndroid Build Coastguard Worker; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHC]], literal 185*9880d681SAndroid Build Coastguard Worker; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHD]], literal 186*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 187*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 188*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 189*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 190*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 191*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 192*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 193*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT 194*9880d681SAndroid Build Coastguard Workerdefine void @ashr_v4i64(<4 x i64> addrspace(1)* %out, <4 x i64> addrspace(1)* %in) { 195*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i64>, <4 x i64> addrspace(1)* %in, i64 1 196*9880d681SAndroid Build Coastguard Worker %a = load <4 x i64>, <4 x i64> addrspace(1)* %in 197*9880d681SAndroid Build Coastguard Worker %b = load <4 x i64>, <4 x i64> addrspace(1)* %b_ptr 198*9880d681SAndroid Build Coastguard Worker %result = ashr <4 x i64> %a, %b 199*9880d681SAndroid Build Coastguard Worker store <4 x i64> %result, <4 x i64> addrspace(1)* %out 200*9880d681SAndroid Build Coastguard Worker ret void 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_ashr_32_i64: 204*9880d681SAndroid Build Coastguard Worker; GCN: s_load_dword s[[HI:[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, {{0xc|0x30}} 205*9880d681SAndroid Build Coastguard Worker; GCN: s_ashr_i32 s[[SHIFT:[0-9]+]], s[[HI]], 31 206*9880d681SAndroid Build Coastguard Worker; GCN: s_add_u32 s{{[0-9]+}}, s[[HI]], s{{[0-9]+}} 207*9880d681SAndroid Build Coastguard Worker; GCN: s_addc_u32 s{{[0-9]+}}, s[[SHIFT]], s{{[0-9]+}} 208*9880d681SAndroid Build Coastguard Workerdefine void @s_ashr_32_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) { 209*9880d681SAndroid Build Coastguard Worker %result = ashr i64 %a, 32 210*9880d681SAndroid Build Coastguard Worker %add = add i64 %result, %b 211*9880d681SAndroid Build Coastguard Worker store i64 %add, i64 addrspace(1)* %out 212*9880d681SAndroid Build Coastguard Worker ret void 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_ashr_32_i64: 216*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword v[[HI:[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 217*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword v[[HI:[0-9]+]] 218*9880d681SAndroid Build Coastguard Worker; GCN: v_ashrrev_i32_e32 v[[SHIFT:[0-9]+]], 31, v[[HI]] 219*9880d681SAndroid Build Coastguard Worker; GCN: {{buffer|flat}}_store_dwordx2 {{.*}}v{{\[}}[[HI]]:[[SHIFT]]{{\]}} 220*9880d681SAndroid Build Coastguard Workerdefine void @v_ashr_32_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 221*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() #0 222*9880d681SAndroid Build Coastguard Worker %gep.in = getelementptr i64, i64 addrspace(1)* %in, i32 %tid 223*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr i64, i64 addrspace(1)* %out, i32 %tid 224*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %gep.in 225*9880d681SAndroid Build Coastguard Worker %result = ashr i64 %a, 32 226*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %gep.out 227*9880d681SAndroid Build Coastguard Worker ret void 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_ashr_63_i64: 231*9880d681SAndroid Build Coastguard Worker; GCN: s_load_dword s[[HI:[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, {{0xc|0x30}} 232*9880d681SAndroid Build Coastguard Worker; GCN: s_ashr_i32 s[[SHIFT:[0-9]+]], s[[HI]], 31 233*9880d681SAndroid Build Coastguard Worker; GCN: s_add_u32 {{s[0-9]+}}, s[[SHIFT]], {{s[0-9]+}} 234*9880d681SAndroid Build Coastguard Worker; GCN: s_addc_u32 {{s[0-9]+}}, s[[SHIFT]], {{s[0-9]+}} 235*9880d681SAndroid Build Coastguard Workerdefine void @s_ashr_63_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) { 236*9880d681SAndroid Build Coastguard Worker %result = ashr i64 %a, 63 237*9880d681SAndroid Build Coastguard Worker %add = add i64 %result, %b 238*9880d681SAndroid Build Coastguard Worker store i64 %add, i64 addrspace(1)* %out 239*9880d681SAndroid Build Coastguard Worker ret void 240*9880d681SAndroid Build Coastguard Worker} 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_ashr_63_i64: 243*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword v[[HI:[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 244*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword v[[HI:[0-9]+]] 245*9880d681SAndroid Build Coastguard Worker; GCN: v_ashrrev_i32_e32 v[[SHIFT:[0-9]+]], 31, v[[HI]] 246*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[COPY:[0-9]+]], v[[SHIFT]] 247*9880d681SAndroid Build Coastguard Worker; GCN: {{buffer|flat}}_store_dwordx2 {{.*}}v{{\[}}[[SHIFT]]:[[COPY]]{{\]}} 248*9880d681SAndroid Build Coastguard Workerdefine void @v_ashr_63_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) { 249*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() #0 250*9880d681SAndroid Build Coastguard Worker %gep.in = getelementptr i64, i64 addrspace(1)* %in, i32 %tid 251*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr i64, i64 addrspace(1)* %out, i32 %tid 252*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %gep.in 253*9880d681SAndroid Build Coastguard Worker %result = ashr i64 %a, 63 254*9880d681SAndroid Build Coastguard Worker store i64 %result, i64 addrspace(1)* %gep.out 255*9880d681SAndroid Build Coastguard Worker ret void 256*9880d681SAndroid Build Coastguard Worker} 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 259