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 12 define 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 24 define 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 35 define 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 48 define 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 64 define 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 73 define 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 82 define 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 98 define 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 110 define 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 126 define 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 150 define 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