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_e64 10; SI: v_cndmask_b32_e64 11; SI: v_cndmask_b32_e64 12; SI: v_cndmask_b32_e64 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_e64 22; SI: v_cndmask_b32_e64 23; SI: v_cndmask_b32_e64 24; SI: v_cndmask_b32_e64 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_e64 34; SI: v_cndmask_b32_e64 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_e64 45; SI: v_cndmask_b32_e64 46; SI: v_cndmask_b32_e64 47; SI: v_cndmask_b32_e64 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_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 64; SI: v_cndmask_b32_e64 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_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 98; SI: v_cndmask_b32_e64 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_e64 108; SI: v_cndmask_b32_e64 109; SI: v_cndmask_b32_e64 110; SI: v_cndmask_b32_e64 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_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 126; SI: v_cndmask_b32_e64 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_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 150; SI: v_cndmask_b32_e64 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