diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-02-23 21:50:27 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-02-23 21:50:27 +0000 |
commit | 31d868b6189a48e9ee398b15d91ccc1ec53f2b83 (patch) | |
tree | 0a2fec8e8a442f4c347d6e75d0f04853dbddfd96 /llvm/lib/Target/X86/X86FrameLowering.cpp | |
parent | b85e023b8b2358145f39c3a7bc9a5c0e644e8d6d (diff) | |
download | bcm5719-llvm-31d868b6189a48e9ee398b15d91ccc1ec53f2b83.tar.gz bcm5719-llvm-31d868b6189a48e9ee398b15d91ccc1ec53f2b83.zip |
X86: Use 'mov' instead of 'lea' in Win64 SEH prologues when possible
'mov' and 'lea' are equivalent when the displacement applied with 'lea'
is zero. However, 'mov' should encode smaller.
llvm-svn: 230269
Diffstat (limited to 'llvm/lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86FrameLowering.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp index 5657def8ce9..75fd4fdb434 100644 --- a/llvm/lib/Target/X86/X86FrameLowering.cpp +++ b/llvm/lib/Target/X86/X86FrameLowering.cpp @@ -863,8 +863,11 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { int SEHFrameOffset = 0; if (IsWinEH && HasFP) { SEHFrameOffset = calculateSetFPREG(NumBytes); - addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(X86::LEA64r), FramePtr), - StackPtr, false, SEHFrameOffset); + if (SEHFrameOffset) + addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(X86::LEA64r), FramePtr), + StackPtr, false, SEHFrameOffset); + else + BuildMI(MBB, MBBI, DL, TII.get(X86::MOV64rr), FramePtr).addReg(StackPtr); if (NeedsWinEH) BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_SetFrame)) |