Implement PowerPCInstrInfo::isMoveInstr(), patch by Nate Begeman
authorMisha Brukman <brukman+llvm@gmail.com>
Fri, 16 Jul 2004 20:51:55 +0000 (20:51 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Fri, 16 Jul 2004 20:51:55 +0000 (20:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14898 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PowerPCInstrInfo.cpp

index 8340e783a6739b0cc643a5df519d23e15e35dd91..778b55c81fdf29673b45d87698f61f3c2dc6881e 100644 (file)
 #include "PowerPC.h"
 #include "llvm/CodeGen/MachineInstrBuilder.h"
 #include "PowerPCGenInstrInfo.inc"
+#include <iostream>
 using namespace llvm;
 
 PowerPCInstrInfo::PowerPCInstrInfo()
   : TargetInstrInfo(PowerPCInsts, sizeof(PowerPCInsts)/sizeof(PowerPCInsts[0])){
 }
+
+bool PowerPCInstrInfo::isMoveInstr(const MachineInstr& MI,
+                               unsigned& sourceReg,
+                               unsigned& destReg) const {
+  MachineOpCode oc = MI.getOpcode();
+  if (oc == PPC32::OR) {
+      assert(MI.getNumOperands() == 3 &&
+             MI.getOperand(0).isRegister() &&
+             MI.getOperand(1).isRegister() &&
+             MI.getOperand(2).isRegister() &&
+             "invalid register-register int move instruction");
+      if (MI.getOperand(1).getReg() == MI.getOperand(2).getReg()) {
+        sourceReg = MI.getOperand(1).getReg();
+        destReg = MI.getOperand(0).getReg();
+        return true;
+      }
+  }
+  else if (oc == PPC32::FMR) {
+      assert(MI.getNumOperands() == 2 &&
+             MI.getOperand(0).isRegister() &&
+             MI.getOperand(1).isRegister() &&
+             "invalid register-register fp move instruction");
+      sourceReg = MI.getOperand(1).getReg();
+      destReg = MI.getOperand(0).getReg();
+      return true;
+  }
+  return false;
+}