1*9880d681SAndroid Build Coastguard Worker;RUN: llc < %s -march=amdgcn -verify-machineinstrs | FileCheck --check-prefix=SI --check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker;RUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck --check-prefix=SI --check-prefix=VI --check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker;RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck --check-prefix=EG --check-prefix=FUNC %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_select_v2i32: 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW]}}, KC0[3].Z 8*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW]}}, KC0[3].Y 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e64 11*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e32 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine void @test_select_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in0, <2 x i32> addrspace(1)* %in1, <2 x i32> %val) { 14*9880d681SAndroid Build Coastguard Workerentry: 15*9880d681SAndroid Build Coastguard Worker %load0 = load <2 x i32>, <2 x i32> addrspace(1)* %in0 16*9880d681SAndroid Build Coastguard Worker %load1 = load <2 x i32>, <2 x i32> addrspace(1)* %in1 17*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <2 x i32> %load0, %load1 18*9880d681SAndroid Build Coastguard Worker %result = select <2 x i1> %cmp, <2 x i32> %val, <2 x i32> %load0 19*9880d681SAndroid Build Coastguard Worker store <2 x i32> %result, <2 x i32> addrspace(1)* %out 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_select_v2f32: 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; EG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 26*9880d681SAndroid Build Coastguard Worker; EG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker;SI: v_cndmask_b32_e64 29*9880d681SAndroid Build Coastguard Worker;SI: v_cndmask_b32_e32 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine void @test_select_v2f32(<2 x float> addrspace(1)* %out, <2 x float> addrspace(1)* %in0, <2 x float> addrspace(1)* %in1) { 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker %0 = load <2 x float>, <2 x float> addrspace(1)* %in0 34*9880d681SAndroid Build Coastguard Worker %1 = load <2 x float>, <2 x float> addrspace(1)* %in1 35*9880d681SAndroid Build Coastguard Worker %cmp = fcmp une <2 x float> %0, %1 36*9880d681SAndroid Build Coastguard Worker %result = select <2 x i1> %cmp, <2 x float> %0, <2 x float> %1 37*9880d681SAndroid Build Coastguard Worker store <2 x float> %result, <2 x float> addrspace(1)* %out 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_select_v4i32: 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW]}}, KC0[4].X 44*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, KC0[3].W 45*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW]}}, KC0[3].Z 46*9880d681SAndroid Build Coastguard Worker; EG-DAG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW]}}, KC0[3].Y 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; FIXME: The shrinking does not happen on tonga 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32 51*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32 52*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32 53*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine void @test_select_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in0, <4 x i32> addrspace(1)* %in1, <4 x i32> %val) { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %load0 = load <4 x i32>, <4 x i32> addrspace(1)* %in0 58*9880d681SAndroid Build Coastguard Worker %load1 = load <4 x i32>, <4 x i32> addrspace(1)* %in1 59*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <4 x i32> %load0, %load1 60*9880d681SAndroid Build Coastguard Worker %result = select <4 x i1> %cmp, <4 x i32> %val, <4 x i32> %load0 61*9880d681SAndroid Build Coastguard Worker store <4 x i32> %result, <4 x i32> addrspace(1)* %out 62*9880d681SAndroid Build Coastguard Worker ret void 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_select_v4f32: 66*9880d681SAndroid Build Coastguard Worker;EG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 67*9880d681SAndroid Build Coastguard Worker;EG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 68*9880d681SAndroid Build Coastguard Worker;EG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 69*9880d681SAndroid Build Coastguard Worker;EG: CNDE_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine void @test_select_v4f32(<4 x float> addrspace(1)* %out, <4 x float> addrspace(1)* %in0, <4 x float> addrspace(1)* %in1) { 72*9880d681SAndroid Build Coastguard Workerentry: 73*9880d681SAndroid Build Coastguard Worker %0 = load <4 x float>, <4 x float> addrspace(1)* %in0 74*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float> addrspace(1)* %in1 75*9880d681SAndroid Build Coastguard Worker %cmp = fcmp une <4 x float> %0, %1 76*9880d681SAndroid Build Coastguard Worker %result = select <4 x i1> %cmp, <4 x float> %0, <4 x float> %1 77*9880d681SAndroid Build Coastguard Worker store <4 x float> %result, <4 x float> addrspace(1)* %out 78*9880d681SAndroid Build Coastguard Worker ret void 79*9880d681SAndroid Build Coastguard Worker} 80