1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -march=amdgcn -mcpu=tahiti -run-pass=legalizer -allow-ginsert-as-artifact=0 -global-isel-abort=0 %s -o - | FileCheck %s 3 4--- 5name: test_select_s32 6body: | 7 bb.0: 8 liveins: $vgpr0 9 ; CHECK-LABEL: name: test_select_s32 10 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 11 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 12 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 13 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 14 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 15 ; CHECK: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[C1]], [[C2]] 16 ; CHECK: $vgpr0 = COPY [[SELECT]](s32) 17 %0:_(s32) = G_CONSTANT i32 0 18 %1:_(s32) = COPY $vgpr0 19 20 %2:_(s1) = G_ICMP intpred(ne), %0, %1 21 %3:_(s32) = G_CONSTANT i32 1 22 %4:_(s32) = G_CONSTANT i32 2 23 %5:_(s32) = G_SELECT %2, %3, %4 24 $vgpr0 = COPY %5 25 26... 27 28--- 29name: test_select_s64 30body: | 31 bb.0: 32 liveins: $vgpr0 33 ; CHECK-LABEL: name: test_select_s64 34 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 35 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 36 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 37 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 38 ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2 39 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[C1]], [[C2]] 40 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](s64) 41 %0:_(s32) = G_CONSTANT i32 0 42 %1:_(s32) = COPY $vgpr0 43 44 %2:_(s1) = G_ICMP intpred(ne), %0, %1 45 %3:_(s64) = G_CONSTANT i64 1 46 %4:_(s64) = G_CONSTANT i64 2 47 %5:_(s64) = G_SELECT %2, %3, %4 48 $vgpr0_vgpr1 = COPY %5 49 50... 51 52--- 53name: test_select_s48 54body: | 55 bb.0: 56 liveins: $vgpr0 57 ; CHECK-LABEL: name: test_select_s48 58 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 59 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 60 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 61 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 62 ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2 63 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[C1]], [[C2]] 64 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](s64) 65 %0:_(s32) = G_CONSTANT i32 0 66 %1:_(s32) = COPY $vgpr0 67 68 %2:_(s1) = G_ICMP intpred(ne), %0, %1 69 %3:_(s48) = G_CONSTANT i48 1 70 %4:_(s48) = G_CONSTANT i48 2 71 %5:_(s48) = G_SELECT %2, %3, %4 72 %6:_(s64) = G_ANYEXT %5 73 $vgpr0_vgpr1 = COPY %6 74 75... 76 77--- 78name: test_select_s16 79body: | 80 bb.0: 81 liveins: $vgpr0 82 ; CHECK-LABEL: name: test_select_s16 83 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 84 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 85 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 86 ; CHECK: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 1 87 ; CHECK: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 2 88 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C1]], [[C2]] 89 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 90 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 91 %0:_(s32) = G_CONSTANT i32 0 92 %1:_(s32) = COPY $vgpr0 93 94 %2:_(s1) = G_ICMP intpred(ne), %0, %1 95 %3:_(s16) = G_CONSTANT i16 1 96 %4:_(s16) = G_CONSTANT i16 2 97 %5:_(s16) = G_SELECT %2, %3, %4 98 %6:_(s32) = G_ANYEXT %5 99 $vgpr0 = COPY %6 100 101... 102 103--- 104name: test_select_s8 105body: | 106 bb.0: 107 liveins: $vgpr0 108 ; CHECK-LABEL: name: test_select_s8 109 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 110 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 111 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 112 ; CHECK: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 1 113 ; CHECK: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 2 114 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C1]], [[C2]] 115 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 116 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 117 %0:_(s32) = G_CONSTANT i32 0 118 %1:_(s32) = COPY $vgpr0 119 120 %2:_(s1) = G_ICMP intpred(ne), %0, %1 121 %3:_(s8) = G_CONSTANT i8 1 122 %4:_(s8) = G_CONSTANT i8 2 123 %5:_(s8) = G_SELECT %2, %3, %4 124 %6:_(s32) = G_ANYEXT %5 125 $vgpr0 = COPY %6 126 127... 128 129--- 130name: test_select_s7 131body: | 132 bb.0: 133 liveins: $vgpr0 134 ; CHECK-LABEL: name: test_select_s7 135 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 136 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 137 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 138 ; CHECK: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 1 139 ; CHECK: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 2 140 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C1]], [[C2]] 141 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 142 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 143 %0:_(s32) = G_CONSTANT i32 0 144 %1:_(s32) = COPY $vgpr0 145 146 %2:_(s1) = G_ICMP intpred(ne), %0, %1 147 %3:_(s7) = G_CONSTANT i7 1 148 %4:_(s7) = G_CONSTANT i7 2 149 %5:_(s7) = G_SELECT %2, %3, %4 150 %6:_(s32) = G_ANYEXT %5 151 $vgpr0 = COPY %6 152 153... 154 155--- 156name: test_select_s96 157body: | 158 bb.0: 159 liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5 , $vgpr6 160 ; CHECK-LABEL: name: test_select_s96 161 ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 162 ; CHECK: [[COPY1:%[0-9]+]]:_(s96) = COPY $vgpr3_vgpr4_vgpr5 163 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr6 164 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 165 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[C]] 166 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY]](s96), 0 167 ; CHECK: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 64 168 ; CHECK: [[EXTRACT2:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY1]](s96), 0 169 ; CHECK: [[EXTRACT3:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY1]](s96), 64 170 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[EXTRACT2]] 171 ; CHECK: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[EXTRACT1]], [[EXTRACT3]] 172 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SELECT]](s64) 173 ; CHECK: [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32), [[SELECT1]](s32) 174 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[MV]](s96) 175 %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 176 %1:_(s96) = COPY $vgpr3_vgpr4_vgpr5 177 %2:_(s32) = COPY $vgpr6 178 %3:_(s32) = G_CONSTANT i32 0 179 180 %4:_(s1) = G_ICMP intpred(ne), %2, %3 181 %5:_(s96) = G_SELECT %4, %0, %1 182 $vgpr0_vgpr1_vgpr2 = COPY %5 183 184... 185 186--- 187name: test_select_s128 188body: | 189 bb.0: 190 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7 , $vgpr8 191 192 ; CHECK-LABEL: name: test_select_s128 193 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 194 ; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 195 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr8 196 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 197 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[C]] 198 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128) 199 ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](s128) 200 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]] 201 ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]] 202 ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT]](s64), [[SELECT1]](s64) 203 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[MV]](s128) 204 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 205 %1:_(s128) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 206 %2:_(s32) = COPY $vgpr8 207 %3:_(s32) = G_CONSTANT i32 0 208 %4:_(s1) = G_ICMP intpred(ne), %2, %3 209 %5:_(s128) = G_SELECT %4, %0, %1 210 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %5 211 212... 213 214--- 215name: test_select_v2s8 216body: | 217 bb.0: 218 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 219 220 ; CHECK-LABEL: name: test_select_v2s8 221 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 222 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 223 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr1_vgpr2 224 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr3_vgpr4 225 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 226 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 227 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>) 228 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32) 229 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32) 230 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC]], [[TRUNC1]] 231 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32) 232 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32) 233 ; CHECK: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC2]], [[TRUNC3]] 234 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 235 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT1]](s16) 236 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32) 237 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 238 %0:_(s32) = COPY $vgpr0 239 %1:_(s32) = G_CONSTANT i32 0 240 %2:_(<2 x s32>) = COPY $vgpr1_vgpr2 241 %3:_(<2 x s32>) = COPY $vgpr3_vgpr4 242 %4:_(<2 x s8>) = G_TRUNC %2 243 %5:_(<2 x s8>) = G_TRUNC %3 244 245 %6:_(s1) = G_ICMP intpred(ne), %0, %1 246 %7:_(<2 x s8>) = G_SELECT %6, %4, %5 247 %8:_(<2 x s32>) = G_ANYEXT %7 248 $vgpr0_vgpr1 = COPY %8 249 250... 251 252--- 253name: test_select_v3s8 254body: | 255 bb.0: 256 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 257 258 ; CHECK-LABEL: name: test_select_v3s8 259 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 260 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 261 ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr1_vgpr2_vgpr3 262 ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 263 ; CHECK: [[TRUNC:%[0-9]+]]:_(<3 x s8>) = G_TRUNC [[COPY1]](<3 x s32>) 264 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<3 x s8>) = G_TRUNC [[COPY2]](<3 x s32>) 265 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 266 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s8>) = G_IMPLICIT_DEF 267 ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s8>) = G_INSERT [[DEF]], [[TRUNC]](<3 x s8>), 0 268 ; CHECK: [[INSERT1:%[0-9]+]]:_(<4 x s8>) = G_INSERT [[DEF]], [[TRUNC1]](<3 x s8>), 0 269 ; CHECK: [[UV:%[0-9]+]]:_(s8), [[UV1:%[0-9]+]]:_(s8), [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[INSERT]](<4 x s8>) 270 ; CHECK: [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[INSERT1]](<4 x s8>) 271 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[UV]](s8) 272 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[UV4]](s8) 273 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[ANYEXT]], [[ANYEXT1]] 274 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[SELECT]](s16) 275 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s16) = G_ANYEXT [[UV1]](s8) 276 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s16) = G_ANYEXT [[UV5]](s8) 277 ; CHECK: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[ANYEXT2]], [[ANYEXT3]] 278 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[SELECT1]](s16) 279 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s16) = G_ANYEXT [[UV2]](s8) 280 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s16) = G_ANYEXT [[UV6]](s8) 281 ; CHECK: [[SELECT2:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[ANYEXT4]], [[ANYEXT5]] 282 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[SELECT2]](s16) 283 ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s16) = G_ANYEXT [[UV3]](s8) 284 ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s16) = G_ANYEXT [[UV7]](s8) 285 ; CHECK: [[SELECT3:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[ANYEXT6]], [[ANYEXT7]] 286 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[SELECT3]](s16) 287 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s8>) = G_BUILD_VECTOR [[TRUNC2]](s8), [[TRUNC3]](s8), [[TRUNC4]](s8), [[TRUNC5]](s8) 288 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s8>) = G_CONCAT_VECTORS [[BUILD_VECTOR]](<4 x s8>), [[DEF]](<4 x s8>), [[DEF]](<4 x s8>) 289 ; CHECK: [[UV8:%[0-9]+]]:_(<3 x s8>), [[UV9:%[0-9]+]]:_(<3 x s8>), [[UV10:%[0-9]+]]:_(<3 x s8>), [[UV11:%[0-9]+]]:_(<3 x s8>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s8>) 290 ; CHECK: [[ANYEXT8:%[0-9]+]]:_(<3 x s32>) = G_ANYEXT [[UV8]](<3 x s8>) 291 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[ANYEXT8]](<3 x s32>) 292 %0:_(s32) = COPY $vgpr0 293 %1:_(s32) = G_CONSTANT i32 0 294 %2:_(<3 x s32>) = COPY $vgpr1_vgpr2_vgpr3 295 %3:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 296 %4:_(<3 x s8>) = G_TRUNC %2 297 %5:_(<3 x s8>) = G_TRUNC %3 298 299 %6:_(s1) = G_ICMP intpred(ne), %0, %1 300 %7:_(<3 x s8>) = G_SELECT %6, %4, %5 301 %8:_(<3 x s32>) = G_ANYEXT %7 302 $vgpr0_vgpr1_vgpr2 = COPY %8 303 304... 305 306--- 307name: test_select_v4s8 308body: | 309 bb.0: 310 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8 311 312 ; CHECK-LABEL: name: test_select_v4s8 313 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 314 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 315 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 316 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 317 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 318 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>) 319 ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<4 x s32>) 320 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32) 321 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV4]](s32) 322 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC]], [[TRUNC1]] 323 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32) 324 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV5]](s32) 325 ; CHECK: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC2]], [[TRUNC3]] 326 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32) 327 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[UV6]](s32) 328 ; CHECK: [[SELECT2:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC4]], [[TRUNC5]] 329 ; CHECK: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32) 330 ; CHECK: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[UV7]](s32) 331 ; CHECK: [[SELECT3:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC6]], [[TRUNC7]] 332 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 333 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT1]](s16) 334 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT2]](s16) 335 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT3]](s16) 336 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32) 337 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<4 x s32>) 338 %0:_(s32) = COPY $vgpr0 339 %1:_(s32) = G_CONSTANT i32 0 340 %2:_(<4 x s32>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 341 %3:_(<4 x s32>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 342 %4:_(<4 x s8>) = G_TRUNC %2 343 %5:_(<4 x s8>) = G_TRUNC %3 344 345 %6:_(s1) = G_ICMP intpred(ne), %0, %1 346 %7:_(<4 x s8>) = G_SELECT %6, %4, %5 347 %8:_(<4 x s32>) = G_ANYEXT %7 348 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %8 349 350... 351 352--- 353name: test_select_v2s16 354body: | 355 bb.0: 356 liveins: $vgpr0, $vgpr1, $vgpr2 357 ; CHECK-LABEL: name: test_select_v2s16 358 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 359 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 360 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 361 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 362 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[C]] 363 ; CHECK: [[SELECT:%[0-9]+]]:_(<2 x s16>) = G_SELECT [[ICMP]](s1), [[COPY]], [[COPY1]] 364 ; CHECK: $vgpr0 = COPY [[SELECT]](<2 x s16>) 365 %0:_(<2 x s16>) = COPY $vgpr0 366 %1:_(<2 x s16>) = COPY $vgpr1 367 %2:_(s32) = COPY $vgpr2 368 %3:_(s32) = G_CONSTANT i32 0 369 370 %4:_(s1) = G_ICMP intpred(ne), %2, %3 371 %5:_(<2 x s16>) = G_SELECT %4, %0, %1 372 $vgpr0 = COPY %5 373 374... 375 376--- 377name: test_select_v3s16 378body: | 379 bb.0: 380 liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5, $vgpr6 381 ; CHECK-LABEL: name: test_select_v3s16 382 ; CHECK: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 383 ; CHECK: [[COPY1:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr3_vgpr4_vgpr5 384 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr6 385 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 386 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[C]] 387 ; CHECK: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>) 388 ; CHECK: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[COPY1]](<6 x s16>) 389 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 390 ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[UV]](<3 x s16>), 0 391 ; CHECK: [[INSERT1:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[UV2]](<3 x s16>), 0 392 ; CHECK: [[SELECT:%[0-9]+]]:_(<4 x s16>) = G_SELECT [[ICMP]](s1), [[INSERT]], [[INSERT1]] 393 ; CHECK: [[DEF1:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 394 ; CHECK: [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[SELECT]](<4 x s16>) 395 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>) 396 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 397 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 398 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>) 399 ; CHECK: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF1]](<4 x s16>) 400 ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV6]](<2 x s16>) 401 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C1]](s32) 402 ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV7]](<2 x s16>) 403 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 404 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C2]] 405 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C2]] 406 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 407 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 408 ; CHECK: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 409 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C2]] 410 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[BITCAST2]], [[C2]] 411 ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32) 412 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 413 ; CHECK: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 414 ; CHECK: [[AND4:%[0-9]+]]:_(s32) = G_AND [[LSHR1]], [[C2]] 415 ; CHECK: [[AND5:%[0-9]+]]:_(s32) = G_AND [[BITCAST3]], [[C2]] 416 ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C1]](s32) 417 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]] 418 ; CHECK: [[BITCAST6:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32) 419 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BITCAST4]](<2 x s16>), [[BITCAST5]](<2 x s16>), [[BITCAST6]](<2 x s16>) 420 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[CONCAT_VECTORS]](<6 x s16>) 421 %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 422 %1:_(<6 x s16>) = COPY $vgpr3_vgpr4_vgpr5 423 %2:_(s32) = COPY $vgpr6 424 %3:_(s32) = G_CONSTANT i32 0 425 %4:_(s1) = G_ICMP intpred(ne), %2, %3 426 %5:_(<3 x s16>), %6:_(<3 x s16>) = G_UNMERGE_VALUES %0 427 %7:_(<3 x s16>), %8:_(<3 x s16>) = G_UNMERGE_VALUES %1 428 %9:_(<3 x s16>) = G_SELECT %4, %5, %7 429 %10:_(<3 x s16>) = G_IMPLICIT_DEF 430 %11:_(<6 x s16>) = G_CONCAT_VECTORS %9, %10 431 $vgpr0_vgpr1_vgpr2 = COPY %11 432 433... 434 435--- 436name: test_select_v4s16 437body: | 438 bb.0: 439 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 440 ; CHECK-LABEL: name: test_select_v4s16 441 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 442 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr1_vgpr2 443 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr3_vgpr4 444 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 445 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 446 ; CHECK: [[SELECT:%[0-9]+]]:_(<4 x s16>) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 447 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](<4 x s16>) 448 %0:_(s32) = COPY $vgpr0 449 %1:_(<4 x s16>) = COPY $vgpr1_vgpr2 450 %2:_(<4 x s16>) = COPY $vgpr3_vgpr4 451 %4:_(s32) = G_CONSTANT i32 0 452 453 %5:_(s1) = G_ICMP intpred(ne), %0, %4 454 %6:_(<4 x s16>) = G_SELECT %5, %1, %2 455 $vgpr0_vgpr1 = COPY %6 456 457... 458 459--- 460name: test_select_v2s32 461body: | 462 bb.0: 463 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 464 ; CHECK-LABEL: name: test_select_v2s32 465 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 466 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr1_vgpr2 467 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr3_vgpr4 468 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 469 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 470 ; CHECK: [[SELECT:%[0-9]+]]:_(<2 x s32>) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 471 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](<2 x s32>) 472 %0:_(s32) = COPY $vgpr0 473 %1:_(<2 x s32>) = COPY $vgpr1_vgpr2 474 %2:_(<2 x s32>) = COPY $vgpr3_vgpr4 475 %4:_(s32) = G_CONSTANT i32 0 476 477 %5:_(s1) = G_ICMP intpred(ne), %0, %4 478 %6:_(<2 x s32>) = G_SELECT %5, %1, %2 479 $vgpr0_vgpr1 = COPY %6 480 481... 482 483--- 484name: test_select_v3s32 485body: | 486 bb.0: 487 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 488 ; CHECK-LABEL: name: test_select_v3s32 489 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 490 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 491 ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr1_vgpr2_vgpr3 492 ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 493 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 494 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>) 495 ; CHECK: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<3 x s32>) 496 ; CHECK: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV3]] 497 ; CHECK: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV4]] 498 ; CHECK: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV2]], [[UV5]] 499 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32), [[SELECT2]](s32) 500 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 501 %0:_(s32) = G_CONSTANT i32 0 502 %1:_(s32) = COPY $vgpr0 503 %2:_(<3 x s32>) = COPY $vgpr1_vgpr2_vgpr3 504 %3:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 505 506 %4:_(s1) = G_ICMP intpred(ne), %0, %1 507 %5:_(<3 x s32>) = G_SELECT %4, %2, %3 508 $vgpr0_vgpr1_vgpr2 = COPY %5 509 510... 511 512--- 513name: test_select_v4s32 514body: | 515 bb.0: 516 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8 517 ; CHECK-LABEL: name: test_select_v4s32 518 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 519 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 520 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 521 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 522 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 523 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>) 524 ; CHECK: [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY2]](<4 x s32>) 525 ; CHECK: [[SELECT:%[0-9]+]]:_(<2 x s32>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]] 526 ; CHECK: [[SELECT1:%[0-9]+]]:_(<2 x s32>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]] 527 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s32>) = G_CONCAT_VECTORS [[SELECT]](<2 x s32>), [[SELECT1]](<2 x s32>) 528 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<4 x s32>) 529 %0:_(s32) = G_CONSTANT i32 0 530 %1:_(s32) = COPY $vgpr0 531 %2:_(<4 x s32>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 532 %3:_(<4 x s32>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 533 534 %4:_(s1) = G_ICMP intpred(ne), %0, %1 535 %5:_(<4 x s32>) = G_SELECT %4, %2, %3 536 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %5 537 538... 539 540--- 541name: test_select_v2s64 542body: | 543 bb.0: 544 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8 545 ; CHECK-LABEL: name: test_select_v2s64 546 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 547 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 548 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 549 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 550 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 551 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>) 552 ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY2]](<2 x s64>) 553 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]] 554 ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]] 555 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[SELECT]](s64), [[SELECT1]](s64) 556 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 557 %0:_(s32) = G_CONSTANT i32 0 558 %1:_(s32) = COPY $vgpr0 559 %2:_(<2 x s64>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 560 %3:_(<2 x s64>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 561 562 %4:_(s1) = G_ICMP intpred(ne), %0, %1 563 %5:_(<2 x s64>) = G_SELECT %4, %2, %3 564 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %5 565 566... 567 568--- 569name: test_select_p0 570body: | 571 bb.0: 572 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 573 ; CHECK-LABEL: name: test_select_p0 574 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 575 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 576 ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr1_vgpr2 577 ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $vgpr3_vgpr4 578 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 579 ; CHECK: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 580 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](p0) 581 %0:_(s32) = G_CONSTANT i32 0 582 %1:_(s32) = COPY $vgpr0 583 %2:_(p0) = COPY $vgpr1_vgpr2 584 %3:_(p0) = COPY $vgpr3_vgpr4 585 586 %4:_(s1) = G_ICMP intpred(ne), %0, %1 587 %5:_(p0) = G_SELECT %4, %2, %3 588 $vgpr0_vgpr1 = COPY %5 589 590... 591 592--- 593name: test_select_p1 594body: | 595 bb.0: 596 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 597 ; CHECK-LABEL: name: test_select_p1 598 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 599 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 600 ; CHECK: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr1_vgpr2 601 ; CHECK: [[COPY2:%[0-9]+]]:_(p1) = COPY $vgpr3_vgpr4 602 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 603 ; CHECK: [[SELECT:%[0-9]+]]:_(p1) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 604 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](p1) 605 %0:_(s32) = G_CONSTANT i32 0 606 %1:_(s32) = COPY $vgpr0 607 %2:_(p1) = COPY $vgpr1_vgpr2 608 %3:_(p1) = COPY $vgpr3_vgpr4 609 610 %4:_(s1) = G_ICMP intpred(ne), %0, %1 611 %5:_(p1) = G_SELECT %4, %2, %3 612 $vgpr0_vgpr1 = COPY %5 613 614... 615 616--- 617name: test_select_p2 618body: | 619 bb.0: 620 liveins: $vgpr0, $vgpr1, $vgpr2 621 ; CHECK-LABEL: name: test_select_p2 622 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 623 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 624 ; CHECK: [[COPY1:%[0-9]+]]:_(p2) = COPY $vgpr1 625 ; CHECK: [[COPY2:%[0-9]+]]:_(p2) = COPY $vgpr2 626 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 627 ; CHECK: [[SELECT:%[0-9]+]]:_(p2) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 628 ; CHECK: $vgpr0 = COPY [[SELECT]](p2) 629 %0:_(s32) = G_CONSTANT i32 0 630 %1:_(s32) = COPY $vgpr0 631 %2:_(p2) = COPY $vgpr1 632 %3:_(p2) = COPY $vgpr2 633 634 %4:_(s1) = G_ICMP intpred(ne), %0, %1 635 %5:_(p2) = G_SELECT %4, %2, %3 636 $vgpr0 = COPY %5 637 638... 639 640--- 641name: test_select_p3 642body: | 643 bb.0: 644 liveins: $vgpr0, $vgpr1, $vgpr2 645 ; CHECK-LABEL: name: test_select_p3 646 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 647 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 648 ; CHECK: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr1 649 ; CHECK: [[COPY2:%[0-9]+]]:_(p3) = COPY $vgpr2 650 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 651 ; CHECK: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 652 ; CHECK: $vgpr0 = COPY [[SELECT]](p3) 653 %0:_(s32) = G_CONSTANT i32 0 654 %1:_(s32) = COPY $vgpr0 655 %2:_(p3) = COPY $vgpr1 656 %3:_(p3) = COPY $vgpr2 657 658 %4:_(s1) = G_ICMP intpred(ne), %0, %1 659 %5:_(p3) = G_SELECT %4, %2, %3 660 $vgpr0 = COPY %5 661 662... 663 664--- 665name: test_select_p4 666body: | 667 bb.0: 668 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 669 ; CHECK-LABEL: name: test_select_p4 670 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 671 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 672 ; CHECK: [[COPY1:%[0-9]+]]:_(p4) = COPY $vgpr1_vgpr2 673 ; CHECK: [[COPY2:%[0-9]+]]:_(p4) = COPY $vgpr3_vgpr4 674 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 675 ; CHECK: [[SELECT:%[0-9]+]]:_(p4) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 676 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](p4) 677 %0:_(s32) = G_CONSTANT i32 0 678 %1:_(s32) = COPY $vgpr0 679 %2:_(p4) = COPY $vgpr1_vgpr2 680 %3:_(p4) = COPY $vgpr3_vgpr4 681 682 %4:_(s1) = G_ICMP intpred(ne), %0, %1 683 %5:_(p4) = G_SELECT %4, %2, %3 684 $vgpr0_vgpr1 = COPY %5 685 686... 687 688--- 689name: test_select_p5 690body: | 691 bb.0: 692 liveins: $vgpr0, $vgpr1, $vgpr2 693 694 ; CHECK-LABEL: name: test_select_p5 695 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 696 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 697 ; CHECK: [[COPY1:%[0-9]+]]:_(p5) = COPY $vgpr1 698 ; CHECK: [[COPY2:%[0-9]+]]:_(p5) = COPY $vgpr2 699 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 700 ; CHECK: [[SELECT:%[0-9]+]]:_(p5) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 701 ; CHECK: $vgpr0 = COPY [[SELECT]](p5) 702 %0:_(s32) = G_CONSTANT i32 0 703 %1:_(s32) = COPY $vgpr0 704 %2:_(p5) = COPY $vgpr1 705 %3:_(p5) = COPY $vgpr2 706 %4:_(s1) = G_ICMP intpred(ne), %0, %1 707 %5:_(p5) = G_SELECT %4, %2, %3 708 $vgpr0 = COPY %5 709 710... 711 712--- 713name: test_select_p999 714body: | 715 bb.0: 716 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 717 718 ; CHECK-LABEL: name: test_select_p999 719 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 720 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 721 ; CHECK: [[COPY1:%[0-9]+]]:_(p999) = COPY $vgpr1_vgpr2 722 ; CHECK: [[COPY2:%[0-9]+]]:_(p999) = COPY $vgpr3_vgpr4 723 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 724 ; CHECK: [[SELECT:%[0-9]+]]:_(p999) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 725 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](p999) 726 %0:_(s32) = G_CONSTANT i32 0 727 %1:_(s32) = COPY $vgpr0 728 %2:_(p999) = COPY $vgpr1_vgpr2 729 %3:_(p999) = COPY $vgpr3_vgpr4 730 %4:_(s1) = G_ICMP intpred(ne), %0, %1 731 %5:_(p999) = G_SELECT %4, %2, %3 732 $vgpr0_vgpr1 = COPY %5 733 734... 735 736--- 737 738name: test_select_v2p3 739body: | 740 bb.0: 741 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4 742 743 ; CHECK-LABEL: name: test_select_v2p3 744 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 745 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr1_vgpr2 746 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr3_vgpr4 747 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 748 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 749 ; CHECK: [[SELECT:%[0-9]+]]:_(<2 x p3>) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]] 750 ; CHECK: $vgpr0_vgpr1 = COPY [[SELECT]](<2 x p3>) 751 %0:_(s32) = COPY $vgpr0 752 %1:_(<2 x p3>) = COPY $vgpr1_vgpr2 753 %2:_(<2 x p3>) = COPY $vgpr3_vgpr4 754 %4:_(s32) = G_CONSTANT i32 0 755 %5:_(s1) = G_ICMP intpred(ne), %0, %4 756 %6:_(<2 x p3>) = G_SELECT %5, %1, %2 757 $vgpr0_vgpr1 = COPY %6 758 759... 760 761--- 762name: test_select_v3p3 763body: | 764 bb.0: 765 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 766 767 ; CHECK-LABEL: name: test_select_v3p3 768 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 769 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 770 ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x p3>) = COPY $vgpr1_vgpr2_vgpr3 771 ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x p3>) = COPY $vgpr4_vgpr5_vgpr6 772 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 773 ; CHECK: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3), [[UV2:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY1]](<3 x p3>) 774 ; CHECK: [[UV3:%[0-9]+]]:_(p3), [[UV4:%[0-9]+]]:_(p3), [[UV5:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY2]](<3 x p3>) 775 ; CHECK: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[UV]], [[UV3]] 776 ; CHECK: [[SELECT1:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV4]] 777 ; CHECK: [[SELECT2:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[UV2]], [[UV5]] 778 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x p3>) = G_BUILD_VECTOR [[SELECT]](p3), [[SELECT1]](p3), [[SELECT2]](p3) 779 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x p3>) 780 %0:_(s32) = G_CONSTANT i32 0 781 %1:_(s32) = COPY $vgpr0 782 %2:_(<3 x p3>) = COPY $vgpr1_vgpr2_vgpr3 783 %3:_(<3 x p3>) = COPY $vgpr4_vgpr5_vgpr6 784 785 %4:_(s1) = G_ICMP intpred(ne), %0, %1 786 %5:_(<3 x p3>) = G_SELECT %4, %2, %3 787 $vgpr0_vgpr1_vgpr2 = COPY %5 788 789... 790 791--- 792name: test_select_v4p3 793body: | 794 bb.0: 795 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8 796 797 ; CHECK-LABEL: name: test_select_v4p3 798 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 799 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 800 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x p3>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 801 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x p3>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 802 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 803 ; CHECK: [[UV:%[0-9]+]]:_(<2 x p3>), [[UV1:%[0-9]+]]:_(<2 x p3>) = G_UNMERGE_VALUES [[COPY1]](<4 x p3>) 804 ; CHECK: [[UV2:%[0-9]+]]:_(<2 x p3>), [[UV3:%[0-9]+]]:_(<2 x p3>) = G_UNMERGE_VALUES [[COPY2]](<4 x p3>) 805 ; CHECK: [[SELECT:%[0-9]+]]:_(<2 x p3>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]] 806 ; CHECK: [[SELECT1:%[0-9]+]]:_(<2 x p3>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]] 807 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p3>) = G_CONCAT_VECTORS [[SELECT]](<2 x p3>), [[SELECT1]](<2 x p3>) 808 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<4 x p3>) 809 %0:_(s32) = G_CONSTANT i32 0 810 %1:_(s32) = COPY $vgpr0 811 %2:_(<4 x p3>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 812 %3:_(<4 x p3>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 813 814 %4:_(s1) = G_ICMP intpred(ne), %0, %1 815 %5:_(<4 x p3>) = G_SELECT %4, %2, %3 816 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %5 817 818... 819 820--- 821name: test_select_v4p5 822body: | 823 bb.0: 824 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8 825 826 ; CHECK-LABEL: name: test_select_v4p5 827 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 828 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 829 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x p5>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 830 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x p5>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 831 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 832 ; CHECK: [[UV:%[0-9]+]]:_(<2 x p5>), [[UV1:%[0-9]+]]:_(<2 x p5>) = G_UNMERGE_VALUES [[COPY1]](<4 x p5>) 833 ; CHECK: [[UV2:%[0-9]+]]:_(<2 x p5>), [[UV3:%[0-9]+]]:_(<2 x p5>) = G_UNMERGE_VALUES [[COPY2]](<4 x p5>) 834 ; CHECK: [[SELECT:%[0-9]+]]:_(<2 x p5>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]] 835 ; CHECK: [[SELECT1:%[0-9]+]]:_(<2 x p5>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]] 836 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p5>) = G_CONCAT_VECTORS [[SELECT]](<2 x p5>), [[SELECT1]](<2 x p5>) 837 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<4 x p5>) 838 %0:_(s32) = G_CONSTANT i32 0 839 %1:_(s32) = COPY $vgpr0 840 %2:_(<4 x p5>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 841 %3:_(<4 x p5>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 842 843 %4:_(s1) = G_ICMP intpred(ne), %0, %1 844 %5:_(<4 x p5>) = G_SELECT %4, %2, %3 845 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %5 846 847... 848 849--- 850name: test_select_v2p0 851body: | 852 bb.0: 853 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3_vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8 854 855 ; CHECK-LABEL: name: test_select_v2p0 856 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 857 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 858 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 859 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 860 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 861 ; CHECK: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY1]](<2 x p0>) 862 ; CHECK: [[UV2:%[0-9]+]]:_(p0), [[UV3:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY2]](<2 x p0>) 863 ; CHECK: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]] 864 ; CHECK: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]] 865 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0) 866 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) 867 %0:_(s32) = G_CONSTANT i32 0 868 %1:_(s32) = COPY $vgpr0 869 %2:_(<2 x p0>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4 870 %3:_(<2 x p0>) = COPY $vgpr5_vgpr6_vgpr7_vgpr8 871 872 %4:_(s1) = G_ICMP intpred(ne), %0, %1 873 %5:_(<2 x p0>) = G_SELECT %4, %2, %3 874 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %5 875 876... 877 878--- 879name: test_select_v4p0 880body: | 881 bb.0: 882 liveins: $vgpr0, $vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16 883 884 ; CHECK-LABEL: name: test_select_v4p0 885 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 886 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 887 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x p0>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8 888 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x p0>) = COPY $vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16 889 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 890 ; CHECK: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0), [[UV2:%[0-9]+]]:_(p0), [[UV3:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY1]](<4 x p0>) 891 ; CHECK: [[UV4:%[0-9]+]]:_(p0), [[UV5:%[0-9]+]]:_(p0), [[UV6:%[0-9]+]]:_(p0), [[UV7:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY2]](<4 x p0>) 892 ; CHECK: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV]], [[UV4]] 893 ; CHECK: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV5]] 894 ; CHECK: [[SELECT2:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV2]], [[UV6]] 895 ; CHECK: [[SELECT3:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV3]], [[UV7]] 896 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0), [[SELECT2]](p0), [[SELECT3]](p0) 897 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BUILD_VECTOR]](<4 x p0>) 898 %0:_(s32) = G_CONSTANT i32 0 899 %1:_(s32) = COPY $vgpr0 900 %2:_(<4 x p0>) = COPY $vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8 901 %3:_(<4 x p0>) = COPY $vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16 902 903 %4:_(s1) = G_ICMP intpred(ne), %0, %1 904 %5:_(<4 x p0>) = G_SELECT %4, %2, %3 905 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %5 906 907... 908 909--- 910name: test_select_v2s96 911body: | 912 bb.0: 913 liveins: $vgpr0 914 915 ; CHECK-LABEL: name: test_select_v2s96 916 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s96>) = G_IMPLICIT_DEF 917 ; CHECK: [[DEF1:%[0-9]+]]:_(<2 x s96>) = G_IMPLICIT_DEF 918 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 919 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 920 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 921 ; CHECK: [[UV:%[0-9]+]]:_(s96), [[UV1:%[0-9]+]]:_(s96) = G_UNMERGE_VALUES [[DEF]](<2 x s96>) 922 ; CHECK: [[UV2:%[0-9]+]]:_(s96), [[UV3:%[0-9]+]]:_(s96) = G_UNMERGE_VALUES [[DEF1]](<2 x s96>) 923 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[UV]](s96), 0 924 ; CHECK: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[UV]](s96), 64 925 ; CHECK: [[EXTRACT2:%[0-9]+]]:_(s64) = G_EXTRACT [[UV2]](s96), 0 926 ; CHECK: [[EXTRACT3:%[0-9]+]]:_(s32) = G_EXTRACT [[UV2]](s96), 64 927 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[EXTRACT]], [[EXTRACT2]] 928 ; CHECK: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[EXTRACT1]], [[EXTRACT3]] 929 ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SELECT]](s64) 930 ; CHECK: [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[UV4]](s32), [[UV5]](s32), [[SELECT1]](s32) 931 ; CHECK: [[EXTRACT4:%[0-9]+]]:_(s64) = G_EXTRACT [[UV1]](s96), 0 932 ; CHECK: [[EXTRACT5:%[0-9]+]]:_(s32) = G_EXTRACT [[UV1]](s96), 64 933 ; CHECK: [[EXTRACT6:%[0-9]+]]:_(s64) = G_EXTRACT [[UV3]](s96), 0 934 ; CHECK: [[EXTRACT7:%[0-9]+]]:_(s32) = G_EXTRACT [[UV3]](s96), 64 935 ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[EXTRACT4]], [[EXTRACT6]] 936 ; CHECK: [[SELECT3:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[EXTRACT5]], [[EXTRACT7]] 937 ; CHECK: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SELECT2]](s64) 938 ; CHECK: [[MV1:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[UV6]](s32), [[UV7]](s32), [[SELECT3]](s32) 939 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s96>) = G_BUILD_VECTOR [[MV]](s96), [[MV1]](s96) 940 ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s96>) 941 %0:_(<2 x s96>) = G_IMPLICIT_DEF 942 %1:_(<2 x s96>) = G_IMPLICIT_DEF 943 %2:_(s32) = COPY $vgpr0 944 %3:_(s32) = G_CONSTANT i32 0 945 %4:_(s1) = G_ICMP intpred(ne), %2, %3 946 %5:_(<2 x s96>) = G_SELECT %4, %0, %1 947 S_NOP 0, implicit %5 948 949... 950 951--- 952 953name: test_select_v8p0 954body: | 955 bb.0: 956 liveins: $vgpr0 957 958 ; CHECK-LABEL: name: test_select_v8p0 959 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 960 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 961 ; CHECK: [[DEF:%[0-9]+]]:_(<8 x p0>) = G_IMPLICIT_DEF 962 ; CHECK: [[DEF1:%[0-9]+]]:_(<8 x p0>) = G_IMPLICIT_DEF 963 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]] 964 ; CHECK: [[UV:%[0-9]+]]:_(p0), [[UV1:%[0-9]+]]:_(p0), [[UV2:%[0-9]+]]:_(p0), [[UV3:%[0-9]+]]:_(p0), [[UV4:%[0-9]+]]:_(p0), [[UV5:%[0-9]+]]:_(p0), [[UV6:%[0-9]+]]:_(p0), [[UV7:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[DEF]](<8 x p0>) 965 ; CHECK: [[UV8:%[0-9]+]]:_(p0), [[UV9:%[0-9]+]]:_(p0), [[UV10:%[0-9]+]]:_(p0), [[UV11:%[0-9]+]]:_(p0), [[UV12:%[0-9]+]]:_(p0), [[UV13:%[0-9]+]]:_(p0), [[UV14:%[0-9]+]]:_(p0), [[UV15:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[DEF1]](<8 x p0>) 966 ; CHECK: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV]], [[UV8]] 967 ; CHECK: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV9]] 968 ; CHECK: [[SELECT2:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV2]], [[UV10]] 969 ; CHECK: [[SELECT3:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV3]], [[UV11]] 970 ; CHECK: [[SELECT4:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV4]], [[UV12]] 971 ; CHECK: [[SELECT5:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV5]], [[UV13]] 972 ; CHECK: [[SELECT6:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV6]], [[UV14]] 973 ; CHECK: [[SELECT7:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV7]], [[UV15]] 974 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0), [[SELECT2]](p0), [[SELECT3]](p0), [[SELECT4]](p0), [[SELECT5]](p0), [[SELECT6]](p0), [[SELECT7]](p0) 975 ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<8 x p0>) 976 %0:_(s32) = G_CONSTANT i32 0 977 %1:_(s32) = COPY $vgpr0 978 %2:_(<8 x p0>) = G_IMPLICIT_DEF 979 %3:_(<8 x p0>) = G_IMPLICIT_DEF 980 981 %4:_(s1) = G_ICMP intpred(ne), %0, %1 982 %5:_(<8 x p0>) = G_SELECT %4, %2, %3 983 S_NOP 0, implicit %5 984... 985--- 986name: test_select_v2s128 987body: | 988 bb.0: 989 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15, $vgpr16 990 991 ; CHECK-LABEL: name: test_select_v2s128 992 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s128>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 993 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s128>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 994 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr16 995 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 996 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[C]] 997 ; CHECK: [[UV:%[0-9]+]]:_(s128), [[UV1:%[0-9]+]]:_(s128) = G_UNMERGE_VALUES [[COPY]](<2 x s128>) 998 ; CHECK: [[UV2:%[0-9]+]]:_(s128), [[UV3:%[0-9]+]]:_(s128) = G_UNMERGE_VALUES [[COPY1]](<2 x s128>) 999 ; CHECK: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV]](s128) 1000 ; CHECK: [[UV6:%[0-9]+]]:_(s64), [[UV7:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV2]](s128) 1001 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV4]], [[UV6]] 1002 ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV5]], [[UV7]] 1003 ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT]](s64), [[SELECT1]](s64) 1004 ; CHECK: [[UV8:%[0-9]+]]:_(s64), [[UV9:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV1]](s128) 1005 ; CHECK: [[UV10:%[0-9]+]]:_(s64), [[UV11:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV3]](s128) 1006 ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV8]], [[UV10]] 1007 ; CHECK: [[SELECT3:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV9]], [[UV11]] 1008 ; CHECK: [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT2]](s64), [[SELECT3]](s64) 1009 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s128>) = G_BUILD_VECTOR [[MV]](s128), [[MV1]](s128) 1010 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BUILD_VECTOR]](<2 x s128>) 1011 %0:_(<2 x s128>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 , 1012 %1:_(<2 x s128>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 1013 %2:_(s32) = COPY $vgpr16 1014 %3:_(s32) = G_CONSTANT i32 0 1015 %4:_(s1) = G_ICMP intpred(ne), %2, %3 1016 %5:_(<2 x s128>) = G_SELECT %4, %0, %1 1017 $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %5 1018 1019... 1020 1021--- 1022name: test_vselect_v2s32 1023body: | 1024 bb.0: 1025 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7 1026 ; CHECK-LABEL: name: test_vselect_v2s32 1027 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 1028 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 1029 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5 1030 ; CHECK: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr6_vgpr7 1031 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 1032 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 1033 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 1034 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 1035 ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>) 1036 ; CHECK: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>) 1037 ; CHECK: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV4]], [[UV6]] 1038 ; CHECK: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[UV5]], [[UV7]] 1039 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32) 1040 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 1041 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 1042 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 1043 %2:_(<2 x s32>) = COPY $vgpr4_vgpr5 1044 %3:_(<2 x s32>) = COPY $vgpr6_vgpr7 1045 1046 %4:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1 1047 %5:_(<2 x s32>) = G_SELECT %4, %2, %3 1048 $vgpr0_vgpr1 = COPY %5 1049 1050... 1051 1052--- 1053name: test_vselect_v3s32 1054body: | 1055 bb.0: 1056 liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5, $vgpr6_vgpr7_vgpr8 1057 ; CHECK-LABEL: name: test_vselect_v3s32 1058 ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1059 ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5 1060 ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1061 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 1062 ; CHECK: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>) 1063 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]] 1064 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]] 1065 ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]] 1066 ; CHECK: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>) 1067 ; CHECK: [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<3 x s32>) 1068 ; CHECK: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV6]], [[UV9]] 1069 ; CHECK: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[UV7]], [[UV10]] 1070 ; CHECK: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[ICMP2]](s1), [[UV8]], [[UV11]] 1071 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32), [[SELECT2]](s32) 1072 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 1073 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1074 %1:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5 1075 %2:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1076 1077 %3:_(<3 x s1>) = G_ICMP intpred(ne), %0, %1 1078 %4:_(<3 x s32>) = G_SELECT %3, %1, %2 1079 $vgpr0_vgpr1_vgpr2 = COPY %4 1080 1081... 1082 1083--- 1084name: test_vselect_v4s32 1085body: | 1086 bb.0: 1087 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9_vgpr10_vgpr11 1088 ; CHECK-LABEL: name: test_vselect_v4s32 1089 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1090 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 1091 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 1092 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>) 1093 ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>) 1094 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV4]] 1095 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV5]] 1096 ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV6]] 1097 ; CHECK: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV3]](s32), [[UV7]] 1098 ; CHECK: [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>) 1099 ; CHECK: [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32), [[UV14:%[0-9]+]]:_(s32), [[UV15:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<4 x s32>) 1100 ; CHECK: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV8]], [[UV12]] 1101 ; CHECK: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[UV9]], [[UV13]] 1102 ; CHECK: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[ICMP2]](s1), [[UV10]], [[UV14]] 1103 ; CHECK: [[SELECT3:%[0-9]+]]:_(s32) = G_SELECT [[ICMP3]](s1), [[UV11]], [[UV15]] 1104 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32), [[SELECT2]](s32), [[SELECT3]](s32) 1105 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<4 x s32>) 1106 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1107 %1:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 1108 %2:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 1109 1110 %3:_(<4 x s1>) = G_ICMP intpred(ne), %0, %1 1111 %4:_(<4 x s32>) = G_SELECT %3, %1, %2 1112 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %4 1113 1114... 1115 1116--- 1117name: test_vselect_v2s64 1118body: | 1119 bb.0: 1120 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9_vgpr10_vgpr11 1121 ; CHECK-LABEL: name: test_vselect_v2s64 1122 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1123 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 1124 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 1125 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 1126 ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>) 1127 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s64), [[UV2]] 1128 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s64), [[UV3]] 1129 ; CHECK: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>) 1130 ; CHECK: [[UV6:%[0-9]+]]:_(s64), [[UV7:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY2]](<2 x s64>) 1131 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[UV4]], [[UV6]] 1132 ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s1), [[UV5]], [[UV7]] 1133 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[SELECT]](s64), [[SELECT1]](s64) 1134 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 1135 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1136 %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 1137 %2:_(<2 x s64>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 1138 1139 %3:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1 1140 %4:_(<2 x s64>) = G_SELECT %3, %1, %2 1141 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %4 1142 1143... 1144 1145--- 1146name: test_vselect_v2p3 1147body: | 1148 bb.0: 1149 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7 1150 ; CHECK-LABEL: name: test_vselect_v2p3 1151 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 1152 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 1153 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr4_vgpr5 1154 ; CHECK: [[COPY3:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr6_vgpr7 1155 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 1156 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 1157 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 1158 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 1159 ; CHECK: [[UV4:%[0-9]+]]:_(p3), [[UV5:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY2]](<2 x p3>) 1160 ; CHECK: [[UV6:%[0-9]+]]:_(p3), [[UV7:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY3]](<2 x p3>) 1161 ; CHECK: [[SELECT:%[0-9]+]]:_(p3) = G_SELECT [[ICMP]](s1), [[UV4]], [[UV6]] 1162 ; CHECK: [[SELECT1:%[0-9]+]]:_(p3) = G_SELECT [[ICMP1]](s1), [[UV5]], [[UV7]] 1163 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[SELECT]](p3), [[SELECT1]](p3) 1164 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x p3>) 1165 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 1166 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 1167 %2:_(<2 x p3>) = COPY $vgpr4_vgpr5 1168 %3:_(<2 x p3>) = COPY $vgpr6_vgpr7 1169 1170 %4:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1 1171 %5:_(<2 x p3>) = G_SELECT %4, %2, %3 1172 $vgpr0_vgpr1 = COPY %5 1173 1174... 1175 1176--- 1177name: test_vselect_v2p0 1178body: | 1179 bb.0: 1180 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9_vgpr10_vgpr11, $vgpr12_vgpr13_vgpr14_vgpr15 1181 1182 ; CHECK-LABEL: name: test_vselect_v2p0 1183 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1184 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 1185 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 1186 ; CHECK: [[COPY3:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr12_vgpr13_vgpr14_vgpr15 1187 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 1188 ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>) 1189 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s64), [[UV2]] 1190 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s64), [[UV3]] 1191 ; CHECK: [[UV4:%[0-9]+]]:_(p0), [[UV5:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY2]](<2 x p0>) 1192 ; CHECK: [[UV6:%[0-9]+]]:_(p0), [[UV7:%[0-9]+]]:_(p0) = G_UNMERGE_VALUES [[COPY3]](<2 x p0>) 1193 ; CHECK: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[UV4]], [[UV6]] 1194 ; CHECK: [[SELECT1:%[0-9]+]]:_(p0) = G_SELECT [[ICMP1]](s1), [[UV5]], [[UV7]] 1195 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[SELECT]](p0), [[SELECT1]](p0) 1196 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x p0>) 1197 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1198 %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 1199 %2:_(<2 x p0>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 1200 %3:_(<2 x p0>) = COPY $vgpr12_vgpr13_vgpr14_vgpr15 1201 1202 %4:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1 1203 %5:_(<2 x p0>) = G_SELECT %4, %2, %3 1204 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %5 1205 1206... 1207 1208--- 1209name: test_vselect_v3s8 1210body: | 1211 bb.0: 1212 liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11 1213 ; CHECK-LABEL: name: test_vselect_v3s8 1214 ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1215 ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5 1216 ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1217 ; CHECK: [[COPY3:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr9_vgpr10_vgpr11 1218 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 1219 ; CHECK: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>) 1220 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]] 1221 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]] 1222 ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]] 1223 ; CHECK: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<3 x s32>) 1224 ; CHECK: [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<3 x s32>) 1225 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV6]](s32) 1226 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV9]](s32) 1227 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC]], [[TRUNC1]] 1228 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV7]](s32) 1229 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV10]](s32) 1230 ; CHECK: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[ICMP1]](s1), [[TRUNC2]], [[TRUNC3]] 1231 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[UV8]](s32) 1232 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[UV11]](s32) 1233 ; CHECK: [[SELECT2:%[0-9]+]]:_(s16) = G_SELECT [[ICMP2]](s1), [[TRUNC4]], [[TRUNC5]] 1234 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 1235 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT1]](s16) 1236 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT2]](s16) 1237 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32) 1238 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 1239 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1240 %1:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5 1241 %2:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1242 %3:_(<3 x s32>) = COPY $vgpr9_vgpr10_vgpr11 1243 %4:_(<3 x s1>) = G_ICMP intpred(ne), %0, %1 1244 %5:_(<3 x s8>) = G_TRUNC %2 1245 %6:_(<3 x s8>) = G_TRUNC %3 1246 %7:_(<3 x s8>) = G_SELECT %4, %5, %6 1247 %8:_(<3 x s32>) = G_ANYEXT %7 1248 $vgpr0_vgpr1_vgpr2 = COPY %8 1249 1250... 1251 1252--- 1253name: test_vselect_v3s16 1254body: | 1255 bb.0: 1256 liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11 1257 ; CHECK-LABEL: name: test_vselect_v3s16 1258 ; CHECK: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 1259 ; CHECK: [[COPY1:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr3_vgpr4_vgpr5 1260 ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1261 ; CHECK: [[COPY3:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr9_vgpr10_vgpr11 1262 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<3 x s32>) 1263 ; CHECK: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<3 x s32>) 1264 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]] 1265 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]] 1266 ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]] 1267 ; CHECK: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>) 1268 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV6]](<2 x s16>) 1269 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 1270 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1271 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 1272 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 1273 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV7]](<2 x s16>) 1274 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32) 1275 ; CHECK: [[UV9:%[0-9]+]]:_(<2 x s16>), [[UV10:%[0-9]+]]:_(<2 x s16>), [[UV11:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<6 x s16>) 1276 ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV9]](<2 x s16>) 1277 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST2]](s32) 1278 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 1279 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 1280 ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV10]](<2 x s16>) 1281 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST3]](s32) 1282 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[TRUNC]], [[TRUNC3]] 1283 ; CHECK: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[ICMP1]](s1), [[TRUNC1]], [[TRUNC4]] 1284 ; CHECK: [[SELECT2:%[0-9]+]]:_(s16) = G_SELECT [[ICMP2]](s1), [[TRUNC2]], [[TRUNC5]] 1285 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 1286 ; CHECK: [[UV12:%[0-9]+]]:_(<2 x s16>), [[UV13:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 1287 ; CHECK: [[BITCAST4:%[0-9]+]]:_(s32) = G_BITCAST [[UV12]](<2 x s16>) 1288 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST4]], [[C]](s32) 1289 ; CHECK: [[BITCAST5:%[0-9]+]]:_(s32) = G_BITCAST [[UV13]](<2 x s16>) 1290 ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[SELECT]](s16) 1291 ; CHECK: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[SELECT1]](s16) 1292 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32) 1293 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL]] 1294 ; CHECK: [[BITCAST6:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 1295 ; CHECK: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[SELECT2]](s16) 1296 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 1297 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST4]], [[C1]] 1298 ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C]](s32) 1299 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL1]] 1300 ; CHECK: [[BITCAST7:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 1301 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR2]], [[C1]] 1302 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[BITCAST5]], [[C1]] 1303 ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND2]], [[C]](s32) 1304 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND1]], [[SHL2]] 1305 ; CHECK: [[BITCAST8:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32) 1306 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BITCAST6]](<2 x s16>), [[BITCAST7]](<2 x s16>), [[BITCAST8]](<2 x s16>) 1307 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[CONCAT_VECTORS]](<6 x s16>) 1308 %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 1309 %1:_(<6 x s16>) = COPY $vgpr3_vgpr4_vgpr5 1310 %2:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1311 %3:_(<3 x s32>) = COPY $vgpr9_vgpr10_vgpr11 1312 %4:_(<3 x s1>) = G_ICMP intpred(ne), %2, %3 1313 %5:_(<3 x s16>), %6:_(<3 x s16>) = G_UNMERGE_VALUES %0 1314 %7:_(<3 x s16>), %8:_(<3 x s16>) = G_UNMERGE_VALUES %1 1315 %9:_(<3 x s16>) = G_SELECT %4, %5, %7 1316 %10:_(<3 x s16>) = G_IMPLICIT_DEF 1317 %11:_(<6 x s16>) = G_CONCAT_VECTORS %9, %10 1318 $vgpr0_vgpr1_vgpr2 = COPY %11 1319... 1320 1321--- 1322name: test_select_s1 1323body: | 1324 bb.0: 1325 liveins: $vgpr0, $vgpr1, $vgpr2 1326 1327 ; CHECK-LABEL: name: test_select_s1 1328 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1329 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 1330 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 1331 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 1332 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]] 1333 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]] 1334 ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[C]] 1335 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1) 1336 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP2]](s1) 1337 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[ANYEXT]], [[ANYEXT1]] 1338 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 1339 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 1340 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT2]], [[C1]] 1341 ; CHECK: $vgpr0 = COPY [[AND]](s32) 1342 %0:_(s32) = COPY $vgpr0 1343 %1:_(s32) = COPY $vgpr1 1344 %2:_(s32) = COPY $vgpr2 1345 %3:_(s32) = G_CONSTANT i32 0 1346 %4:_(s1) = G_ICMP intpred(ne), %0, %3 1347 %5:_(s1) = G_ICMP intpred(ne), %1, %3 1348 %6:_(s1) = G_ICMP intpred(ne), %2, %3 1349 %7:_(s1) = G_SELECT %4, %5, %6 1350 %8:_(s32) = G_ZEXT %7 1351 $vgpr0 = COPY %8 1352 1353... 1354 1355--- 1356name: test_select_v2s1 1357body: | 1358 bb.0: 1359 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7 1360 1361 ; CHECK-LABEL: name: test_select_v2s1 1362 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 1363 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 1364 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5 1365 ; CHECK: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr6_vgpr7 1366 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 1367 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>) 1368 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 1369 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 1370 ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 1371 ; CHECK: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>) 1372 ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV4]](s32), [[UV6]] 1373 ; CHECK: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV5]](s32), [[UV7]] 1374 ; CHECK: [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>) 1375 ; CHECK: [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>) 1376 ; CHECK: [[ICMP4:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV8]](s32), [[UV10]] 1377 ; CHECK: [[ICMP5:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV9]](s32), [[UV11]] 1378 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP2]](s1) 1379 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP4]](s1) 1380 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[ANYEXT]], [[ANYEXT1]] 1381 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP3]](s1) 1382 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP5]](s1) 1383 ; CHECK: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[ICMP1]](s1), [[ANYEXT2]], [[ANYEXT3]] 1384 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 1385 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT1]](s16) 1386 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 1387 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT4]], [[C]] 1388 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT5]], [[C]] 1389 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32) 1390 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 1391 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 1392 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 1393 %2:_(<2 x s32>) = COPY $vgpr4_vgpr5 1394 %3:_(<2 x s32>) = COPY $vgpr6_vgpr7 1395 %4:_(<2 x s1>) = G_ICMP intpred(ne), %0, %3 1396 %5:_(<2 x s1>) = G_ICMP intpred(ne), %1, %3 1397 %6:_(<2 x s1>) = G_ICMP intpred(ne), %2, %3 1398 %7:_(<2 x s1>) = G_SELECT %4, %5, %6 1399 %8:_(<2 x s32>) = G_ZEXT %7 1400 $vgpr0_vgpr1 = COPY %8 1401 1402... 1403 1404--- 1405name: test_select_v3s1 1406body: | 1407 bb.0: 1408 liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5, $vgpr6_vgpr7_vgpr8, $vgpr9_vgpr10_vgpr11 1409 1410 ; CHECK-LABEL: name: test_select_v3s1 1411 ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1412 ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5 1413 ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1414 ; CHECK: [[COPY3:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr9_vgpr10_vgpr11 1415 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 1416 ; CHECK: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<3 x s32>) 1417 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]] 1418 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]] 1419 ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]] 1420 ; CHECK: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>) 1421 ; CHECK: [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<3 x s32>) 1422 ; CHECK: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV6]](s32), [[UV9]] 1423 ; CHECK: [[ICMP4:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV7]](s32), [[UV10]] 1424 ; CHECK: [[ICMP5:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV8]](s32), [[UV11]] 1425 ; CHECK: [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32), [[UV14:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<3 x s32>) 1426 ; CHECK: [[UV15:%[0-9]+]]:_(s32), [[UV16:%[0-9]+]]:_(s32), [[UV17:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<3 x s32>) 1427 ; CHECK: [[ICMP6:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV12]](s32), [[UV15]] 1428 ; CHECK: [[ICMP7:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV13]](s32), [[UV16]] 1429 ; CHECK: [[ICMP8:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV14]](s32), [[UV17]] 1430 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP3]](s1) 1431 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP6]](s1) 1432 ; CHECK: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[ANYEXT]], [[ANYEXT1]] 1433 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP4]](s1) 1434 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP7]](s1) 1435 ; CHECK: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[ICMP1]](s1), [[ANYEXT2]], [[ANYEXT3]] 1436 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP5]](s1) 1437 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP8]](s1) 1438 ; CHECK: [[SELECT2:%[0-9]+]]:_(s16) = G_SELECT [[ICMP2]](s1), [[ANYEXT4]], [[ANYEXT5]] 1439 ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16) 1440 ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT1]](s16) 1441 ; CHECK: [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT2]](s16) 1442 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 1443 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT6]], [[C]] 1444 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT7]], [[C]] 1445 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ANYEXT8]], [[C]] 1446 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32) 1447 ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 1448 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 1449 %1:_(<3 x s32>) = COPY $vgpr3_vgpr4_vgpr5 1450 %2:_(<3 x s32>) = COPY $vgpr6_vgpr7_vgpr8 1451 %3:_(<3 x s32>) = COPY $vgpr9_vgpr10_vgpr11 1452 %4:_(<3 x s1>) = G_ICMP intpred(ne), %0, %3 1453 %5:_(<3 x s1>) = G_ICMP intpred(ne), %1, %3 1454 %6:_(<3 x s1>) = G_ICMP intpred(ne), %2, %3 1455 %7:_(<3 x s1>) = G_SELECT %4, %5, %6 1456 %8:_(<3 x s32>) = G_ZEXT %7 1457 $vgpr0_vgpr1_vgpr2 = COPY %8 1458 1459... 1460