Re-unique_ptrify LoadedObjectInfo::clone after it was reverted due to some other...
[oota-llvm.git] / lib / MC / MCValue.cpp
index 9c7317096ce95d4a359d380ad270c8d8e7c5d9c9..495a2b6ea5bbff4393a432c21239806a7196a0fe 100644 (file)
@@ -8,6 +8,9 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/MC/MCValue.h"
+#include "llvm/MC/MCExpr.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/raw_ostream.h"
 
 using namespace llvm;
@@ -18,13 +21,41 @@ void MCValue::print(raw_ostream &OS) const {
     return;
   }
 
-  OS << getSymA();
-  if (getSymB())
-    OS << " - " << getSymB();
+  // FIXME: prints as a number, which isn't ideal. But the meaning will be
+  // target-specific anyway.
+  if (getRefKind())
+    OS << ':' << getRefKind() <<  ':';
+
+  OS << *getSymA();
+
+  if (getSymB()) {
+    OS << " - ";
+    OS << *getSymB();
+  }
+
   if (getConstant())
     OS << " + " << getConstant();
 }
 
+#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
 void MCValue::dump() const {
-  print(errs());
+  print(dbgs());
+}
+#endif
+
+MCSymbolRefExpr::VariantKind MCValue::getAccessVariant() const {
+  const MCSymbolRefExpr *B = getSymB();
+  if (B) {
+    if (B->getKind() != MCSymbolRefExpr::VK_None)
+      llvm_unreachable("unsupported");
+  }
+
+  const MCSymbolRefExpr *A = getSymA();
+  if (!A)
+    return MCSymbolRefExpr::VK_None;
+
+  MCSymbolRefExpr::VariantKind Kind = A->getKind();
+  if (Kind == MCSymbolRefExpr::VK_WEAKREF)
+    return MCSymbolRefExpr::VK_None;
+  return Kind;
 }