diff --git a/llvm/lib/CodeGen/StackMapLivenessAnalysis.cpp b/llvm/lib/CodeGen/StackMapLivenessAnalysis.cpp index 778ac1f5701ca..687acd90b405c 100644 --- a/llvm/lib/CodeGen/StackMapLivenessAnalysis.cpp +++ b/llvm/lib/CodeGen/StackMapLivenessAnalysis.cpp @@ -126,8 +126,7 @@ bool StackMapLiveness::calculateLiveness(MachineFunction &MF) { for (auto &MBB : MF) { LLVM_DEBUG(dbgs() << "****** BB " << MBB.getName() << " ******\n"); LiveRegs.init(*TRI); - // FIXME: This should probably be addLiveOuts(). - LiveRegs.addLiveOutsNoPristines(MBB); + LiveRegs.addLiveOuts(MBB); bool HasStackMap = false; // Reverse iterate over all instructions and add the current live register // set to an instruction if we encounter a patchpoint instruction. diff --git a/llvm/test/CodeGen/AArch64/stackmap-liveness.ll b/llvm/test/CodeGen/AArch64/stackmap-liveness.ll index e1f9ffe42a77c..c19c2623e322c 100644 --- a/llvm/test/CodeGen/AArch64/stackmap-liveness.ll +++ b/llvm/test/CodeGen/AArch64/stackmap-liveness.ll @@ -27,16 +27,88 @@ define i64 @stackmap_liveness(i1 %c) { ; Padding ; CHECK-NEXT: .p2align 3 ; CHECK-NEXT: .short 0 -; Num LiveOut Entries: 1 -; CHECK-NEXT: .short 2 -; LiveOut Entry 0: X0 +; Num LiveOut Entries: 20 +; CHECK-NEXT: .short 20 +; LiveOut Entry 1: X0 ; CHECK-NEXT: .short 0 ; CHECK-NEXT: .byte 0 ; CHECK-NEXT: .byte 8 -; LiveOut Entry 1: SP +; LiveOut Entry 2: +; CHECK-NEXT: .short 19 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 3: +; CHECK-NEXT: .short 20 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 4: +; CHECK-NEXT: .short 21 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 5: +; CHECK-NEXT: .short 22 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 6: +; CHECK-NEXT: .short 23 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 7: +; CHECK-NEXT: .short 24 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 8: +; CHECK-NEXT: .short 25 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 9: +; CHECK-NEXT: .short 26 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 10: +; CHECK-NEXT: .short 27 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 11: +; CHECK-NEXT: .short 28 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 12: SP ; CHECK-NEXT: .short 31 ; CHECK-NEXT: .byte 0 ; CHECK-NEXT: .byte 8 +; LiveOut Entry 13: +; CHECK-NEXT: .short 72 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 14: +; CHECK-NEXT: .short 73 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 15: +; CHECK-NEXT: .short 74 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 16: +; CHECK-NEXT: .short 75 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 17: +; CHECK-NEXT: .short 76 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 18: +; CHECK-NEXT: .short 77 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 19: +; CHECK-NEXT: .short 78 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 +; LiveOut Entry 20: +; CHECK-NEXT: .short 79 +; CHECK-NEXT: .byte 0 +; CHECK-NEXT: .byte 8 ; Align ; CHECK-NEXT: .p2align 3 %1 = select i1 %c, i64 1, i64 2 diff --git a/llvm/test/CodeGen/X86/stackmap-liveness.ll b/llvm/test/CodeGen/X86/stackmap-liveness.ll index 798eab9249dfa..10a8f950baebe 100644 --- a/llvm/test/CodeGen/X86/stackmap-liveness.ll +++ b/llvm/test/CodeGen/X86/stackmap-liveness.ll @@ -46,9 +46,29 @@ entry: ; Padding ; PATCH-NEXT: .p2align 3 ; PATCH-NEXT: .short 0 -; Num LiveOut Entries: 1 -; PATCH-NEXT: .short 1 -; LiveOut Entry 1: %ymm2 (16 bytes) --> %xmm2 +; Num LiveOut Entries: 6 +; PATCH-NEXT: .short 6 +; LiveOut Entry 1: +; PATCH-NEXT: .short 3 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 2: +; PATCH-NEXT: .short 12 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 3: +; PATCH-NEXT: .short 13 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 4: +; PATCH-NEXT: .short 14 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 5: +; PATCH-NEXT: .short 15 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 6: %ymm2 (16 bytes) --> %xmm2 ; PATCH-NEXT: .short 19 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 16 @@ -79,25 +99,46 @@ entry: ; Padding ; PATCH-NEXT: .p2align 3 ; PATCH-NEXT: .short 0 -; Num LiveOut Entries: 5 -; PATCH-NEXT: .short 5 +; Num LiveOut Entries: 10 +; PATCH-NEXT: .short 10 + ; LiveOut Entry 1: %rax (1 bytes) --> %al or %ah ; PATCH-NEXT: .short 0 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 1 -; LiveOut Entry 2: %r8 (8 bytes) +; LiveOut Entry 2: +; PATCH-NEXT: .short 3 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 3: %r8 (8 bytes) ; PATCH-NEXT: .short 8 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 8 -; LiveOut Entry 3: %ymm0 (32 bytes) +; LiveOut Entry 4: +; PATCH-NEXT: .short 12 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 5: +; PATCH-NEXT: .short 13 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 6: +; PATCH-NEXT: .short 14 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 7: +; PATCH-NEXT: .short 15 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 8: %ymm0 (32 bytes) ; PATCH-NEXT: .short 17 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 32 -; LiveOut Entry 4: %ymm1 (32 bytes) +; LiveOut Entry 9: %ymm1 (32 bytes) ; PATCH-NEXT: .short 18 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 32 -; LiveOut Entry 5: %ymm2 (16 bytes) --> %xmm2 +; LiveOut Entry 10: %ymm2 (16 bytes) --> %xmm2 ; PATCH-NEXT: .short 19 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 16 @@ -125,13 +166,33 @@ entry: ; Padding ; PATCH-NEXT: .p2align 3 ; PATCH-NEXT: .short 0 -; Num LiveOut Entries: 2 -; PATCH-NEXT: .short 2 -; LiveOut Entry 1: %rsp (8 bytes) +; Num LiveOut Entries: 7 +; PATCH-NEXT: .short 7 +; LiveOut Entry 1: +; PATCH-NEXT: .short 3 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 2: %rsp (8 bytes) ; PATCH-NEXT: .short 7 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 8 -; LiveOut Entry 2: %ymm2 (16 bytes) --> %xmm2 +; LiveOut Entry 3: +; PATCH-NEXT: .short 12 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 4: +; PATCH-NEXT: .short 13 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 5: +; PATCH-NEXT: .short 14 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 6: +; PATCH-NEXT: .short 15 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 7: %ymm2 (16 bytes) --> %xmm2 ; PATCH-NEXT: .short 19 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 16 @@ -164,13 +225,33 @@ entry: ; Padding ; PATCH-NEXT: .p2align 3 ; PATCH-NEXT: .short 0 -; Num LiveOut Entries: 2 -; PATCH-NEXT: .short 2 -; LiveOut Entry 1: %rsp (8 bytes) +; Num LiveOut Entries: 7 +; PATCH-NEXT: .short 7 +; LiveOut Entry 1: +; PATCH-NEXT: .short 3 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 2: %rsp (8 bytes) ; PATCH-NEXT: .short 7 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 8 -; LiveOut Entry 2: %ymm2 (16 bytes) --> %xmm2 +; LiveOut Entry 3: +; PATCH-NEXT: .short 12 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 4: +; PATCH-NEXT: .short 13 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 5: +; PATCH-NEXT: .short 14 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 6: +; PATCH-NEXT: .short 15 +; PATCH-NEXT: .byte 0 +; PATCH-NEXT: .byte 8 +; LiveOut Entry 7: %ymm2 (16 bytes) --> %xmm2 ; PATCH-NEXT: .short 19 ; PATCH-NEXT: .byte 0 ; PATCH-NEXT: .byte 16