From: Evan Cheng Date: Fri, 15 Jun 2007 21:15:00 +0000 (+0000) Subject: Instructions with unique labels or embedded jumptables cannot be duplicated during... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=d42e56e166761d79201f09eeb4ab782e3097bfcd;p=oota-llvm.git 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 --- diff --git a/lib/Target/ARM/ARMInstrInfo.cpp b/lib/Target/ARM/ARMInstrInfo.cpp index 1370faba4d7..c8f7919eabe 100644 --- a/lib/Target/ARM/ARMInstrInfo.cpp +++ b/lib/Target/ARM/ARMInstrInfo.cpp @@ -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 &Pred) const { unsigned Opc = MI->getOpcode(); diff --git a/lib/Target/ARM/ARMInstrInfo.h b/lib/Target/ARM/ARMInstrInfo.h index 5b406cb8168..5c098f0f1aa 100644 --- a/lib/Target/ARM/ARMInstrInfo.h +++ b/lib/Target/ARM/ARMInstrInfo.h @@ -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 &Pred) const;