summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86FrameLowering.cpp
diff options
context:
space:
mode:
authorMichael Kuperstein <michael.m.kuperstein@intel.com>2015-09-16 11:27:20 +0000
committerMichael Kuperstein <michael.m.kuperstein@intel.com>2015-09-16 11:27:20 +0000
commitd926465342497afef60cc7f191bf23d0bbd7a448 (patch)
tree373ac3b6b48d791fc1a368387005e03b9282d40d /llvm/lib/Target/X86/X86FrameLowering.cpp
parent098cd9fba73c25a23157049b19b16c84d39a0c6a (diff)
downloadbcm5719-llvm-d926465342497afef60cc7f191bf23d0bbd7a448.tar.gz
bcm5719-llvm-d926465342497afef60cc7f191bf23d0bbd7a448.zip
[X86] Do not generate 64-bit pops of 32-bit GPRs.
When trying emit a stack adjustments using pops, frame lowering selects an arbitrary free GPR. It should always select one from an appropriate class... This fixes PR24649. Patch by: amjad.aboud@intel.com Differential Revision: http://reviews.llvm.org/D12609 llvm-svn: 247785
Diffstat (limited to 'llvm/lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r--llvm/lib/Target/X86/X86FrameLowering.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index edc41145a7d..c9715f1ae84 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -1935,6 +1935,9 @@ void X86FrameLowering::adjustForHiPEPrologue(
bool X86FrameLowering::adjustStackWithPops(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MBBI, DebugLoc DL, int Offset) const {
+ if (Offset <= 0)
+ return false;
+
if (Offset % SlotSize)
return false;
@@ -1955,9 +1958,11 @@ bool X86FrameLowering::adjustStackWithPops(MachineBasicBlock &MBB,
unsigned FoundRegs = 0;
auto RegMask = Prev->getOperand(1);
-
- // Try to find up to NumPops free registers.
- for (auto Candidate : X86::GR32_NOREX_NOSPRegClass) {
+
+ auto &RegClass =
+ Is64Bit ? X86::GR64_NOREX_NOSPRegClass : X86::GR32_NOREX_NOSPRegClass;
+ // Try to find up to NumPops free registers.
+ for (auto Candidate : RegClass) {
// Poor man's liveness:
// Since we're immediately after a call, any register that is clobbered
OpenPOWER on IntegriCloud