X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FMC%2FMCValue.cpp;h=9dfc56ef23d1f42c9f0c5ea4e532ab45161304af;hb=1cfbb6358c2fc6c6cdf1a012c64cf23d3f859662;hp=9c7317096ce95d4a359d380ad270c8d8e7c5d9c9;hpb=2c11624b65a65fe487f335603dc0bf6372a50a89;p=oota-llvm.git diff --git a/lib/MC/MCValue.cpp b/lib/MC/MCValue.cpp index 9c7317096ce..9dfc56ef23d 100644 --- a/lib/MC/MCValue.cpp +++ b/lib/MC/MCValue.cpp @@ -8,23 +8,54 @@ //===----------------------------------------------------------------------===// #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; -void MCValue::print(raw_ostream &OS) const { +void MCValue::print(raw_ostream &OS, const MCAsmInfo *MAI) const { if (isAbsolute()) { OS << getConstant(); 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() << ':'; + + getSymA()->print(OS); + + if (getSymB()) { + OS << " - "; + getSymB()->print(OS); + } + if (getConstant()) OS << " + " << getConstant(); } +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) void MCValue::dump() const { - print(errs()); + print(dbgs(), nullptr); +} +#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; }