mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-13 14:46:53 +00:00
Instructions with unique labels or embedded jumptables cannot be duplicated during ifcvt.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37606 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
61a2598ebe
commit
d42e56e166
@ -446,6 +446,35 @@ bool ARMInstrInfo::isPredicated(const MachineInstr *MI) const {
|
||||
return PIdx != -1 && MI->getOperand(PIdx).getImmedValue() != ARMCC::AL;
|
||||
}
|
||||
|
||||
bool ARMInstrInfo::CanBeDuplicated(const MachineInstr *MI) const {
|
||||
switch (MI->getOpcode()) {
|
||||
default: return true;
|
||||
// These have unique labels.
|
||||
case ARM::PICADD:
|
||||
case ARM::PICLD:
|
||||
case ARM::PICLDZH:
|
||||
case ARM::PICLDZB:
|
||||
case ARM::PICLDH:
|
||||
case ARM::PICLDB:
|
||||
case ARM::PICLDSH:
|
||||
case ARM::PICLDSB:
|
||||
case ARM::PICSTR:
|
||||
case ARM::PICSTRH:
|
||||
case ARM::PICSTRB:
|
||||
case ARM::LEApcrel:
|
||||
case ARM::LEApcrelJT:
|
||||
case ARM::tPICADD:
|
||||
case ARM::tLEApcrel:
|
||||
case ARM::tLEApcrelJT:
|
||||
case ARM::CONSTPOOL_ENTRY:
|
||||
// These embed jumptables.
|
||||
case ARM::BR_JTr:
|
||||
case ARM::BR_JTm:
|
||||
case ARM::BR_JTadd:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool ARMInstrInfo::PredicateInstruction(MachineInstr *MI,
|
||||
const std::vector<MachineOperand> &Pred) const {
|
||||
unsigned Opc = MI->getOpcode();
|
||||
|
@ -106,6 +106,8 @@ public:
|
||||
// Predication support.
|
||||
virtual bool isPredicated(const MachineInstr *MI) const;
|
||||
|
||||
virtual bool CanBeDuplicated(const MachineInstr *MI) const;
|
||||
|
||||
virtual
|
||||
bool PredicateInstruction(MachineInstr *MI,
|
||||
const std::vector<MachineOperand> &Pred) const;
|
||||
|
Loading…
Reference in New Issue
Block a user