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