Instead of checking op.getType() against MO_VirtualRegister and
authorMisha Brukman <brukman+llvm@gmail.com>
Fri, 22 Nov 2002 22:40:52 +0000 (22:40 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Fri, 22 Nov 2002 22:40:52 +0000 (22:40 +0000)
MO_MachineRegister, we no longer distinguish Virtual vs. Machine registers
externally, they're ALL registers, all equal.

Registers are only differentiated whether they are >=
MRegisterInfo::FirstVirtual or not.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4823 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineInstr.h

index 833a4a13e6df7aa98042125cf27ac02952eee661..f3aea0c67961af7e8ea00fac61cd65c88d6faa60 100644 (file)
@@ -10,6 +10,7 @@
 #define LLVM_CODEGEN_MACHINEINSTR_H
 
 #include "llvm/Annotation.h"
+#include "llvm/Target/MRegisterInfo.h"
 #include "Support/iterator"
 #include "Support/NonCopyable.h"
 #include <vector>
@@ -152,6 +153,19 @@ public:
   // 
   MachineOperandType getType() const { return opType; }
 
+
+  // This is to finally stop caring whether we have a virtual or machine
+  // register -- an easier interface is to simply call both virtual and machine
+  // registers essentially the same, yet be able to distinguish when
+  // necessary. Thus the instruction selector can just add registers without
+  // abandon, and the register allocator won't be confused.
+  bool isVirtualRegister() const {
+    return (opType == MO_VirtualRegister || opType == MO_MachineRegister) 
+      && regNum >= MRegisterInfo::FirstVirtualRegister;
+  }
+
+  bool isMachineRegister() const { return !isVirtualRegister(); }
+
   inline Value*                getVRegValue    () const {
     assert(opType == MO_VirtualRegister || opType == MO_CCRegister || 
           opType == MO_PCRelativeDisp);