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