summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMFrameInfo.h
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2010-12-07 23:08:38 +0000
committerEvan Cheng <evan.cheng@apple.com>2010-12-07 23:08:38 +0000
commit775ead329379bd334ab011d52783d2facb8122a6 (patch)
treedb7ca307a4589d87ed6513844a86bc8eeb1a71b4 /llvm/lib/Target/ARM/ARMFrameInfo.h
parentfb116aed60d637876e9f87f9d5e9653301d091c4 (diff)
downloadbcm5719-llvm-775ead329379bd334ab011d52783d2facb8122a6.tar.gz
bcm5719-llvm-775ead329379bd334ab011d52783d2facb8122a6.zip
Fix a bad prologue / epilogue codegen bug where the compiler would emit illegal
vpush instructions to save / restore VFP / NEON registers like this: vpush {d8,d10,d11} vpop {d8,d10,d11} vpush and vpop do not allow gaps in the register list. rdar://8728956 llvm-svn: 121197
Diffstat (limited to 'llvm/lib/Target/ARM/ARMFrameInfo.h')
-rw-r--r--llvm/lib/Target/ARM/ARMFrameInfo.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/llvm/lib/Target/ARM/ARMFrameInfo.h b/llvm/lib/Target/ARM/ARMFrameInfo.h
index 886f7492ab5..2ff77b4b49f 100644
--- a/llvm/lib/Target/ARM/ARMFrameInfo.h
+++ b/llvm/lib/Target/ARM/ARMFrameInfo.h
@@ -58,12 +58,13 @@ public:
RegScavenger *RS) const;
private:
- void emitPopInst(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
- const std::vector<CalleeSavedInfo> &CSI, unsigned Opc,
- bool isVarArg, bool(*Func)(unsigned, bool)) const;
void emitPushInst(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
const std::vector<CalleeSavedInfo> &CSI, unsigned Opc,
- bool(*Func)(unsigned, bool)) const;
+ bool NoGap, bool(*Func)(unsigned, bool)) const;
+ void emitPopInst(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
+ const std::vector<CalleeSavedInfo> &CSI, unsigned Opc,
+ bool isVarArg, bool NoGap,
+ bool(*Func)(unsigned, bool)) const;
};
} // End llvm namespace
OpenPOWER on IntegriCloud