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 13 define 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 25 define 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 36 define 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 49 define 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 65 define 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 74 define 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 83 define 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 99 define 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 111 define 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 127 define 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 151 define 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