From cdc6a8eab9d54c3b942ecc6eeabd6d4c8fff2ee7 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Wed, 23 Sep 2015 22:21:09 +0000 Subject: [PATCH] ARM: fix folding stack adjustment (again again again...) This time, the issue is that we weren't accounting for the possibility that aligned DPRs could have been stored after the final "push" in a prologue. When that happened we effectively moved a "sub sp, #N" from below the aligned stores to above them, and everything went to pot. To make it worse, I'd actually committed something testing that we produced wrong code, so the test update is tiny. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248437 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMFrameLowering.cpp | 3 ++- test/CodeGen/ARM/fold-stack-adjust.ll | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Target/ARM/ARMFrameLowering.cpp b/lib/Target/ARM/ARMFrameLowering.cpp index b52ca93c204..5b5b1b022f5 100644 --- a/lib/Target/ARM/ARMFrameLowering.cpp +++ b/lib/Target/ARM/ARMFrameLowering.cpp @@ -488,7 +488,8 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF, if (NumBytes) { // Adjust SP after all the callee-save spills. - if (tryFoldSPUpdateIntoPushPop(STI, MF, LastPush, NumBytes)) + if (AFI->getNumAlignedDPRCS2Regs() == 0 && + tryFoldSPUpdateIntoPushPop(STI, MF, LastPush, NumBytes)) DefCFAOffsetCandidates.addExtraBytes(LastPush, NumBytes); else { emitSPUpdate(isARM, MBB, MBBI, dl, TII, -NumBytes, diff --git a/test/CodeGen/ARM/fold-stack-adjust.ll b/test/CodeGen/ARM/fold-stack-adjust.ll index 614966d4024..5bec6445560 100644 --- a/test/CodeGen/ARM/fold-stack-adjust.ll +++ b/test/CodeGen/ARM/fold-stack-adjust.ll @@ -67,11 +67,12 @@ define void @check_vfp_fold() minsize { ; iOS uses aligned NEON stores here, which is convenient since we ; want to make sure that works too. ; CHECK-IOS-LABEL: check_vfp_fold: -; CHECK-IOS: push {r0, r1, r2, r3, r4, r7, lr} +; CHECK-IOS: push {r4, r7, lr} ; CHECK-IOS: sub.w r4, sp, #16 ; CHECK-IOS: bfc r4, #0, #4 ; CHECK-IOS: mov sp, r4 ; CHECK-IOS: vst1.64 {d8, d9}, [r4:128] +; CHECK-IOS: sub sp, #16 ; ... ; CHECK-IOS: add r4, sp, #16 ; CHECK-IOS: vld1.64 {d8, d9}, [r4:128] -- 2.34.1