1# RUN: llc -march=amdgcn -mcpu=fiji -run-pass si-pre-emit-peephole -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s 2# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass si-pre-emit-peephole -verify-machineinstrs -o - %s | FileCheck -check-prefix=W32 %s 3 4--- 5# GCN-LABEL: name: and_execz_mov_vccz 6# GCN-NOT: S_MOV_ 7# GCN-NOT: S_AND_ 8# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 9name: and_execz_mov_vccz 10body: | 11 bb.0: 12 S_NOP 0 13 14 bb.1: 15 S_NOP 0 16 17 bb.2: 18 $sgpr0_sgpr1 = S_MOV_B64 -1 19 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 20 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 21 S_ENDPGM 0 22... 23--- 24# GCN-LABEL: name: and_execz_imm_vccz 25# GCN-NOT: S_AND_ 26# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 27name: and_execz_imm_vccz 28body: | 29 bb.0: 30 S_NOP 0 31 32 bb.1: 33 S_NOP 0 34 35 bb.2: 36 $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc 37 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 38 S_ENDPGM 0 39... 40--- 41# GCN-LABEL: name: and_execnz_imm_vccnz 42# GCN-NOT: S_AND_ 43# GCN: S_CBRANCH_EXECNZ %bb.1, implicit $exec 44name: and_execnz_imm_vccnz 45body: | 46 bb.0: 47 S_NOP 0 48 49 bb.1: 50 S_NOP 0 51 52 bb.2: 53 $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc 54 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc 55 S_ENDPGM 0 56... 57--- 58# GCN-LABEL: name: and_execz_imm_vccz_live_scc 59# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 60# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 61name: and_execz_imm_vccz_live_scc 62body: | 63 bb.0: 64 S_NOP 0 65 66 bb.1: 67 S_NOP 0 68 69 bb.2: 70 $vcc = S_AND_B64 $exec, -1, implicit-def $scc 71 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 72 S_ENDPGM 0 73... 74--- 75# GCN-LABEL: name: and_execz_mov_vccz_live_scc 76# GCN-NOT: S_MOV_ 77# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 78# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 79name: and_execz_mov_vccz_live_scc 80body: | 81 bb.0: 82 S_NOP 0 83 84 bb.1: 85 S_NOP 0 86 87 bb.2: 88 $sgpr0_sgpr1 = S_MOV_B64 -1 89 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc 90 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 91 S_ENDPGM 0 92... 93--- 94# GCN-LABEL: name: and_execz_mov_vccz_live_sreg 95# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 96# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 97name: and_execz_mov_vccz_live_sreg 98body: | 99 bb.0: 100 S_NOP 0 101 102 bb.1: 103 S_NOP 0 104 105 bb.2: 106 $sgpr0_sgpr1 = S_MOV_B64 -1 107 $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc 108 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 109 S_ENDPGM 0 110... 111--- 112# GCN-LABEL: name: and_execz_mov_vccz_live_sreg_commute 113# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 114# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 115name: and_execz_mov_vccz_live_sreg_commute 116body: | 117 bb.0: 118 S_NOP 0 119 120 bb.1: 121 S_NOP 0 122 123 bb.2: 124 $sgpr0_sgpr1 = S_MOV_B64 -1 125 $vcc = S_AND_B64 $sgpr0_sgpr1, $exec, implicit-def dead $scc 126 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 127 S_ENDPGM 0 128... 129--- 130# GCN-LABEL: name: and_execz_mov_vccz_live_scc_commute 131# GCN-NOT: S_MOV_ 132# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 133# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 134name: and_execz_mov_vccz_live_scc_commute 135body: | 136 bb.0: 137 S_NOP 0 138 139 bb.1: 140 S_NOP 0 141 142 bb.2: 143 $sgpr0_sgpr1 = S_MOV_B64 -1 144 $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def $scc 145 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 146 S_ENDPGM 0 147... 148--- 149# GCN-LABEL: name: and_execz_mov_vccz_commute 150# GCN-NOT: S_MOV_ 151# GCN-NOT: S_AND_ 152# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec 153name: and_execz_mov_vccz_commute 154body: | 155 bb.0: 156 S_NOP 0 157 158 bb.1: 159 S_NOP 0 160 161 bb.2: 162 $sgpr0_sgpr1 = S_MOV_B64 -1 163 $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def dead $scc 164 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 165 S_ENDPGM 0 166... 167--- 168# GCN-LABEL: name: and_execz_mov_exec_vccz 169# GCN: $exec = S_MOV_B64 -1 170# GCN-NEXT: S_ENDPGM 0 171name: and_execz_mov_exec_vccz 172body: | 173 bb.0: 174 S_NOP 0 175 176 bb.1: 177 S_NOP 0 178 179 bb.2: 180 $exec = S_MOV_B64 -1 181 $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc 182 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 183 S_ENDPGM 0 184... 185--- 186# GCN-LABEL: name: and_execz_mov_exec_vccnz 187# GCN: $exec = S_MOV_B64 -1 188# GCN-NEXT: S_BRANCH %bb.1{{$}} 189name: and_execz_mov_exec_vccnz 190body: | 191 bb.0: 192 S_NOP 0 193 194 bb.1: 195 S_NOP 0 196 197 bb.2: 198 $exec = S_MOV_B64 -1 199 $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc 200 S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc 201 S_ENDPGM 0 202... 203--- 204# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_early 205# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 206# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1 207# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 208name: and_execz_mov_vccz_reads_sreg_early 209body: | 210 bb.0: 211 S_NOP 0 212 213 bb.1: 214 S_NOP 0 215 216 bb.2: 217 $sgpr0_sgpr1 = S_MOV_B64 -1 218 $sgpr2 = S_MOV_B32 $sgpr1 219 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 220 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 221 S_ENDPGM 0 222... 223--- 224# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_late 225# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 226# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1 227# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 228name: and_execz_mov_vccz_reads_sreg_late 229body: | 230 bb.0: 231 S_NOP 0 232 233 bb.1: 234 S_NOP 0 235 236 bb.2: 237 $sgpr0_sgpr1 = S_MOV_B64 -1 238 $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc 239 $sgpr2 = S_MOV_B32 $sgpr1 240 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 241 S_ENDPGM 0 242... 243# GCN-LABEL: name: and_execz_mov_vccz_reads_writes_sreg_early 244# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 245# GCN-NEXT: $sgpr1 = S_MOV_B32 $sgpr0 246# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 247# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 248name: and_execz_mov_vccz_reads_writes_sreg_early 249body: | 250 bb.0: 251 S_NOP 0 252 253 bb.1: 254 S_NOP 0 255 256 bb.2: 257 $sgpr0_sgpr1 = S_MOV_B64 -1 258 $sgpr1 = S_MOV_B32 $sgpr0 259 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 260 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 261 S_ENDPGM 0 262... 263--- 264# GCN-LABEL: name: and_execz_mov_vccz_reads_cond 265# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc 266# GCN-NEXT: $sgpr2 = S_MOV_B32 $vcc_lo 267# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 268name: and_execz_mov_vccz_reads_cond 269body: | 270 bb.0: 271 S_NOP 0 272 273 bb.1: 274 S_NOP 0 275 276 bb.2: 277 $sgpr0_sgpr1 = S_MOV_B64 -1 278 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 279 $sgpr2 = S_MOV_B32 $vcc_lo 280 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 281 S_ENDPGM 0 282... 283--- 284# GCN-LABEL: name: and_execz_mov_vccz_modifies_sreg 285# GCN: $sgpr0_sgpr1 = S_MOV_B64 -1 286# GCN-NEXT: $sgpr0 = S_MOV_B32 0 287# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 288# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 289name: and_execz_mov_vccz_modifies_sreg 290body: | 291 bb.0: 292 S_NOP 0 293 294 bb.1: 295 S_NOP 0 296 297 bb.2: 298 $sgpr0_sgpr1 = S_MOV_B64 -1 299 $sgpr0 = S_MOV_B32 0 300 $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc 301 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 302 S_ENDPGM 0 303... 304--- 305# GCN-LABEL: name: and_execz_imm_vccz_liveout_scc 306# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc 307# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 308# GCN-NEXT: S_ENDPGM 0, implicit $scc 309name: and_execz_imm_vccz_liveout_scc 310body: | 311 bb.0: 312 S_NOP 0 313 314 bb.1: 315 S_NOP 0 316 317 bb.2: 318 $vcc = S_AND_B64 $exec, -1, implicit-def $scc 319 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 320 S_ENDPGM 0, implicit $scc 321... 322--- 323# W32-LABEL: name: and_execz_mov_vccz_w32 324# W32-NOT: S_MOV_ 325# W32-NOT: S_AND_ 326# W32: S_CBRANCH_EXECZ %bb.1, implicit $exec 327name: and_execz_mov_vccz_w32 328body: | 329 bb.0: 330 S_NOP 0 331 332 bb.1: 333 S_NOP 0 334 335 bb.2: 336 $sgpr0 = S_MOV_B32 -1 337 $vcc_lo = S_AND_B32 $exec_lo, killed $sgpr0, implicit-def dead $scc 338 S_CBRANCH_VCCZ %bb.1, implicit killed $vcc 339 S_ENDPGM 0 340... 341