#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Support/Debug.h"
-#include <iostream>
using namespace llvm;
namespace {
- Statistic<> NumFpDs("fpmover", "Number of instructions translated");
- Statistic<> NoopFpDs("fpmover", "Number of noop instructions removed");
+ Statistic NumFpDs("fpmover", "Number of instructions translated");
+ Statistic NoopFpDs("fpmover", "Number of noop instructions removed");
struct FPMover : public MachineFunctionPass {
/// Target machine description which we query for reg. names, data
getDoubleRegPair(DestDReg, EvenDestReg, OddDestReg);
getDoubleRegPair(SrcDReg, EvenSrcReg, OddSrcReg);
+ const TargetInstrInfo *TII = TM.getInstrInfo();
if (MI->getOpcode() == SP::FpMOVD)
- MI->setOpcode(SP::FMOVS);
+ MI->setInstrDescriptor(TII->get(SP::FMOVS));
else if (MI->getOpcode() == SP::FpNEGD)
- MI->setOpcode(SP::FNEGS);
+ MI->setInstrDescriptor(TII->get(SP::FNEGS));
else if (MI->getOpcode() == SP::FpABSD)
- MI->setOpcode(SP::FABSS);
+ MI->setInstrDescriptor(TII->get(SP::FABSS));
else
assert(0 && "Unknown opcode!");
MI->getOperand(0).setReg(EvenDestReg);
MI->getOperand(1).setReg(EvenSrcReg);
- DEBUG(std::cerr << "FPMover: the modified instr is: " << *MI);
+ DOUT << "FPMover: the modified instr is: " << *MI;
// Insert copy for the other half of the double.
if (DestDReg != SrcDReg) {
- MI = BuildMI(MBB, I, SP::FMOVS, 1, OddDestReg).addReg(OddSrcReg);
- DEBUG(std::cerr << "FPMover: the inserted instr is: " << *MI);
+ MI = BuildMI(MBB, I, TM.getInstrInfo()->get(SP::FMOVS), OddDestReg)
+ .addReg(OddSrcReg);
+ DOUT << "FPMover: the inserted instr is: " << *MI;
}
++NumFpDs;
}