brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.0 KiB · 95eac12 Raw
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