diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-05-08 23:09:25 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-05-08 23:09:25 +0000 |
commit | 8f43afd3bb3aecff03e332ba71ed629c2ff5b247 (patch) | |
tree | 231a4ec1073ca64039ded8df0b8d9e3300b54007 /llvm/lib/Target/PowerPC/PPCInstrInfo.cpp | |
parent | d1b46367177b8225f1a9eeb54971969e657c8646 (diff) | |
download | bcm5719-llvm-8f43afd3bb3aecff03e332ba71ed629c2ff5b247.tar.gz bcm5719-llvm-8f43afd3bb3aecff03e332ba71ed629c2ff5b247.zip |
PPC::B and PPC::BCC's target operand may be an immediate.
llvm-svn: 71282
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCInstrInfo.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrInfo.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp index 45f363104e3..81ff6c05079 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp @@ -220,9 +220,13 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, // If there is only one terminator instruction, process it. if (I == MBB.begin() || !isUnpredicatedTerminator(--I)) { if (LastInst->getOpcode() == PPC::B) { + if (!LastInst->getOperand(0).isMBB()) + return true; TBB = LastInst->getOperand(0).getMBB(); return false; } else if (LastInst->getOpcode() == PPC::BCC) { + if (!LastInst->getOperand(2).isMBB()) + return true; // Block ends with fall-through condbranch. TBB = LastInst->getOperand(2).getMBB(); Cond.push_back(LastInst->getOperand(0)); @@ -244,6 +248,9 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, // If the block ends with PPC::B and PPC:BCC, handle it. if (SecondLastInst->getOpcode() == PPC::BCC && LastInst->getOpcode() == PPC::B) { + if (!SecondLastInst->getOperand(2).isMBB() || + !LastInst->getOperand(0).isMBB()) + return true; TBB = SecondLastInst->getOperand(2).getMBB(); Cond.push_back(SecondLastInst->getOperand(0)); Cond.push_back(SecondLastInst->getOperand(1)); @@ -255,6 +262,8 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, // executed, so remove it. if (SecondLastInst->getOpcode() == PPC::B && LastInst->getOpcode() == PPC::B) { + if (!SecondLastInst->getOperand(0).isMBB()) + return true; TBB = SecondLastInst->getOperand(0).getMBB(); I = LastInst; if (AllowModify) |