diff options
Diffstat (limited to 'lib/Target/ARM/ARMMul.cpp')
| -rw-r--r-- | lib/Target/ARM/ARMMul.cpp | 75 | 
1 files changed, 0 insertions, 75 deletions
diff --git a/lib/Target/ARM/ARMMul.cpp b/lib/Target/ARM/ARMMul.cpp deleted file mode 100644 index c4eeaac479..0000000000 --- a/lib/Target/ARM/ARMMul.cpp +++ /dev/null @@ -1,75 +0,0 @@ -//===-- ARMMul.cpp - Define TargetMachine for A5CRM -----------------------===// -// -//                     The LLVM Compiler Infrastructure -// -// This file was developed by the "Instituto Nokia de Tecnologia" and -// is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// Modify the ARM multiplication instructions so that Rd{Hi,Lo} and Rm are distinct -// -//===----------------------------------------------------------------------===// - - -#include "ARM.h" -#include "llvm/CodeGen/MachineInstrBuilder.h" -#include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/Target/TargetMachine.h" -#include "llvm/Target/TargetInstrInfo.h" -#include "llvm/Support/Compiler.h" - -using namespace llvm; - -namespace { -  class VISIBILITY_HIDDEN FixMul : public MachineFunctionPass { -    virtual bool runOnMachineFunction(MachineFunction &MF); -  }; -} - -FunctionPass *llvm::createARMFixMulPass() { return new FixMul(); } - -bool FixMul::runOnMachineFunction(MachineFunction &MF) { -  bool Changed = false; - -  for (MachineFunction::iterator BB = MF.begin(), E = MF.end(); -       BB != E; ++BB) { -    MachineBasicBlock &MBB = *BB; - -    for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); -         I != E; ++I) { -      MachineInstr *MI = I; - -      int Op = MI->getOpcode(); -      if (Op == ARM::MUL || -          Op == ARM::SMULL || -          Op == ARM::UMULL) { -        MachineOperand &RdOp = MI->getOperand(0); -        MachineOperand &RmOp = MI->getOperand(1); -        MachineOperand &RsOp = MI->getOperand(2); - -        unsigned Rd = RdOp.getReg(); -        unsigned Rm = RmOp.getReg(); -        unsigned Rs = RsOp.getReg(); - -        if (Rd == Rm) { -          Changed = true; -          if (Rd != Rs) { -	    //Rd and Rm must be distinct, but Rd can be equal to Rs. -	    //Swap Rs and Rm -            RmOp.setReg(Rs); -            RsOp.setReg(Rm); -          } else { -            unsigned scratch = Op == ARM::MUL ? ARM::R12 : ARM::R0; -            BuildMI(MBB, I, MF.getTarget().getInstrInfo()->get(ARM::MOV), -                    scratch).addReg(Rm).addImm(0).addImm(ARMShift::LSL); -            RmOp.setReg(scratch); -          } -        } -      } -    } -  } - -  return Changed; -}  | 
