586 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=virtregrewriter -o - %s | FileCheck -check-prefix=GCN %s3 4# Case that should really rematerialize5---6name: test_remat_s_load_dword_imm7tracksRegLiveness: true8body: |9 bb.0:10 liveins: $sgpr8_sgpr911 ; GCN-LABEL: name: test_remat_s_load_dword_imm12 ; GCN: liveins: $sgpr8_sgpr913 ; GCN-NEXT: {{ $}}14 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr915 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)16 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)17 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr018 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr119 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)20 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr021 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr322 %0:sreg_64_xexec = COPY $sgpr8_sgpr923 %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)24 %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)25 %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)26 S_NOP 0, implicit %127 S_NOP 0, implicit %228 S_NOP 0, implicit %329 S_ENDPGM 0, implicit %030...31 32---33name: test_remat_s_load_dword_immx234tracksRegLiveness: true35body: |36 bb.0:37 liveins: $sgpr8_sgpr938 ; GCN-LABEL: name: test_remat_s_load_dword_immx239 ; GCN: liveins: $sgpr8_sgpr940 ; GCN-NEXT: {{ $}}41 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr942 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s64), addrspace 4)43 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr344 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s64), addrspace 4)45 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr346 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s64), addrspace 4)47 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr348 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr149 %0:sreg_64_xexec = COPY $sgpr8_sgpr950 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 0, 0 :: (invariant dereferenceable load (s64), addrspace 4)51 %2:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 4, 0 :: (invariant dereferenceable load (s64), addrspace 4)52 %3:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 8, 0 :: (invariant dereferenceable load (s64), addrspace 4)53 S_NOP 0, implicit %154 S_NOP 0, implicit %255 S_NOP 0, implicit %356 S_ENDPGM 0, implicit %057...58 59---60name: test_remat_s_load_dword_immx461tracksRegLiveness: true62body: |63 bb.0:64 liveins: $sgpr8_sgpr965 ; GCN-LABEL: name: test_remat_s_load_dword_immx466 ; GCN: liveins: $sgpr8_sgpr967 ; GCN-NEXT: {{ $}}68 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr969 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s128), addrspace 4)70 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr771 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s128), addrspace 4)72 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr773 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s128), addrspace 4)74 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr775 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr176 %0:sreg_64_xexec = COPY $sgpr8_sgpr977 %1:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 0, 0 :: (invariant dereferenceable load (s128), addrspace 4)78 %2:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 4, 0 :: (invariant dereferenceable load (s128), addrspace 4)79 %3:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 8, 0 :: (invariant dereferenceable load (s128), addrspace 4)80 S_NOP 0, implicit %181 S_NOP 0, implicit %282 S_NOP 0, implicit %383 S_ENDPGM 0, implicit %084...85 86---87name: test_remat_s_load_dword_immx888tracksRegLiveness: true89body: |90 bb.0:91 liveins: $sgpr8_sgpr992 ; GCN-LABEL: name: test_remat_s_load_dword_immx893 ; GCN: liveins: $sgpr8_sgpr994 ; GCN-NEXT: {{ $}}95 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr996 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s256), addrspace 4)97 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr1198 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s256), addrspace 4)99 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11100 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s256), addrspace 4)101 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11102 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1103 %0:sreg_64_xexec = COPY $sgpr8_sgpr9104 %1:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 0, 0 :: (invariant dereferenceable load (s256), addrspace 4)105 %2:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 4, 0 :: (invariant dereferenceable load (s256), addrspace 4)106 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 8, 0 :: (invariant dereferenceable load (s256), addrspace 4)107 S_NOP 0, implicit %1108 S_NOP 0, implicit %2109 S_NOP 0, implicit %3110 S_ENDPGM 0, implicit %0111...112 113---114name: test_remat_s_load_dword_immx16115tracksRegLiveness: true116body: |117 bb.0:118 liveins: $sgpr8_sgpr9119 ; GCN-LABEL: name: test_remat_s_load_dword_immx16120 ; GCN: liveins: $sgpr8_sgpr9121 ; GCN-NEXT: {{ $}}122 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9123 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s512), addrspace 4)124 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19125 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s512), addrspace 4)126 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19127 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s512), addrspace 4)128 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19129 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1130 %0:sreg_64_xexec = COPY $sgpr8_sgpr9131 %1:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 0, 0 :: (invariant dereferenceable load (s512), addrspace 4)132 %2:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 4, 0 :: (invariant dereferenceable load (s512), addrspace 4)133 %3:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 8, 0 :: (invariant dereferenceable load (s512), addrspace 4)134 S_NOP 0, implicit %1135 S_NOP 0, implicit %2136 S_NOP 0, implicit %3137 S_ENDPGM 0, implicit %0138...139 140---141name: test_remat_s_load_dword_immx16_subreg142tracksRegLiveness: true143body: |144 bb.0:145 liveins: $sgpr8_sgpr9, $vgpr0_vgpr1146 ; GCN-LABEL: name: test_remat_s_load_dword_immx16_subreg147 ; GCN: liveins: $sgpr8_sgpr9, $vgpr0_vgpr1148 ; GCN-NEXT: {{ $}}149 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9150 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 128, 0 :: (dereferenceable invariant load (s512), align 4, addrspace 4)151 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 32, 0 :: (dereferenceable invariant load (s256), align 4, addrspace 4)152 ; GCN-NEXT: renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = COPY killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11153 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19154 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 128, 0 :: (dereferenceable invariant load (s512), align 4, addrspace 4)155 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s256), align 4, addrspace 4)156 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11157 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1158 %0:sreg_64_xexec = COPY $sgpr8_sgpr9159 %1:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 0, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)160 %2:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 128, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)161 %2.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512 = COPY %1.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512162 S_NOP 0, implicit %2.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15163 %3:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 128, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)164 %3.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7:sgpr_512 = COPY %1.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7:sgpr_512165 S_NOP 0, implicit %3.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7:sgpr_512166 167 S_ENDPGM 0, implicit %0168...169 170---171name: test_remat_s_load_dword_immx16_subreg_no_shrinking_double_use172tracksRegLiveness: true173body: |174 bb.0:175 liveins: $sgpr8_sgpr9, $vgpr0_vgpr1176 ; GCN-LABEL: name: test_remat_s_load_dword_immx16_subreg_no_shrinking_double_use177 ; GCN: liveins: $sgpr8_sgpr9, $vgpr0_vgpr1178 ; GCN-NEXT: {{ $}}179 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9180 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 128, 0 :: (dereferenceable invariant load (s512), align 4, addrspace 4)181 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s512), align 4, addrspace 4)182 ; GCN-NEXT: renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = KILL killed renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19, implicit renamable $sgpr4_sgpr5_sgpr6_sgpr7183 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19184 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 128, 0 :: (dereferenceable invariant load (s512), align 4, addrspace 4)185 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s256), align 4, addrspace 4)186 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = KILL killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11, implicit renamable $sgpr0_sgpr1187 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11188 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1189 %0:sreg_64_xexec = COPY $sgpr8_sgpr9190 %1:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 0, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)191 %2:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 128, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)192 %2.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512 = COPY %1.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512, implicit %1.sub0_sub1_sub2_sub3:sgpr_512193 S_NOP 0, implicit %2.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15194 %3:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 128, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)195 %3.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7:sgpr_512 = COPY %1.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7:sgpr_512, implicit %0196 S_NOP 0, implicit %3.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7:sgpr_512197 S_ENDPGM 0, implicit %0198...199 200---201name: test_remat_s_load_dword_immx16_subreg_no_shrinking_bundle202tracksRegLiveness: true203body: |204 bb.0:205 liveins: $sgpr8_sgpr9, $vgpr0_vgpr1206 ; GCN-LABEL: name: test_remat_s_load_dword_immx16_subreg_no_shrinking_bundle207 ; GCN: liveins: $sgpr8_sgpr9, $vgpr0_vgpr1208 ; GCN-NEXT: {{ $}}209 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9210 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 128, 0 :: (dereferenceable invariant load (s512), align 4, addrspace 4)211 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s512), align 4, addrspace 4)212 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19213 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1214 %0:sreg_64_xexec = COPY $sgpr8_sgpr9215 %1:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 0, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)216 %2:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 128, 0 :: (invariant dereferenceable load (s512), align 4, addrspace 4)217 %2.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512 = COPY %1.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512 {218 internal %2.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512 = COPY %1.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15:sgpr_512219 }220 S_NOP 0, implicit %2.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15221 222 S_ENDPGM 0, implicit %0223...224 225---226name: test_remat_s_load_dword_immx8_subreg227tracksRegLiveness: true228body: |229 bb.0:230 liveins: $sgpr8_sgpr9, $vgpr0_vgpr1231 ; GCN-LABEL: name: test_remat_s_load_dword_immx8_subreg232 ; GCN: liveins: $sgpr8_sgpr9, $vgpr0_vgpr1233 ; GCN-NEXT: {{ $}}234 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9235 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 128, 0 :: (dereferenceable invariant load (s256), align 4, addrspace 4)236 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 16, 0 :: (dereferenceable invariant load (s128), align 4, addrspace 4)237 ; GCN-NEXT: renamable $sgpr8_sgpr9_sgpr10_sgpr11 = COPY killed renamable $sgpr4_sgpr5_sgpr6_sgpr7238 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr8_sgpr9_sgpr10_sgpr11239 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 128, 0 :: (dereferenceable invariant load (s256), align 4, addrspace 4)240 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s128), align 4, addrspace 4)241 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7242 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1243 %0:sreg_64_xexec = COPY $sgpr8_sgpr9244 %1:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 0, 0 :: (invariant dereferenceable load (s256), align 4, addrspace 4)245 %2:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 128, 0 :: (invariant dereferenceable load (s256), align 4, addrspace 4)246 %2.sub4_sub5_sub6_sub7:sgpr_256 = COPY %1.sub4_sub5_sub6_sub7:sgpr_256247 S_NOP 0, implicit %2.sub4_sub5_sub6_sub7248 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 128, 0 :: (invariant dereferenceable load (s256), align 4, addrspace 4)249 %3.sub0_sub1_sub2_sub3:sgpr_256 = COPY %1.sub0_sub1_sub2_sub3:sgpr_256250 S_NOP 0, implicit %3.sub0_sub1_sub2_sub3:sgpr_256251 252 S_ENDPGM 0, implicit %0253...254 255 256---257name: test_remat_s_get_waveid_in_workgroup258tracksRegLiveness: true259body: |260 bb.0:261 liveins: $sgpr8_sgpr9262 ; GCN-LABEL: name: test_remat_s_get_waveid_in_workgroup263 ; GCN: liveins: $sgpr8_sgpr9264 ; GCN-NEXT: {{ $}}265 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9266 ; GCN-NEXT: renamable $sgpr0 = S_GET_WAVEID_IN_WORKGROUP267 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)268 ; GCN-NEXT: renamable $sgpr1 = S_GET_WAVEID_IN_WORKGROUP269 ; GCN-NEXT: renamable $sgpr0 = S_GET_WAVEID_IN_WORKGROUP270 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)271 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)272 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0273 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1274 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)275 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0276 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3277 %0:sreg_64_xexec = COPY $sgpr8_sgpr9278 %1:sreg_32_xm0_xexec = S_GET_WAVEID_IN_WORKGROUP279 %2:sreg_32_xm0_xexec = S_GET_WAVEID_IN_WORKGROUP280 %3:sreg_32_xm0_xexec = S_GET_WAVEID_IN_WORKGROUP281 S_NOP 0, implicit %1282 S_NOP 0, implicit %2283 S_NOP 0, implicit %3284 S_ENDPGM 0, implicit %0285...286 287 288---289name: test_remat_s_load_dword_sgpr290tracksRegLiveness: true291body: |292 bb.0:293 liveins: $sgpr8_sgpr9, $sgpr10294 ; GCN-LABEL: name: test_remat_s_load_dword_sgpr295 ; GCN: liveins: $sgpr10, $sgpr8_sgpr9296 ; GCN-NEXT: {{ $}}297 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9298 ; GCN-NEXT: renamable $sgpr0 = COPY $sgpr10299 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR renamable $sgpr2_sgpr3, renamable $sgpr0, 0 :: (dereferenceable invariant load (s32), addrspace 4)300 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1301 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR renamable $sgpr2_sgpr3, renamable $sgpr0, 0 :: (dereferenceable invariant load (s32), addrspace 4)302 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1303 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR renamable $sgpr2_sgpr3, renamable $sgpr0, 0 :: (dereferenceable invariant load (s32), addrspace 4)304 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1305 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3, implicit killed renamable $sgpr0306 %0:sreg_64_xexec = COPY $sgpr8_sgpr9307 %1:sgpr_32 = COPY $sgpr10308 %2:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR %0, %1, 0 :: (invariant dereferenceable load (s32), addrspace 4)309 %3:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR %0, %1, 0 :: (invariant dereferenceable load (s32), addrspace 4)310 %4:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR %0, %1, 0 :: (invariant dereferenceable load (s32), addrspace 4)311 S_NOP 0, implicit %2312 S_NOP 0, implicit %3313 S_NOP 0, implicit %4314 S_ENDPGM 0, implicit %0, implicit %1315...316 317---318name: test_remat_s_load_dword_sgpr_imm319tracksRegLiveness: true320body: |321 bb.0:322 liveins: $sgpr8_sgpr9, $sgpr10323 ; GCN-LABEL: name: test_remat_s_load_dword_sgpr_imm324 ; GCN: liveins: $sgpr10, $sgpr8_sgpr9325 ; GCN-NEXT: {{ $}}326 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9327 ; GCN-NEXT: renamable $sgpr0 = COPY $sgpr10328 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR_IMM renamable $sgpr2_sgpr3, renamable $sgpr0, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)329 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1330 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR_IMM renamable $sgpr2_sgpr3, renamable $sgpr0, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)331 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1332 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR_IMM renamable $sgpr2_sgpr3, renamable $sgpr0, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)333 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1334 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3, implicit killed renamable $sgpr0335 %0:sreg_64_xexec = COPY $sgpr8_sgpr9336 %1:sgpr_32 = COPY $sgpr10337 %2:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM %0, %1, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)338 %3:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM %0, %1, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)339 %4:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM %0, %1, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)340 S_NOP 0, implicit %2341 S_NOP 0, implicit %3342 S_NOP 0, implicit %4343 S_ENDPGM 0, implicit %0, implicit %1344...345 346---347name: test_remat_s_load_dword_imm_ci348tracksRegLiveness: true349body: |350 bb.0:351 liveins: $sgpr8_sgpr9352 ; GCN-LABEL: name: test_remat_s_load_dword_imm_ci353 ; GCN: liveins: $sgpr8_sgpr9354 ; GCN-NEXT: {{ $}}355 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9356 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM_ci renamable $sgpr2_sgpr3, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)357 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)358 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM_ci renamable $sgpr2_sgpr3, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)359 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM_ci renamable $sgpr2_sgpr3, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)360 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)361 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)362 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0363 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1364 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)365 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0366 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3367 %0:sreg_64_xexec = COPY $sgpr8_sgpr9368 %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci %0, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)369 %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci %0, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)370 %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci %0, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)371 S_NOP 0, implicit %1372 S_NOP 0, implicit %2373 S_NOP 0, implicit %3374 S_ENDPGM 0, implicit %0375...376 377---378name: test_remat_s_buffer_load_dword_imm379tracksRegLiveness: true380body: |381 bb.0:382 liveins: $sgpr8_sgpr9_sgpr10_sgpr11383 ; GCN-LABEL: name: test_remat_s_buffer_load_dword_imm384 ; GCN: liveins: $sgpr8_sgpr9_sgpr10_sgpr11385 ; GCN-NEXT: {{ $}}386 ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = COPY $sgpr8_sgpr9_sgpr10_sgpr11387 ; GCN-NEXT: renamable $sgpr1 = S_BUFFER_LOAD_DWORD_IMM renamable $sgpr4_sgpr5_sgpr6_sgpr7, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)388 ; GCN-NEXT: renamable $sgpr0 = S_BUFFER_LOAD_DWORD_IMM renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)389 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0390 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1391 ; GCN-NEXT: renamable $sgpr0 = S_BUFFER_LOAD_DWORD_IMM renamable $sgpr4_sgpr5_sgpr6_sgpr7, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)392 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0393 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7394 %0:sgpr_128 = COPY $sgpr8_sgpr9_sgpr10_sgpr11395 %1:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)396 %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)397 %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)398 S_NOP 0, implicit %1399 S_NOP 0, implicit %2400 S_NOP 0, implicit %3401 S_ENDPGM 0, implicit %0402...403 404---405name: test_remat_s_scratch_load_dword_imm406tracksRegLiveness: true407body: |408 bb.0:409 liveins: $sgpr8_sgpr9410 ; GCN-LABEL: name: test_remat_s_scratch_load_dword_imm411 ; GCN: liveins: $sgpr8_sgpr9412 ; GCN-NEXT: {{ $}}413 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9414 ; GCN-NEXT: renamable $sgpr1 = S_SCRATCH_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0, implicit $flat_scr :: (dereferenceable invariant load (s32), addrspace 4)415 ; GCN-NEXT: renamable $sgpr0 = S_SCRATCH_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0, implicit $flat_scr :: (dereferenceable invariant load (s32), addrspace 4)416 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0417 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1418 ; GCN-NEXT: renamable $sgpr0 = S_SCRATCH_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0, implicit $flat_scr :: (dereferenceable invariant load (s32), addrspace 4)419 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0420 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3421 %0:sreg_64_xexec = COPY $sgpr8_sgpr9422 %1:sreg_32_xm0_xexec = S_SCRATCH_LOAD_DWORD_IMM %0, 0, 0, implicit $flat_scr :: (invariant dereferenceable load (s32), addrspace 4)423 %2:sreg_32_xm0_xexec = S_SCRATCH_LOAD_DWORD_IMM %0, 4, 0, implicit $flat_scr :: (invariant dereferenceable load (s32), addrspace 4)424 %3:sreg_32_xm0_xexec = S_SCRATCH_LOAD_DWORD_IMM %0, 8, 0, implicit $flat_scr :: (invariant dereferenceable load (s32), addrspace 4)425 S_NOP 0, implicit %1426 S_NOP 0, implicit %2427 S_NOP 0, implicit %3428 S_ENDPGM 0, implicit %0429...430 431---432name: test_remat_s_load_dword_invariant_not_dereferenceable433tracksRegLiveness: true434body: |435 bb.0:436 liveins: $sgpr8_sgpr9437 ; GCN-LABEL: name: test_remat_s_load_dword_invariant_not_dereferenceable438 ; GCN: liveins: $sgpr8_sgpr9439 ; GCN-NEXT: {{ $}}440 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9441 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0 :: (invariant load (s32), addrspace 4)442 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0 :: (invariant load (s32), addrspace 4)443 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0444 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1445 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0 :: (invariant load (s32), addrspace 4)446 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0447 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3448 %0:sreg_64_xexec = COPY $sgpr8_sgpr9449 %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 0, 0 :: (invariant load (s32), addrspace 4)450 %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 4, 0 :: (invariant load (s32), addrspace 4)451 %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 8, 0 :: (invariant load (s32), addrspace 4)452 S_NOP 0, implicit %1453 S_NOP 0, implicit %2454 S_NOP 0, implicit %3455 S_ENDPGM 0, implicit %0456...457 458 459#---------------------------------------------------------------------460# Negative tests461#---------------------------------------------------------------------462 463---464name: test_no_remat_s_load_dword_not_invariant465tracksRegLiveness: true466body: |467 bb.0:468 liveins: $sgpr8_sgpr9469 ; GCN-LABEL: name: test_no_remat_s_load_dword_not_invariant470 ; GCN: liveins: $sgpr8_sgpr9471 ; GCN-NEXT: {{ $}}472 ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9473 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0 :: (dereferenceable load (s32), addrspace 4)474 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)475 ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0 :: (dereferenceable load (s32), addrspace 4)476 ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0 :: (dereferenceable load (s32), addrspace 4)477 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)478 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)479 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0480 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1481 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)482 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0483 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3484 %0:sreg_64_xexec = COPY $sgpr8_sgpr9485 %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 0, 0 :: (dereferenceable load (s32), addrspace 4)486 %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 4, 0 :: (dereferenceable load (s32), addrspace 4)487 %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 8, 0 :: (dereferenceable load (s32), addrspace 4)488 S_NOP 0, implicit %1489 S_NOP 0, implicit %2490 S_NOP 0, implicit %3491 S_ENDPGM 0, implicit %0492...493 494---495name: test_no_remat_s_memtime496tracksRegLiveness: true497body: |498 bb.0:499 liveins: $sgpr8_sgpr9500 ; GCN-LABEL: name: test_no_remat_s_memtime501 ; GCN: liveins: $sgpr8_sgpr9502 ; GCN-NEXT: {{ $}}503 ; GCN-NEXT: SI_SPILL_S64_SAVE $sgpr8_sgpr9, %stack.0, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.0, align 4, addrspace 5)504 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_MEMTIME505 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMTIME506 ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.2, align 4, addrspace 5)507 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMTIME508 ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.1, align 4, addrspace 5)509 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3510 ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.2, align 4, addrspace 5)511 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1512 ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.1, align 4, addrspace 5)513 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1514 ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.0, align 4, addrspace 5)515 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1516 %0:sreg_64_xexec = COPY $sgpr8_sgpr9517 %1:sreg_64_xexec = S_MEMTIME518 %2:sreg_64_xexec = S_MEMTIME519 %3:sreg_64_xexec = S_MEMTIME520 S_NOP 0, implicit %1521 S_NOP 0, implicit %2522 S_NOP 0, implicit %3523 S_ENDPGM 0, implicit %0524...525 526---527name: test_no_remat_s_memrealtime528tracksRegLiveness: true529body: |530 bb.0:531 liveins: $sgpr8_sgpr9532 ; GCN-LABEL: name: test_no_remat_s_memrealtime533 ; GCN: liveins: $sgpr8_sgpr9534 ; GCN-NEXT: {{ $}}535 ; GCN-NEXT: SI_SPILL_S64_SAVE $sgpr8_sgpr9, %stack.0, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.0, align 4, addrspace 5)536 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_MEMREALTIME537 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMREALTIME538 ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.2, align 4, addrspace 5)539 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMREALTIME540 ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.1, align 4, addrspace 5)541 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3542 ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.2, align 4, addrspace 5)543 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1544 ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.1, align 4, addrspace 5)545 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1546 ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.0, align 4, addrspace 5)547 ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1548 %0:sreg_64_xexec = COPY $sgpr8_sgpr9549 %1:sreg_64_xexec = S_MEMREALTIME550 %2:sreg_64_xexec = S_MEMREALTIME551 %3:sreg_64_xexec = S_MEMREALTIME552 S_NOP 0, implicit %1553 S_NOP 0, implicit %2554 S_NOP 0, implicit %3555 S_ENDPGM 0, implicit %0556...557 558---559name: test_no_remat_s_load_dword_immx2_tied560tracksRegLiveness: true561body: |562 bb.0:563 liveins: $sgpr8_sgpr9564 ; GCN-LABEL: name: test_no_remat_s_load_dword_immx2_tied565 ; GCN: liveins: $sgpr8_sgpr9566 ; GCN-NEXT: {{ $}}567 ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9568 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s64), addrspace 4)569 ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr2_sgpr3, %stack.1, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.1, align 4, addrspace 5)570 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s64), addrspace 4)571 ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr2_sgpr3, %stack.0, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.0, align 4, addrspace 5)572 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s64), addrspace 4)573 ; GCN-NEXT: renamable $sgpr2_sgpr3 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.1, align 4, addrspace 5)574 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3575 ; GCN-NEXT: renamable $sgpr2_sgpr3 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.0, align 4, addrspace 5)576 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3577 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1578 undef %0.sub0_sub1:sgpr_256 = COPY $sgpr8_sgpr9579 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0.sub0_sub1:sgpr_256, 0, 0 :: (invariant dereferenceable load (s64), addrspace 4)580 %2:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0.sub0_sub1:sgpr_256, 4, 0 :: (invariant dereferenceable load (s64), addrspace 4)581 %0.sub0_sub1:sgpr_256 = S_LOAD_DWORDX2_IMM %0.sub0_sub1:sgpr_256, 8, 0 :: (invariant dereferenceable load (s64), addrspace 4)582 S_NOP 0, implicit %1583 S_NOP 0, implicit %2584 S_NOP 0, implicit %0.sub0_sub1:sgpr_256585...586