359 lines · plain
1# RUN: llc -mtriple=amdgcn -verify-machineinstrs -run-pass si-optimize-exec-masking-pre-ra %s -o - | FileCheck -check-prefix=GCN %s2 3# GCN-LABEL: name: kill_all4# GCN: bb.0:5# GCN-NEXT: S_ENDPGM 06name: kill_all7tracksRegLiveness: true8registers:9 - { id: 0, class: vreg_64 }10 - { id: 1, class: vgpr_32 }11 - { id: 2, class: vgpr_32 }12 - { id: 3, class: sgpr_32 }13 - { id: 4, class: sgpr_32 }14body: |15 bb.0:16 $vcc = IMPLICIT_DEF17 %0 = IMPLICIT_DEF18 %3 = IMPLICIT_DEF19 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc20 %1 = FLAT_LOAD_DWORD %0, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32))21 %2 = V_ADD_F32_e64 0, killed %1, 0, 1, 0, 0, implicit $mode, implicit $exec22 %4 = S_ADD_U32 %3, 1, implicit-def $scc23 S_ENDPGM 024...25---26# GCN-LABEL: name: load_without_memoperand27# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc28# GCN-NEXT: dead %1:vgpr_32 = FLAT_LOAD_DWORD %0, 0, 0, implicit $exec, implicit $flat_scr29# GCN-NEXT: S_ENDPGM 030name: load_without_memoperand31tracksRegLiveness: true32registers:33 - { id: 0, class: vreg_64 }34 - { id: 1, class: vgpr_32 }35 - { id: 2, class: vgpr_32 }36 - { id: 3, class: sgpr_32 }37 - { id: 4, class: sgpr_32 }38body: |39 bb.0:40 $vcc = IMPLICIT_DEF41 %0 = IMPLICIT_DEF42 %3 = IMPLICIT_DEF43 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc44 %1 = FLAT_LOAD_DWORD %0, 0, 0, implicit $exec, implicit $flat_scr45 %2 = V_ADD_F32_e64 0, killed %1, 0, 1, 0, 0, implicit $mode, implicit $exec46 %4 = S_ADD_U32 %3, 1, implicit-def $scc47 S_ENDPGM 048...49---50# GCN-LABEL: name: load_volatile51# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc52# GCN-NEXT: dead %1:vgpr_32 = FLAT_LOAD_DWORD %0, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load (s32))53# GCN-NEXT: S_ENDPGM 054name: load_volatile55tracksRegLiveness: true56registers:57 - { id: 0, class: vreg_64 }58 - { id: 1, class: vgpr_32 }59 - { id: 2, class: vgpr_32 }60 - { id: 3, class: sgpr_32 }61 - { id: 4, class: sgpr_32 }62body: |63 bb.0:64 $vcc = IMPLICIT_DEF65 %0 = IMPLICIT_DEF66 %3 = IMPLICIT_DEF67 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc68 %1 = FLAT_LOAD_DWORD %0, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load (s32))69 %2 = V_ADD_F32_e64 0, killed %1, 0, 1, 0, 0, implicit $mode, implicit $exec70 %4 = S_ADD_U32 %3, 1, implicit-def $scc71 S_ENDPGM 072...73---74# GCN-LABEL: name: store75# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc76# GCN-NEXT: FLAT_STORE_DWORD %0, %1, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))77# GCN-NEXT: S_ENDPGM 078name: store79tracksRegLiveness: true80registers:81 - { id: 0, class: vreg_64 }82 - { id: 1, class: vgpr_32 }83body: |84 bb.0:85 $vcc = IMPLICIT_DEF86 %0 = IMPLICIT_DEF87 %1 = IMPLICIT_DEF88 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc89 FLAT_STORE_DWORD %0, %1, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))90 S_ENDPGM 091...92---93# GCN-LABEL: name: barrier94# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc95# GCN-NEXT: S_BARRIER96# GCN-NEXT: S_ENDPGM 097name: barrier98tracksRegLiveness: true99body: |100 bb.0:101 $vcc = IMPLICIT_DEF102 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc103 S_BARRIER104 S_ENDPGM 0105...106---107# GCN-LABEL: name: call108# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc109# GCN-NEXT: $sgpr4_sgpr5 = S_SWAPPC_B64 $sgpr2_sgpr3110# GCN-NEXT: S_ENDPGM 0111name: call112tracksRegLiveness: true113body: |114 bb.0:115 liveins: $sgpr2_sgpr3116 $vcc = IMPLICIT_DEF117 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc118 $sgpr4_sgpr5 = S_SWAPPC_B64 $sgpr2_sgpr3119 S_ENDPGM 0120...121---122# GCN-LABEL: name: exp123# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc124# GCN-NEXT: EXP 32, undef %0:vgpr_32, undef %1:vgpr_32, %2, undef %3:vgpr_32, 0, 0, 15, implicit $exec125# GCN-NEXT: S_ENDPGM 0126name: exp127tracksRegLiveness: true128registers:129 - { id: 0, class: vgpr_32 }130 - { id: 1, class: vgpr_32 }131 - { id: 2, class: vgpr_32 }132 - { id: 3, class: vgpr_32 }133body: |134 bb.0:135 $vcc = IMPLICIT_DEF136 %2 = IMPLICIT_DEF137 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc138 EXP 32, undef %0, undef %1, killed %2, undef %3, 0, 0, 15, implicit $exec139 S_ENDPGM 0140...141---142# GCN-LABEL: name: return_to_epilog143# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc144# GCN-NEXT: SI_RETURN_TO_EPILOG killed $vgpr0145name: return_to_epilog146tracksRegLiveness: true147body: |148 bb.0:149 $vcc = IMPLICIT_DEF150 $vgpr0 = IMPLICIT_DEF151 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc152 SI_RETURN_TO_EPILOG killed $vgpr0153...154---155# GCN-LABEL: name: split_block156# GCN: bb.0:157# GCN-NEXT: successors: %bb.1158# GCN-NOT: S_OR_B64159# GCN: bb.1:160# GCN-NEXT: S_ENDPGM 0161name: split_block162tracksRegLiveness: true163registers:164 - { id: 0, class: vgpr_32 }165 - { id: 1, class: vgpr_32 }166 - { id: 2, class: sgpr_32 }167 - { id: 3, class: sgpr_32 }168body: |169 bb.0:170 $vcc = IMPLICIT_DEF171 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc172 173 bb.1:174 %0 = IMPLICIT_DEF175 %2 = IMPLICIT_DEF176 %1 = V_ADD_F32_e64 0, killed %0, 0, 1, 0, 0, implicit $mode, implicit $exec177 %3 = S_ADD_U32 %2, 1, implicit-def $scc178 S_ENDPGM 0179...180---181# GCN-LABEL: name: split_block_empty_block182# GCN: bb.0:183# GCN-NEXT: successors: %bb.1184# GCN-NOT: S_OR_B64185# GCN: bb.1:186# GCN: bb.2:187# GCN-NEXT: S_ENDPGM 0188name: split_block_empty_block189tracksRegLiveness: true190body: |191 bb.0:192 $vcc = IMPLICIT_DEF193 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc194 195 bb.1:196 197 bb.2:198 S_ENDPGM 0199...200---201# GCN-LABEL: name: split_block_uncond_branch202# GCN: bb.0:203# GCN-NEXT: successors: %bb.1204# GCN: S_BRANCH %bb.1205# GCN-NOT: S_OR_B64206# GCN: bb.1:207# GCN-NEXT: S_ENDPGM 0208name: split_block_uncond_branch209tracksRegLiveness: true210body: |211 bb.0:212 $vcc = IMPLICIT_DEF213 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc214 S_BRANCH %bb.1215 216 bb.1:217 S_ENDPGM 0218...219---220# GCN-LABEL: name: split_block_cond_branch221# GCN: bb.0:222# GCN-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)223# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, $vcc, implicit-def $scc224# GCN: S_CBRANCH_VCCNZ %bb.2, implicit undef $vcc225# GCN: bb.1:226# GCN: bb.2:227# GCN-NEXT: S_ENDPGM 0228name: split_block_cond_branch229tracksRegLiveness: true230body: |231 bb.0:232 $vcc = IMPLICIT_DEF233 $sgpr0_sgpr1 = S_OR_B64 $exec, $vcc, implicit-def $scc234 S_CBRANCH_VCCNZ %bb.2, implicit undef $vcc235 236 bb.1:237 238 bb.2:239 S_ENDPGM 0240...241---242# GCN-LABEL: name: two_preds_both_dead243# GCN: bb.0:244# GCN-NEXT: successors: %bb.2245# GCN-NOT: S_OR246# GCN: S_BRANCH %bb.2247# GCN: bb.1:248# GCN-NEXT: successors: %bb.2249# GCN-NOT: S_AND250# GCN: S_BRANCH %bb.2251# GCN: bb.2:252# GCN-NEXT: S_ENDPGM 0253name: two_preds_both_dead254tracksRegLiveness: true255body: |256 bb.0:257 $vcc = IMPLICIT_DEF258 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc259 S_BRANCH %bb.2260 261 bb.1:262 $vcc = IMPLICIT_DEF263 $sgpr0_sgpr1 = S_AND_B64 $exec, killed $vcc, implicit-def $scc264 S_BRANCH %bb.2265 266 bb.2:267 S_ENDPGM 0268...269---270# GCN-LABEL: name: two_preds_one_dead271# GCN: bb.0:272# GCN-NEXT: successors: %bb.2273# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc274# GCN-NEXT: S_BARRIER275# GCN-NEXT: S_BRANCH %bb.2276# GCN: bb.1:277# GCN-NEXT: successors: %bb.2278# GCN-NOT: S_AND279# GCN: S_BRANCH %bb.2280# GCN: bb.2:281# GCN-NEXT: S_ENDPGM 0282name: two_preds_one_dead283tracksRegLiveness: true284body: |285 bb.0:286 $vcc = IMPLICIT_DEF287 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc288 S_BARRIER289 S_BRANCH %bb.2290 291 bb.1:292 $vcc = IMPLICIT_DEF293 $sgpr0_sgpr1 = S_AND_B64 $exec, killed $vcc, implicit-def $scc294 S_BRANCH %bb.2295 296 bb.2:297 S_ENDPGM 0298...299 300# GCN-LABEL: name: implicit_use_on_S_ENDPGM 0301# GCN: V_ADD_CO_U32302# GCN: COPY303# GCN: V_ADDC_U32304# GCN: S_ENDPGM 0, implicit %3305name: implicit_use_on_S_ENDPGM 0306tracksRegLiveness: true307 308body: |309 bb.0:310 dead %0:vgpr_32 = V_ADD_CO_U32_e32 12345, undef %1:vgpr_32, implicit-def $vcc, implicit $exec311 %2:sreg_64_xexec = COPY $vcc312 %3:vgpr_32, dead %4:sreg_64_xexec = V_ADDC_U32_e64 undef %5:vgpr_32, undef %6:vgpr_32, %2, 0, implicit $exec313 S_ENDPGM 0, implicit %3314 315...316 317---318# GCN-LABEL: name: inlineasm_nosideeffect319# GCN-NOT: S_OR_B64320# GCN-NOT: INLINEASM321# GCN: S_ENDPGM 0322name: inlineasm_nosideeffect323tracksRegLiveness: true324registers:325 - { id: 0, class: vreg_64 }326 - { id: 1, class: vgpr_32 }327body: |328 bb.0:329 $vcc = IMPLICIT_DEF330 %0 = IMPLICIT_DEF331 %1 = IMPLICIT_DEF332 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc333 %2:sreg_64 = IMPLICIT_DEF334 INLINEASM &"", 0335 S_ENDPGM 0336...337 338---339# GCN-LABEL: name: inlineasm_sideeffect340# GCN: $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc341# GCN-NEXT: IMPLICIT_DEF342# GCN-NEXT: INLINEASM343# GCN-NEXT: S_ENDPGM 0344name: inlineasm_sideeffect345tracksRegLiveness: true346registers:347 - { id: 0, class: vreg_64 }348 - { id: 1, class: vgpr_32 }349body: |350 bb.0:351 $vcc = IMPLICIT_DEF352 %0 = IMPLICIT_DEF353 %1 = IMPLICIT_DEF354 $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc355 %2:sreg_64 = IMPLICIT_DEF356 INLINEASM &"", 1357 S_ENDPGM 0358...359