Add isIdentityCopy to check for identity copy (or extract_subreg, etc.)
authorEvan Cheng <evan.cheng@apple.com>
Sun, 25 Oct 2009 07:47:07 +0000 (07:47 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sun, 25 Oct 2009 07:47:07 +0000 (07:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85044 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetInstrInfo.h

index d64df445b05e78727db92ea47c79bd33b409caed..b9ad1f93ed5a5df923ce371ce9d3dd77027514ca 100644 (file)
@@ -145,20 +145,30 @@ public:
   /// isIdentityCopy - Return true if the instruction is a copy (or
   /// extract_subreg, insert_subreg, subreg_to_reg) where the source and
   /// destination registers are the same.
-  bool isIdentityCopy(const MachineInstr &MI) const {
-    unsigned SrcReg, DstReg, SrcSubIdx, DstSubIdx;
+  bool isIdentityCopy(const MachineInstr &MI,
+                      unsigned &SrcReg, unsigned &DstReg,
+                      unsigned &SrcSubIdx, unsigned &DstSubIdx) const {
     if (isMoveInstr(MI, SrcReg, DstReg, SrcSubIdx, DstSubIdx) &&
         SrcReg == DstReg)
       return true;
 
-    if (MI.getOpcode() == TargetInstrInfo::EXTRACT_SUBREG &&
-        MI.getOperand(0).getReg() == MI.getOperand(1).getReg())
-    return true;
+    if (MI.getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) {
+      DstReg = MI.getOperand(0).getReg();
+      DstSubIdx = MI.getOperand(0).getSubReg();
+      SrcReg = MI.getOperand(1).getReg();
+      SrcSubIdx = MI.getOperand(1).getSubReg();
+      return DstReg == SrcReg;
+    }
+
+    if (MI.getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
+        MI.getOpcode() == TargetInstrInfo::SUBREG_TO_REG) {
+      DstReg = MI.getOperand(0).getReg();
+      DstSubIdx = MI.getOperand(0).getSubReg();
+      SrcReg = MI.getOperand(2).getReg();
+      SrcSubIdx = MI.getOperand(2).getSubReg();
+      return DstReg == SrcReg;
+    }
 
-    if ((MI.getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
-         MI.getOpcode() == TargetInstrInfo::SUBREG_TO_REG) &&
-        MI.getOperand(0).getReg() == MI.getOperand(2).getReg())
-      return true;
     return false;
   }