diff options
Diffstat (limited to 'contrib/llvm/lib/Target/PowerPC/PPCBranchSelector.cpp')
| -rw-r--r-- | contrib/llvm/lib/Target/PowerPC/PPCBranchSelector.cpp | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/contrib/llvm/lib/Target/PowerPC/PPCBranchSelector.cpp b/contrib/llvm/lib/Target/PowerPC/PPCBranchSelector.cpp index 3e608ca8f679..ee906712ee02 100644 --- a/contrib/llvm/lib/Target/PowerPC/PPCBranchSelector.cpp +++ b/contrib/llvm/lib/Target/PowerPC/PPCBranchSelector.cpp @@ -15,7 +15,6 @@  //  //===----------------------------------------------------------------------===// -#define DEBUG_TYPE "ppc-branch-select"  #include "PPC.h"  #include "MCTargetDesc/PPCPredicates.h"  #include "PPCInstrBuilder.h" @@ -26,6 +25,8 @@  #include "llvm/Target/TargetMachine.h"  using namespace llvm; +#define DEBUG_TYPE "ppc-branch-select" +  STATISTIC(NumExpanded, "Number of branches expanded to long format");  namespace llvm { @@ -42,9 +43,9 @@ namespace {      /// BlockSizes - The sizes of the basic blocks in the function.      std::vector<unsigned> BlockSizes; -    virtual bool runOnMachineFunction(MachineFunction &Fn); +    bool runOnMachineFunction(MachineFunction &Fn) override; -    virtual const char *getPassName() const { +    const char *getPassName() const override {        return "PowerPC Branch Selector";      }    }; @@ -112,9 +113,12 @@ bool PPCBSel::runOnMachineFunction(MachineFunction &Fn) {        unsigned MBBStartOffset = 0;        for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end();             I != E; ++I) { -        MachineBasicBlock *Dest = 0; +        MachineBasicBlock *Dest = nullptr;          if (I->getOpcode() == PPC::BCC && !I->getOperand(2).isImm())            Dest = I->getOperand(2).getMBB(); +        else if ((I->getOpcode() == PPC::BC || I->getOpcode() == PPC::BCn) && +                 !I->getOperand(1).isImm()) +          Dest = I->getOperand(1).getMBB();          else if ((I->getOpcode() == PPC::BDNZ8 || I->getOpcode() == PPC::BDNZ ||                    I->getOpcode() == PPC::BDZ8  || I->getOpcode() == PPC::BDZ) &&                   !I->getOperand(0).isImm()) @@ -166,6 +170,12 @@ bool PPCBSel::runOnMachineFunction(MachineFunction &Fn) {            // Jump over the uncond branch inst (i.e. $PC+8) on opposite condition.            BuildMI(MBB, I, dl, TII->get(PPC::BCC))              .addImm(PPC::InvertPredicate(Pred)).addReg(CRReg).addImm(2); +        } else if (I->getOpcode() == PPC::BC) { +          unsigned CRBit = I->getOperand(0).getReg(); +          BuildMI(MBB, I, dl, TII->get(PPC::BCn)).addReg(CRBit).addImm(2); +        } else if (I->getOpcode() == PPC::BCn) { +          unsigned CRBit = I->getOperand(0).getReg(); +          BuildMI(MBB, I, dl, TII->get(PPC::BC)).addReg(CRBit).addImm(2);          } else if (I->getOpcode() == PPC::BDNZ) {            BuildMI(MBB, I, dl, TII->get(PPC::BDZ)).addImm(2);          } else if (I->getOpcode() == PPC::BDNZ8) {  | 
