159 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs -stress-regalloc=2 -start-before=greedy -stop-after=virtregmap -o - %s | FileCheck %s3 4# Test that a spill of a copy of exec is not folded to be a spill of exec directly.5 6---7 8name: merge_sgpr_spill_into_copy_from_exec_lo9tracksRegLiveness: true10machineFunctionInfo:11 isEntryFunction: true12body: |13 bb.0:14 ; CHECK-LABEL: name: merge_sgpr_spill_into_copy_from_exec_lo15 ; CHECK: S_NOP 0, implicit-def $exec_lo16 ; CHECK-NEXT: $sgpr0 = S_MOV_B32 $exec_lo17 ; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF18 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr019 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 020 ; CHECK-NEXT: S_NOP 0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0, implicit killed renamable $sgpr021 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 022 ; CHECK-NEXT: $exec_lo = S_MOV_B32 killed $sgpr023 ; CHECK-NEXT: S_SENDMSG 0, implicit $m0, implicit $exec24 S_NOP 0, implicit-def $exec_lo25 %0:sreg_32 = COPY $exec_lo26 S_NOP 0, implicit-def %1:sreg_32, implicit-def %2:sreg_32, implicit %027 $exec_lo = COPY %028 S_SENDMSG 0, implicit $m0, implicit $exec29 30...31---32 33name: merge_sgpr_spill_into_copy_from_exec_hi34tracksRegLiveness: true35machineFunctionInfo:36 isEntryFunction: true37body: |38 bb.0:39 ; CHECK-LABEL: name: merge_sgpr_spill_into_copy_from_exec_hi40 ; CHECK: S_NOP 0, implicit-def $exec_hi41 ; CHECK-NEXT: $sgpr0 = S_MOV_B32 $exec_hi42 ; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF43 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr044 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 045 ; CHECK-NEXT: S_NOP 0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0, implicit killed renamable $sgpr046 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 047 ; CHECK-NEXT: $exec_hi = S_MOV_B32 killed $sgpr048 ; CHECK-NEXT: S_SENDMSG 0, implicit $m0, implicit $exec49 S_NOP 0, implicit-def $exec_hi50 %0:sreg_32 = COPY $exec_hi51 S_NOP 0, implicit-def %1:sreg_32, implicit-def %2:sreg_32, implicit %052 $exec_hi = COPY %053 S_SENDMSG 0, implicit $m0, implicit $exec54 55...56---57 58name: merge_sgpr_spill_into_copy_from_exec59tracksRegLiveness: true60machineFunctionInfo:61 isEntryFunction: true62body: |63 bb.0:64 ; CHECK-LABEL: name: merge_sgpr_spill_into_copy_from_exec65 ; CHECK: S_NOP 0, implicit-def $exec66 ; CHECK-NEXT: $sgpr0_sgpr1 = S_MOV_B64 $exec67 ; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF68 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0, implicit-def $sgpr0_sgpr1, implicit $sgpr0_sgpr169 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr1, 1, $vgpr0, implicit $sgpr0_sgpr170 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr171 ; CHECK-NEXT: $sgpr1 = V_READLANE_B32 $vgpr0, 172 ; CHECK-NEXT: S_NOP 0, implicit-def dead renamable $sgpr2_sgpr3, implicit-def dead renamable $sgpr0_sgpr1, implicit killed renamable $sgpr0_sgpr173 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr174 ; CHECK-NEXT: $sgpr1 = V_READLANE_B32 $vgpr0, 175 ; CHECK-NEXT: $exec = S_MOV_B64 killed $sgpr0_sgpr176 ; CHECK-NEXT: S_SENDMSG 0, implicit $m0, implicit $exec77 S_NOP 0, implicit-def $exec78 %0:sreg_64 = COPY $exec79 S_NOP 0, implicit-def %1:sreg_64, implicit-def %2:sreg_64, implicit %080 $exec = COPY %081 S_SENDMSG 0, implicit $m0, implicit $exec82 83...84 85# Test that a reload into a copy of exec is not folded to be a reload of exec directly.86 87---88 89name: reload_sgpr_spill_into_copy_to_exec_lo90tracksRegLiveness: true91machineFunctionInfo:92 isEntryFunction: true93body: |94 bb.0:95 ; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec_lo96 ; CHECK: S_NOP 0, implicit-def renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def $exec_lo97 ; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF98 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr099 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0100 ; CHECK-NEXT: S_NOP 0, implicit killed renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0101 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0102 ; CHECK-NEXT: $exec_lo = S_MOV_B32 killed $sgpr0103 ; CHECK-NEXT: S_SENDMSG 0, implicit $m0, implicit $exec104 S_NOP 0, implicit-def %0:sreg_32, implicit-def %1:sreg_32, implicit-def $exec_lo105 S_NOP 0, implicit %0, implicit-def %3:sreg_32, implicit-def %4:sreg_32106 $exec_lo = COPY %0107 S_SENDMSG 0, implicit $m0, implicit $exec108 109...110---111 112name: reload_sgpr_spill_into_copy_to_exec_hi113tracksRegLiveness: true114machineFunctionInfo:115 isEntryFunction: true116body: |117 bb.0:118 ; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec_hi119 ; CHECK: S_NOP 0, implicit-def renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def $exec_hi120 ; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF121 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0122 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0123 ; CHECK-NEXT: S_NOP 0, implicit killed renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0124 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0125 ; CHECK-NEXT: $exec_hi = S_MOV_B32 killed $sgpr0126 ; CHECK-NEXT: S_SENDMSG 0, implicit $m0, implicit $exec127 S_NOP 0, implicit-def %0:sreg_32, implicit-def %1:sreg_32, implicit-def $exec_hi128 S_NOP 0, implicit %0, implicit-def %3:sreg_32, implicit-def %4:sreg_32129 $exec_hi = COPY %0130 S_SENDMSG 0, implicit $m0, implicit $exec131 132...133---134 135name: reload_sgpr_spill_into_copy_to_exec136tracksRegLiveness: true137machineFunctionInfo:138 isEntryFunction: true139body: |140 bb.0:141 ; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec142 ; CHECK: S_NOP 0, implicit-def renamable $sgpr0_sgpr1, implicit-def dead renamable $sgpr2_sgpr3, implicit-def $exec143 ; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF144 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0, implicit-def $sgpr0_sgpr1, implicit $sgpr0_sgpr1145 ; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr1, 1, $vgpr0, implicit $sgpr0_sgpr1146 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr1147 ; CHECK-NEXT: $sgpr1 = V_READLANE_B32 $vgpr0, 1148 ; CHECK-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1, implicit-def dead renamable $sgpr2_sgpr3, implicit-def dead renamable $sgpr0_sgpr1149 ; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0, implicit-def $sgpr0_sgpr1150 ; CHECK-NEXT: $sgpr1 = V_READLANE_B32 $vgpr0, 1151 ; CHECK-NEXT: $exec = S_MOV_B64 killed $sgpr0_sgpr1152 ; CHECK-NEXT: S_SENDMSG 0, implicit $m0, implicit $exec153 S_NOP 0, implicit-def %0:sreg_64, implicit-def %1:sreg_64, implicit-def $exec154 S_NOP 0, implicit %0, implicit-def %3:sreg_64, implicit-def %4:sreg_64155 $exec = COPY %0156 S_SENDMSG 0, implicit $m0, implicit $exec157 158...159