1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=x86_64-grtev4-linux-gnu -run-pass=regallocfast -o - %s | FileCheck %s 3 4# Bug 41973. Make sure %12 is detected as live out of %bb.0, even 5# though the use is allocated before the def block %bb.3. Previously 6# mayLiveOut only recorded on defs, and would not find the virtual 7# register use if it had already been replaced with a physical 8# register. 9 10--- 11name: main 12tracksRegLiveness: true 13body: | 14 ; CHECK-LABEL: name: main 15 ; CHECK: bb.0: 16 ; CHECK: successors: %bb.3(0x80000000) 17 ; CHECK: liveins: $edi, $rsi 18 ; CHECK: MOV64mr %stack.0, 1, $noreg, 0, $noreg, killed $rsi :: (store 8 into %stack.0) 19 ; CHECK: JMP_1 %bb.3 20 ; CHECK: bb.1: 21 ; CHECK: successors: 22 ; CHECK: bb.2: 23 ; CHECK: successors: %bb.3(0x80000000) 24 ; CHECK: $rcx = MOV64rm %stack.1, 1, $noreg, 0, $noreg :: (load 8 from %stack.1) 25 ; CHECK: renamable $eax = MOV32r0 implicit-def dead $eflags 26 ; CHECK: renamable $rax = SUBREG_TO_REG 0, killed renamable $eax, %subreg.sub_32bit 27 ; CHECK: MOV64mi32 killed renamable $rcx, 1, $noreg, 0, $noreg, 0 :: (volatile store 8) 28 ; CHECK: MOV64mr %stack.0, 1, $noreg, 0, $noreg, killed $rax :: (store 8 into %stack.0) 29 ; CHECK: bb.3: 30 ; CHECK: successors: %bb.2(0x40000000), %bb.1(0x40000000) 31 ; CHECK: $rax = MOV64rm %stack.0, 1, $noreg, 0, $noreg :: (load 8 from %stack.0) 32 ; CHECK: renamable $ecx = MOV32r0 implicit-def dead $eflags 33 ; CHECK: renamable $rcx = SUBREG_TO_REG 0, killed renamable $ecx, %subreg.sub_32bit 34 ; CHECK: MOV64mr %stack.1, 1, $noreg, 0, $noreg, killed $rcx :: (store 8 into %stack.1) 35 ; CHECK: JMP64r killed renamable $rax 36 bb.0: 37 liveins: $edi, $rsi 38 39 %4:gr64 = COPY $rsi 40 %2:gr32 = COPY $edi 41 %3:gr32 = COPY killed %2 42 %5:gr64 = COPY killed %4 43 %13:gr64 = COPY %5 44 JMP_1 %bb.3 45 46 bb.1: 47 successors: 48 49 bb.2: 50 %0:gr64 = COPY %12 51 %10:gr32 = MOV32r0 implicit-def $eflags 52 %11:gr64 = SUBREG_TO_REG 0, %10, %subreg.sub_32bit 53 MOV64mi32 %0, 1, $noreg, 0, $noreg, 0 :: (volatile store 8) 54 %13:gr64 = COPY %11 55 56 bb.3: 57 successors: %bb.2, %bb.1 58 59 %1:gr64 = COPY %13 60 %9:gr32 = MOV32r0 implicit-def dead $eflags 61 %8:gr64 = SUBREG_TO_REG 0, killed %9, %subreg.sub_32bit 62 %12:gr64 = COPY %8 63 JMP64r %1 64 65... 66