//===- lib/MC/MCValue.cpp - MCValue implementation ------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #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 MCAsmInfo *MAI) const { if (isAbsolute()) { OS << getConstant(); return; } // 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(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; }