From 30dc53db36bc1f76d69f9c75499623b2a2d6f6f2 Mon Sep 17 00:00:00 2001 From: David Green Date: Mon, 4 Oct 2021 18:28:15 +0100 Subject: [PATCH] [AArch64] Disable AArch64StorePairSuppress under optsize AArch64StorePairSuppress will prevent the creation of LDP's based on scheduling info. This shouldn't apply when optimizing for size though, where the size decrease should be considered more important. Differential Revision: https://reviews.llvm.org/D110809 --- llvm/lib/Target/AArch64/AArch64StorePairSuppress.cpp | 2 +- llvm/test/CodeGen/AArch64/storepairsuppress_minsize.ll | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/llvm/lib/Target/AArch64/AArch64StorePairSuppress.cpp b/llvm/lib/Target/AArch64/AArch64StorePairSuppress.cpp index a94856e..64f13ea 100644 --- a/llvm/lib/Target/AArch64/AArch64StorePairSuppress.cpp +++ b/llvm/lib/Target/AArch64/AArch64StorePairSuppress.cpp @@ -119,7 +119,7 @@ bool AArch64StorePairSuppress::isNarrowFPStore(const MachineInstr &MI) { } bool AArch64StorePairSuppress::runOnMachineFunction(MachineFunction &MF) { - if (skipFunction(MF.getFunction())) + if (skipFunction(MF.getFunction()) || MF.getFunction().hasOptSize()) return false; const TargetSubtargetInfo &ST = MF.getSubtarget(); diff --git a/llvm/test/CodeGen/AArch64/storepairsuppress_minsize.ll b/llvm/test/CodeGen/AArch64/storepairsuppress_minsize.ll index fd6c1ce..526d9a5 100644 --- a/llvm/test/CodeGen/AArch64/storepairsuppress_minsize.ll +++ b/llvm/test/CodeGen/AArch64/storepairsuppress_minsize.ll @@ -38,12 +38,9 @@ define void @test_minsize() minsize { ; CHECK-NEXT: bl return_in_block ; CHECK-NEXT: adrp x8, in_block_store ; CHECK-NEXT: add x8, x8, :lo12:in_block_store -; CHECK-NEXT: str d0, [x8] -; CHECK-NEXT: str d1, [x8, #8] -; CHECK-NEXT: str d2, [x8, #16] -; CHECK-NEXT: str d3, [x8, #24] -; CHECK-NEXT: str d4, [x8, #32] -; CHECK-NEXT: str d5, [x8, #40] +; CHECK-NEXT: stp d0, d1, [x8] +; CHECK-NEXT: stp d2, d3, [x8, #16] +; CHECK-NEXT: stp d4, d5, [x8, #32] ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload ; CHECK-NEXT: ret %1 = call %T_IN_BLOCK @return_in_block() @@ -60,12 +57,9 @@ define void @test_optsize() optsize { ; CHECK-NEXT: bl return_in_block ; CHECK-NEXT: adrp x8, in_block_store ; CHECK-NEXT: add x8, x8, :lo12:in_block_store -; CHECK-NEXT: str d0, [x8] -; CHECK-NEXT: str d1, [x8, #8] -; CHECK-NEXT: str d2, [x8, #16] -; CHECK-NEXT: str d3, [x8, #24] -; CHECK-NEXT: str d4, [x8, #32] -; CHECK-NEXT: str d5, [x8, #40] +; CHECK-NEXT: stp d0, d1, [x8] +; CHECK-NEXT: stp d2, d3, [x8, #16] +; CHECK-NEXT: stp d4, d5, [x8, #32] ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload ; CHECK-NEXT: ret %1 = call %T_IN_BLOCK @return_in_block() -- 2.7.4