1; RUN: llc -verify-machineinstrs -march=r600 -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2 3; Test expansion of scalar selects on vectors. 4; Evergreen not enabled since it seems to be having problems with doubles. 5 6 7; FUNC-LABEL: @select_v4i8 8; SI: V_CNDMASK_B32_e64 9; SI: V_CNDMASK_B32_e64 10; SI: V_CNDMASK_B32_e64 11; SI: V_CNDMASK_B32_e64 12define void @select_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> %a, <4 x i8> %b, i8 %c) nounwind { 13 %cmp = icmp eq i8 %c, 0 14 %select = select i1 %cmp, <4 x i8> %a, <4 x i8> %b 15 store <4 x i8> %select, <4 x i8> addrspace(1)* %out, align 4 16 ret void 17} 18 19; FUNC-LABEL: @select_v4i16 20; SI: V_CNDMASK_B32_e64 21; SI: V_CNDMASK_B32_e64 22; SI: V_CNDMASK_B32_e64 23; SI: V_CNDMASK_B32_e64 24define void @select_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> %a, <4 x i16> %b, i32 %c) nounwind { 25 %cmp = icmp eq i32 %c, 0 26 %select = select i1 %cmp, <4 x i16> %a, <4 x i16> %b 27 store <4 x i16> %select, <4 x i16> addrspace(1)* %out, align 4 28 ret void 29} 30 31; FUNC-LABEL: @select_v2i32 32; SI: V_CNDMASK_B32_e64 33; SI: V_CNDMASK_B32_e64 34; SI: BUFFER_STORE_DWORDX2 35define void @select_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> %a, <2 x i32> %b, i32 %c) nounwind { 36 %cmp = icmp eq i32 %c, 0 37 %select = select i1 %cmp, <2 x i32> %a, <2 x i32> %b 38 store <2 x i32> %select, <2 x i32> addrspace(1)* %out, align 8 39 ret void 40} 41 42; FUNC-LABEL: @select_v4i32 43; SI: V_CNDMASK_B32_e64 44; SI: V_CNDMASK_B32_e64 45; SI: V_CNDMASK_B32_e64 46; SI: V_CNDMASK_B32_e64 47; SI: BUFFER_STORE_DWORDX4 48define void @select_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> %a, <4 x i32> %b, i32 %c) nounwind { 49 %cmp = icmp eq i32 %c, 0 50 %select = select i1 %cmp, <4 x i32> %a, <4 x i32> %b 51 store <4 x i32> %select, <4 x i32> addrspace(1)* %out, align 16 52 ret void 53} 54 55; FUNC-LABEL: @select_v8i32 56; SI: V_CNDMASK_B32_e64 57; SI: V_CNDMASK_B32_e64 58; SI: V_CNDMASK_B32_e64 59; SI: V_CNDMASK_B32_e64 60; SI: V_CNDMASK_B32_e64 61; SI: V_CNDMASK_B32_e64 62; SI: V_CNDMASK_B32_e64 63; SI: V_CNDMASK_B32_e64 64define void @select_v8i32(<8 x i32> addrspace(1)* %out, <8 x i32> %a, <8 x i32> %b, i32 %c) nounwind { 65 %cmp = icmp eq i32 %c, 0 66 %select = select i1 %cmp, <8 x i32> %a, <8 x i32> %b 67 store <8 x i32> %select, <8 x i32> addrspace(1)* %out, align 16 68 ret void 69} 70 71; FUNC-LABEL: @select_v2f32 72; SI: BUFFER_STORE_DWORDX2 73define void @select_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %a, <2 x float> %b, i32 %c) nounwind { 74 %cmp = icmp eq i32 %c, 0 75 %select = select i1 %cmp, <2 x float> %a, <2 x float> %b 76 store <2 x float> %select, <2 x float> addrspace(1)* %out, align 16 77 ret void 78} 79 80; FUNC-LABEL: @select_v4f32 81; SI: BUFFER_STORE_DWORDX4 82define void @select_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %a, <4 x float> %b, i32 %c) nounwind { 83 %cmp = icmp eq i32 %c, 0 84 %select = select i1 %cmp, <4 x float> %a, <4 x float> %b 85 store <4 x float> %select, <4 x float> addrspace(1)* %out, align 16 86 ret void 87} 88 89; FUNC-LABEL: @select_v8f32 90; SI: V_CNDMASK_B32_e64 91; SI: V_CNDMASK_B32_e64 92; SI: V_CNDMASK_B32_e64 93; SI: V_CNDMASK_B32_e64 94; SI: V_CNDMASK_B32_e64 95; SI: V_CNDMASK_B32_e64 96; SI: V_CNDMASK_B32_e64 97; SI: V_CNDMASK_B32_e64 98define void @select_v8f32(<8 x float> addrspace(1)* %out, <8 x float> %a, <8 x float> %b, i32 %c) nounwind { 99 %cmp = icmp eq i32 %c, 0 100 %select = select i1 %cmp, <8 x float> %a, <8 x float> %b 101 store <8 x float> %select, <8 x float> addrspace(1)* %out, align 16 102 ret void 103} 104 105; FUNC-LABEL: @select_v2f64 106; SI: V_CNDMASK_B32_e64 107; SI: V_CNDMASK_B32_e64 108; SI: V_CNDMASK_B32_e64 109; SI: V_CNDMASK_B32_e64 110define void @select_v2f64(<2 x double> addrspace(1)* %out, <2 x double> %a, <2 x double> %b, i32 %c) nounwind { 111 %cmp = icmp eq i32 %c, 0 112 %select = select i1 %cmp, <2 x double> %a, <2 x double> %b 113 store <2 x double> %select, <2 x double> addrspace(1)* %out, align 16 114 ret void 115} 116 117; FUNC-LABEL: @select_v4f64 118; SI: V_CNDMASK_B32_e64 119; SI: V_CNDMASK_B32_e64 120; SI: V_CNDMASK_B32_e64 121; SI: V_CNDMASK_B32_e64 122; SI: V_CNDMASK_B32_e64 123; SI: V_CNDMASK_B32_e64 124; SI: V_CNDMASK_B32_e64 125; SI: V_CNDMASK_B32_e64 126define void @select_v4f64(<4 x double> addrspace(1)* %out, <4 x double> %a, <4 x double> %b, i32 %c) nounwind { 127 %cmp = icmp eq i32 %c, 0 128 %select = select i1 %cmp, <4 x double> %a, <4 x double> %b 129 store <4 x double> %select, <4 x double> addrspace(1)* %out, align 16 130 ret void 131} 132 133; FUNC-LABEL: @select_v8f64 134; SI: V_CNDMASK_B32_e64 135; SI: V_CNDMASK_B32_e64 136; SI: V_CNDMASK_B32_e64 137; SI: V_CNDMASK_B32_e64 138; SI: V_CNDMASK_B32_e64 139; SI: V_CNDMASK_B32_e64 140; SI: V_CNDMASK_B32_e64 141; SI: V_CNDMASK_B32_e64 142; SI: V_CNDMASK_B32_e64 143; SI: V_CNDMASK_B32_e64 144; SI: V_CNDMASK_B32_e64 145; SI: V_CNDMASK_B32_e64 146; SI: V_CNDMASK_B32_e64 147; SI: V_CNDMASK_B32_e64 148; SI: V_CNDMASK_B32_e64 149; SI: V_CNDMASK_B32_e64 150define void @select_v8f64(<8 x double> addrspace(1)* %out, <8 x double> %a, <8 x double> %b, i32 %c) nounwind { 151 %cmp = icmp eq i32 %c, 0 152 %select = select i1 %cmp, <8 x double> %a, <8 x double> %b 153 store <8 x double> %select, <8 x double> addrspace(1)* %out, align 16 154 ret void 155} 156