summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86FrameLowering.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-04-14 15:18:53 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-04-14 15:18:53 +0000
commitaa2a7cd828918a4294b7186691594c2be55641d6 (patch)
tree25b4a3eda8bbdf70fd93381410f0bc5db6c07a43 /llvm/lib/Target/X86/X86FrameLowering.cpp
parentb88784c185802276c12f17008d720498eeaf1c18 (diff)
downloadbcm5719-llvm-aa2a7cd828918a4294b7186691594c2be55641d6.tar.gz
bcm5719-llvm-aa2a7cd828918a4294b7186691594c2be55641d6.zip
Change ELF systems to use CFI for producing the EH tables. This reduces the
size of the clang binary in Debug builds from 690MB to 679MB. llvm-svn: 129518
Diffstat (limited to 'llvm/lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r--llvm/lib/Target/X86/X86FrameLowering.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index 071fbe0ceff..52ea6a847c3 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -22,6 +22,7 @@
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
+#include "llvm/MC/MCAsmInfo.h"
#include "llvm/Target/TargetData.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/Support/CommandLine.h"
@@ -476,6 +477,15 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const {
.addReg(StackPtr);
if (needsFrameMoves) {
+ const MCAsmInfo &MAI = MMI.getContext().getAsmInfo();
+ if (MAI.getExceptionHandlingType() == ExceptionHandling::DwarfCFI) {
+ MCSymbol *FrameLabel0 = MMI.getContext().CreateTempSymbol();
+ BuildMI(MBB, MBBI, DL, TII.get(X86::PROLOG_LABEL)).addSym(FrameLabel0);
+ MachineLocation FPSrc0(FramePtr);
+ MachineLocation FPDst0(FramePtr, -2 * stackGrowth);
+ Moves.push_back(MachineMove(FrameLabel0, FPDst0, FPSrc0));
+ }
+
// Mark effective beginning of when frame pointer becomes valid.
MCSymbol *FrameLabel = MMI.getContext().CreateTempSymbol();
BuildMI(MBB, MBBI, DL, TII.get(X86::PROLOG_LABEL)).addSym(FrameLabel);
@@ -615,7 +625,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const {
emitSPUpdate(MBB, MBBI, StackPtr, -(int64_t)NumBytes, Is64Bit,
TII, *RegInfo);
- if ((NumBytes || PushedRegs) && needsFrameMoves) {
+ if (( (!HasFP && NumBytes) || PushedRegs) && needsFrameMoves) {
// Mark end of stack pointer adjustment.
MCSymbol *Label = MMI.getContext().CreateTempSymbol();
BuildMI(MBB, MBBI, DL, TII.get(X86::PROLOG_LABEL)).addSym(Label);
OpenPOWER on IntegriCloud