[llvm] fd7e59f - [AArch64] Async unwind - do not schedule frame setup/destroy
Momchil Velikov via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 24 09:24:37 PST 2022
Author: Momchil Velikov
Date: 2022-02-24T17:24:04Z
New Revision: fd7e59f0e778716cbd1572e112eefbf0b8e303a1
URL: https://github.com/llvm/llvm-project/commit/fd7e59f0e778716cbd1572e112eefbf0b8e303a1
DIFF: https://github.com/llvm/llvm-project/commit/fd7e59f0e778716cbd1572e112eefbf0b8e303a1.diff
LOG: [AArch64] Async unwind - do not schedule frame setup/destroy
The PostRA scheduler can reorder non-CFI instructions in a way that
makes the unwind info not instruction precise.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D112326
Added:
Modified:
llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
llvm/test/CodeGen/AArch64/GlobalISel/byval-call.ll
llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog-no-helper.ll
llvm/test/CodeGen/AArch64/framelayout-frame-record.mir
llvm/test/CodeGen/AArch64/framelayout-unaligned-fp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
index 84469dd257cab..e17515b974cee 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -1094,7 +1094,10 @@ bool AArch64InstrInfo::isSchedulingBoundary(const MachineInstr &MI,
return true;
default:;
}
- return isSEHInstruction(MI);
+ if (isSEHInstruction(MI))
+ return true;
+ auto Next = std::next(MI.getIterator());
+ return Next != MBB->end() && Next->isCFIInstruction();
}
/// analyzeCompare - For a comparison instruction, return the source registers
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/byval-call.ll b/llvm/test/CodeGen/AArch64/GlobalISel/byval-call.ll
index 651ca31ae555a..30eb6922af525 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/byval-call.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/byval-call.ll
@@ -27,8 +27,8 @@ define void @call_byval_a64i32([64 x i32]* %incoming) {
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #288
; CHECK-NEXT: stp x29, x30, [sp, #256] // 16-byte Folded Spill
-; CHECK-NEXT: add x29, sp, #256
; CHECK-NEXT: str x28, [sp, #272] // 8-byte Folded Spill
+; CHECK-NEXT: add x29, sp, #256
; CHECK-NEXT: .cfi_def_cfa w29, 32
; CHECK-NEXT: .cfi_offset w28, -16
; CHECK-NEXT: .cfi_offset w30, -24
diff --git a/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog-no-helper.ll b/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog-no-helper.ll
index 1debf5609e46d..40f6c948683d5 100644
--- a/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog-no-helper.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog-no-helper.ll
@@ -47,8 +47,8 @@ define float @_Z3foofffi(float %b, float %x, float %y, i32 %z) uwtable ssp minsi
; CHECK-LINUX-NEXT: stp d11, d10, [sp, #-64]!
; CHECK-LINUX-NEXT: stp d9, d8, [sp, #16]
; CHECK-LINUX-NEXT: stp x29, x30, [sp, #32]
-; CHECK-LINUX-NEXT: add x29, sp, #32
; CHECK-LINUX-NEXT: stp x20, x19, [sp, #48]
+; CHECK-LINUX-NEXT: add x29, sp, #32
; CHECK-LINUX-NEXT: .cfi_def_cfa w29, 32
; CHECK-LINUX-NEXT: .cfi_offset w19, -8
; CHECK-LINUX-NEXT: .cfi_offset w20, -16
diff --git a/llvm/test/CodeGen/AArch64/framelayout-frame-record.mir b/llvm/test/CodeGen/AArch64/framelayout-frame-record.mir
index 579a8efe87158..982a884730c75 100644
--- a/llvm/test/CodeGen/AArch64/framelayout-frame-record.mir
+++ b/llvm/test/CodeGen/AArch64/framelayout-frame-record.mir
@@ -16,8 +16,8 @@ body: |
# CHECK: stp d9, d8, [sp, #-48]!
# CHECK: stp x29, x30, [sp, #16]
-# CHECK: add x29, sp, #16
# CHECK: str x19, [sp, #32]
+# CHECK: add x29, sp, #16
# CHECK: .cfi_def_cfa w29, 32
# CHECK: .cfi_offset w19, -16
diff --git a/llvm/test/CodeGen/AArch64/framelayout-unaligned-fp.ll b/llvm/test/CodeGen/AArch64/framelayout-unaligned-fp.ll
index 2c11436d408f4..e87c98eb556de 100644
--- a/llvm/test/CodeGen/AArch64/framelayout-unaligned-fp.ll
+++ b/llvm/test/CodeGen/AArch64/framelayout-unaligned-fp.ll
@@ -28,8 +28,8 @@ entry:
; CHECK-LABEL: b:
; CHECK: str d8, [sp, #-32]!
; CHECK-NEXT: stp x29, x30, [sp, #8]
-; CHECK-NEXT: add x29, sp, #8
; CHECK-NEXT: str x19, [sp, #24]
+; CHECK-NEXT: add x29, sp, #8
; CHECK: sub sp, x29, #8
; CHECK-NEXT: ldp x29, x30, [sp, #8]
More information about the llvm-commits
mailing list