1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefixes=GCN 3 4--- 5name: select_s32_scc 6legalized: true 7regBankSelected: true 8 9body: | 10 bb.0: 11 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 12 13 ; GCN-LABEL: name: select_s32_scc 14 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 15 ; GCN-NEXT: {{ $}} 16 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 17 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 18 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 19 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 20 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 21 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 22 ; GCN-NEXT: $scc = COPY [[COPY4]] 23 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY2]], [[COPY3]], implicit $scc 24 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]] 25 %0:sgpr(s32) = COPY $sgpr0 26 %1:sgpr(s32) = COPY $sgpr1 27 %2:sgpr(s32) = COPY $sgpr2 28 %3:sgpr(s32) = COPY $sgpr3 29 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1 30 %5:sgpr(s32) = G_SELECT %4, %2, %3 31 S_ENDPGM 0, implicit %5 32 33... 34 35--- 36name: select_s64_scc 37legalized: true 38regBankSelected: true 39 40body: | 41 bb.0: 42 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 43 44 ; GCN-LABEL: name: select_s64_scc 45 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 46 ; GCN-NEXT: {{ $}} 47 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 48 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 49 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 50 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 51 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 52 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 53 ; GCN-NEXT: $scc = COPY [[COPY4]] 54 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc 55 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]] 56 %0:sgpr(s32) = COPY $sgpr0 57 %1:sgpr(s32) = COPY $sgpr1 58 %2:sgpr(s64) = COPY $sgpr2_sgpr3 59 %3:sgpr(s64) = COPY $sgpr4_sgpr5 60 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1 61 %5:sgpr(s64) = G_SELECT %4, %2, %3 62 S_ENDPGM 0, implicit %5 63 64... 65 66--- 67name: select_p0_scc 68legalized: true 69regBankSelected: true 70 71body: | 72 bb.0: 73 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 74 75 ; GCN-LABEL: name: select_p0_scc 76 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 77 ; GCN-NEXT: {{ $}} 78 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 79 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 80 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 81 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 82 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 83 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 84 ; GCN-NEXT: $scc = COPY [[COPY4]] 85 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc 86 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]] 87 %0:sgpr(s32) = COPY $sgpr0 88 %1:sgpr(s32) = COPY $sgpr1 89 %2:sgpr(p0) = COPY $sgpr2_sgpr3 90 %3:sgpr(p0) = COPY $sgpr4_sgpr5 91 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1 92 %5:sgpr(p0) = G_SELECT %4, %2, %3 93 S_ENDPGM 0, implicit %5 94 95... 96 97--- 98name: select_p1_scc 99legalized: true 100regBankSelected: true 101 102body: | 103 bb.0: 104 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 105 106 ; GCN-LABEL: name: select_p1_scc 107 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 108 ; GCN-NEXT: {{ $}} 109 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 110 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 111 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 112 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 113 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 114 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 115 ; GCN-NEXT: $scc = COPY [[COPY4]] 116 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc 117 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]] 118 %0:sgpr(s32) = COPY $sgpr0 119 %1:sgpr(s32) = COPY $sgpr1 120 %2:sgpr(p1) = COPY $sgpr2_sgpr3 121 %3:sgpr(p1) = COPY $sgpr4_sgpr5 122 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1 123 %5:sgpr(p1) = G_SELECT %4, %2, %3 124 S_ENDPGM 0, implicit %5 125 126... 127 128--- 129name: select_p999_scc 130legalized: true 131regBankSelected: true 132 133body: | 134 bb.0: 135 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 136 137 ; GCN-LABEL: name: select_p999_scc 138 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 139 ; GCN-NEXT: {{ $}} 140 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 141 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 142 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 143 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 144 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 145 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 146 ; GCN-NEXT: $scc = COPY [[COPY4]] 147 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc 148 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]] 149 %0:sgpr(s32) = COPY $sgpr0 150 %1:sgpr(s32) = COPY $sgpr1 151 %2:sgpr(p999) = COPY $sgpr2_sgpr3 152 %3:sgpr(p999) = COPY $sgpr4_sgpr5 153 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1 154 %5:sgpr(p999) = G_SELECT %4, %2, %3 155 S_ENDPGM 0, implicit %5 156 157... 158 159--- 160name: select_v4s16_scc 161legalized: true 162regBankSelected: true 163 164body: | 165 bb.0: 166 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 167 168 ; GCN-LABEL: name: select_v4s16_scc 169 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5 170 ; GCN-NEXT: {{ $}} 171 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 172 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 173 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 174 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5 175 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 176 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 177 ; GCN-NEXT: $scc = COPY [[COPY4]] 178 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc 179 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]] 180 %0:sgpr(s32) = COPY $sgpr0 181 %1:sgpr(s32) = COPY $sgpr1 182 %2:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3 183 %3:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5 184 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1 185 %5:sgpr(<4 x s16>) = G_SELECT %4, %2, %3 186 S_ENDPGM 0, implicit %5 187 188... 189 190--- 191name: select_s16_scc 192legalized: true 193regBankSelected: true 194 195body: | 196 bb.0: 197 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 198 199 ; GCN-LABEL: name: select_s16_scc 200 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 201 ; GCN-NEXT: {{ $}} 202 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 203 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 204 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 205 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 206 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY2]], [[COPY3]], implicit-def $scc 207 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 208 ; GCN-NEXT: $scc = COPY [[COPY4]] 209 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY]], [[COPY1]], implicit $scc 210 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]] 211 %0:sgpr(s32) = COPY $sgpr0 212 %1:sgpr(s32) = COPY $sgpr1 213 %2:sgpr(s32) = COPY $sgpr2 214 %3:sgpr(s32) = COPY $sgpr3 215 %4:sgpr(s16) = G_TRUNC %0 216 %5:sgpr(s16) = G_TRUNC %1 217 %6:sgpr(s32) = G_ICMP intpred(eq), %2, %3 218 %7:sgpr(s16) = G_SELECT %6, %4, %5 219 S_ENDPGM 0, implicit %7 220 221... 222 223--- 224name: select_v2s16_scc 225legalized: true 226regBankSelected: true 227 228body: | 229 bb.0: 230 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 231 232 ; GCN-LABEL: name: select_v2s16_scc 233 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 234 ; GCN-NEXT: {{ $}} 235 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 236 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 237 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 238 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 239 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 240 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 241 ; GCN-NEXT: $scc = COPY [[COPY4]] 242 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY2]], [[COPY3]], implicit $scc 243 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]] 244 %0:sgpr(s32) = COPY $sgpr0 245 %1:sgpr(s32) = COPY $sgpr1 246 %2:sgpr(<2 x s16>) = COPY $sgpr2 247 %3:sgpr(<2 x s16>) = COPY $sgpr3 248 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1 249 %5:sgpr(<2 x s16>) = G_SELECT %4, %2, %3 250 S_ENDPGM 0, implicit %5 251 252... 253 254--- 255name: select_s32_vcc 256legalized: true 257regBankSelected: true 258 259body: | 260 bb.0: 261 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 262 263 ; GCN-LABEL: name: select_s32_vcc 264 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 265 ; GCN-NEXT: {{ $}} 266 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 267 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 268 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 269 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 270 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 271 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec 272 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 273 %0:vgpr(s32) = COPY $vgpr0 274 %1:vgpr(s32) = COPY $vgpr1 275 %2:vgpr(s32) = COPY $vgpr2 276 %3:vgpr(s32) = COPY $vgpr3 277 %4:vcc(s1) = G_ICMP intpred(eq), %0, %1 278 %5:vgpr(s32) = G_SELECT %4, %2, %3 279 S_ENDPGM 0, implicit %5 280 281... 282 283--- 284name: select_s16_vcc 285legalized: true 286regBankSelected: true 287 288body: | 289 bb.0: 290 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 291 292 ; GCN-LABEL: name: select_s16_vcc 293 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 294 ; GCN-NEXT: {{ $}} 295 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 296 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 297 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 298 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 299 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY2]], [[COPY3]], implicit $exec 300 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY1]], 0, [[COPY]], [[V_CMP_EQ_U32_e64_]], implicit $exec 301 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 302 %0:vgpr(s32) = COPY $vgpr0 303 %1:vgpr(s32) = COPY $vgpr1 304 %2:vgpr(s32) = COPY $vgpr2 305 %3:vgpr(s32) = COPY $vgpr3 306 %4:vgpr(s16) = G_TRUNC %0 307 %5:vgpr(s16) = G_TRUNC %1 308 %6:vcc(s1) = G_ICMP intpred(eq), %2, %3 309 %7:vgpr(s16) = G_SELECT %6, %4, %5 310 S_ENDPGM 0, implicit %7 311 312... 313 314--- 315name: select_v2s16_vcc 316legalized: true 317regBankSelected: true 318 319body: | 320 bb.0: 321 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 322 323 ; GCN-LABEL: name: select_v2s16_vcc 324 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 325 ; GCN-NEXT: {{ $}} 326 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 327 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 328 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 329 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 330 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 331 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec 332 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 333 %0:vgpr(s32) = COPY $vgpr0 334 %1:vgpr(s32) = COPY $vgpr1 335 %2:vgpr(<2 x s16>) = COPY $vgpr2 336 %3:vgpr(<2 x s16>) = COPY $vgpr3 337 %4:vcc(s1) = G_ICMP intpred(eq), %0, %1 338 %5:vgpr(<2 x s16>) = G_SELECT %4, %2, %3 339 S_ENDPGM 0, implicit %5 340 341... 342 343--- 344name: select_p3_vcc 345legalized: true 346regBankSelected: true 347 348body: | 349 bb.0: 350 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 351 352 ; GCN-LABEL: name: select_p3_vcc 353 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 354 ; GCN-NEXT: {{ $}} 355 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 356 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 357 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 358 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 359 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 360 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec 361 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 362 %0:vgpr(s32) = COPY $vgpr0 363 %1:vgpr(s32) = COPY $vgpr1 364 %2:vgpr(p3) = COPY $vgpr2 365 %3:vgpr(p3) = COPY $vgpr3 366 %4:vcc(s1) = G_ICMP intpred(eq), %0, %1 367 %5:vgpr(p3) = G_SELECT %4, %2, %3 368 S_ENDPGM 0, implicit %5 369 370... 371 372# Fold source modifiers into VOP select 373--- 374name: select_s32_vcc_fneg_lhs 375legalized: true 376regBankSelected: true 377 378body: | 379 bb.0: 380 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 381 382 ; GCN-LABEL: name: select_s32_vcc_fneg_lhs 383 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 384 ; GCN-NEXT: {{ $}} 385 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 386 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 387 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 388 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 389 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 390 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 1, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec 391 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 392 %0:vgpr(s32) = COPY $vgpr0 393 %1:vgpr(s32) = COPY $vgpr1 394 %2:vgpr(s32) = COPY $vgpr2 395 %3:vgpr(s32) = COPY $vgpr3 396 %4:vgpr(s32) = G_FNEG %2 397 %5:vcc(s1) = G_ICMP intpred(eq), %0, %1 398 %6:vgpr(s32) = G_SELECT %5, %4, %3 399 S_ENDPGM 0, implicit %6 400 401... 402 403--- 404name: select_s32_vcc_fneg_rhs 405legalized: true 406regBankSelected: true 407 408body: | 409 bb.0: 410 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 411 412 ; GCN-LABEL: name: select_s32_vcc_fneg_rhs 413 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 414 ; GCN-NEXT: {{ $}} 415 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 416 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 417 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 418 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 419 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 420 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 1, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec 421 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 422 %0:vgpr(s32) = COPY $vgpr0 423 %1:vgpr(s32) = COPY $vgpr1 424 %2:vgpr(s32) = COPY $vgpr2 425 %3:vgpr(s32) = COPY $vgpr3 426 %4:vgpr(s32) = G_FNEG %3 427 %5:vcc(s1) = G_ICMP intpred(eq), %0, %1 428 %6:vgpr(s32) = G_SELECT %5, %2, %4 429 S_ENDPGM 0, implicit %6 430 431... 432 433--- 434name: select_s32_vcc_fneg_fabs_lhs 435legalized: true 436regBankSelected: true 437 438body: | 439 bb.0: 440 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 441 442 ; GCN-LABEL: name: select_s32_vcc_fneg_fabs_lhs 443 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 444 ; GCN-NEXT: {{ $}} 445 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 446 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 447 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 448 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 449 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 450 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 3, [[COPY3]], [[V_CMP_EQ_U32_e64_]], implicit $exec 451 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 452 %0:vgpr(s32) = COPY $vgpr0 453 %1:vgpr(s32) = COPY $vgpr1 454 %2:vgpr(s32) = COPY $vgpr2 455 %3:vgpr(s32) = COPY $vgpr3 456 %4:vgpr(s32) = G_FABS %3 457 %5:vgpr(s32) = G_FNEG %4 458 %6:vcc(s1) = G_ICMP intpred(eq), %0, %1 459 %7:vgpr(s32) = G_SELECT %6, %5, %2 460 S_ENDPGM 0, implicit %7 461 462... 463 464# Make sure we don't try to fold source modifiers into non-32 bit value. 465--- 466name: select_s16_vcc_fneg_lhs 467legalized: true 468regBankSelected: true 469 470body: | 471 bb.0: 472 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 473 474 ; GCN-LABEL: name: select_s16_vcc_fneg_lhs 475 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 476 ; GCN-NEXT: {{ $}} 477 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 478 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 479 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 480 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 481 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768 482 ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec 483 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY2]], [[COPY3]], implicit $exec 484 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY1]], 0, [[V_XOR_B32_e64_]], [[V_CMP_EQ_U32_e64_]], implicit $exec 485 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 486 %0:vgpr(s32) = COPY $vgpr0 487 %1:vgpr(s32) = COPY $vgpr1 488 %2:vgpr(s32) = COPY $vgpr2 489 %3:vgpr(s32) = COPY $vgpr3 490 %4:vgpr(s16) = G_TRUNC %0 491 %5:vgpr(s16) = G_TRUNC %1 492 %6:vgpr(s16) = G_FNEG %4 493 %7:vcc(s1) = G_ICMP intpred(eq), %2, %3 494 %8:vgpr(s16) = G_SELECT %7, %6, %5 495 S_ENDPGM 0, implicit %8 496 497... 498 499 500# Make sure we don't try to fold source modifiers into a vector 501--- 502name: select_v2s16_vcc_fneg_lhs 503legalized: true 504regBankSelected: true 505 506body: | 507 bb.0: 508 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 509 510 ; GCN-LABEL: name: select_v2s16_vcc_fneg_lhs 511 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 512 ; GCN-NEXT: {{ $}} 513 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 514 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 515 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3 516 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416 517 ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY2]], implicit $exec 518 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 519 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[V_XOR_B32_e64_]], [[V_CMP_EQ_U32_e64_]], implicit $exec 520 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]] 521 %0:vgpr(s32) = COPY $vgpr0 522 %1:vgpr(s32) = COPY $vgpr1 523 %2:vgpr(<2 x s16>) = COPY $vgpr2 524 %3:vgpr(<2 x s16>) = COPY $vgpr3 525 %4:vgpr(<2 x s16>) = G_FNEG %3 526 %5:vcc(s1) = G_ICMP intpred(eq), %0, %1 527 %6:vgpr(<2 x s16>) = G_SELECT %5, %4, %3 528 S_ENDPGM 0, implicit %6 529 530... 531 532# Make sure we don't try to fold source modifiers into a scalar select 533 534--- 535name: select_s32_scc_fneg_lhs 536legalized: true 537regBankSelected: true 538 539body: | 540 bb.0: 541 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 542 543 ; GCN-LABEL: name: select_s32_scc_fneg_lhs 544 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 545 ; GCN-NEXT: {{ $}} 546 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 547 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 548 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 549 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 550 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648 551 ; GCN-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc 552 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 553 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 554 ; GCN-NEXT: $scc = COPY [[COPY4]] 555 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[S_XOR_B32_]], [[COPY3]], implicit $scc 556 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]] 557 %0:sgpr(s32) = COPY $sgpr0 558 %1:sgpr(s32) = COPY $sgpr1 559 %2:sgpr(s32) = COPY $sgpr2 560 %3:sgpr(s32) = COPY $sgpr3 561 %4:sgpr(s32) = G_FNEG %2 562 %5:sgpr(s32) = G_ICMP intpred(eq), %0, %1 563 %6:sgpr(s32) = G_SELECT %5, %4, %3 564 S_ENDPGM 0, implicit %6 565 566... 567 568--- 569name: select_s32_scc_fneg_rhs 570legalized: true 571regBankSelected: true 572 573body: | 574 bb.0: 575 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 576 577 ; GCN-LABEL: name: select_s32_scc_fneg_rhs 578 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3 579 ; GCN-NEXT: {{ $}} 580 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 581 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 582 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 583 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 584 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648 585 ; GCN-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY3]], [[S_MOV_B32_]], implicit-def dead $scc 586 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc 587 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc 588 ; GCN-NEXT: $scc = COPY [[COPY4]] 589 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY2]], [[S_XOR_B32_]], implicit $scc 590 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]] 591 %0:sgpr(s32) = COPY $sgpr0 592 %1:sgpr(s32) = COPY $sgpr1 593 %2:sgpr(s32) = COPY $sgpr2 594 %3:sgpr(s32) = COPY $sgpr3 595 %4:sgpr(s32) = G_FNEG %3 596 %5:sgpr(s32) = G_ICMP intpred(eq), %0, %1 597 %6:sgpr(s32) = G_SELECT %5, %2, %4 598 S_ENDPGM 0, implicit %6 599 600... 601