summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Colombet <qcolombet@apple.com>2015-12-02 02:07:00 +0000
committerQuentin Colombet <qcolombet@apple.com>2015-12-02 02:07:00 +0000
commitbbdebefff613ed200edfc6e9b2a6fd38ca2d0dc9 (patch)
tree9606764570930bc07ee12b64482cca2c990ad5d2
parenta11bdc8ef7034f3f5350d7942ff02c3c2702283f (diff)
downloadbcm5719-llvm-bbdebefff613ed200edfc6e9b2a6fd38ca2d0dc9.tar.gz
bcm5719-llvm-bbdebefff613ed200edfc6e9b2a6fd38ca2d0dc9.zip
[X86] Fix a think-o when checking if the eflags needs to be preserved.
llvm-svn: 254480
-rw-r--r--llvm/lib/Target/X86/X86FrameLowering.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index cc8bbd09f50..52cf9fd44cb 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -211,6 +211,7 @@ static bool isEAXLiveIn(MachineFunction &MF) {
static bool
flagsNeedToBePreservedBeforeTheTerminators(const MachineBasicBlock &MBB) {
for (const MachineInstr &MI : MBB.terminators()) {
+ bool BreakNext = false;
for (const MachineOperand &MO : MI.operands()) {
if (!MO.isReg())
continue;
@@ -224,8 +225,13 @@ flagsNeedToBePreservedBeforeTheTerminators(const MachineBasicBlock &MBB) {
if (!MO.isDef())
return true;
// This terminator defines the eflags, i.e., we don't need to preserve it.
- return false;
+ // However, we still need to check this specific terminator does not
+ // read a live-in value.
+ BreakNext = true;
}
+ // We found a definition of the eflags, no need to preserve them.
+ if (BreakNext)
+ return false;
}
// None of the terminators use or define the eflags.
OpenPOWER on IntegriCloud