aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/MachineInstr.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h
index 833a4a13e6..f3aea0c679 100644
--- a/include/llvm/CodeGen/MachineInstr.h
+++ b/include/llvm/CodeGen/MachineInstr.h
@@ -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);