12c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar//===- lib/MC/MCValue.cpp - MCValue implementation ------------------------===// 22c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar// 32c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar// The LLVM Compiler Infrastructure 42c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar// 52c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar// This file is distributed under the University of Illinois Open Source 62c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar// License. See LICENSE.TXT for details. 72c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar// 82c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar//===----------------------------------------------------------------------===// 92c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar 102c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar#include "llvm/MC/MCValue.h" 119a1d20042f6a6ec648a3588f9b13264a4570aab0Daniel Dunbar#include "llvm/MC/MCExpr.h" 1224c802bc8d6b3e248b4bc4e5951c88127dd799d6David Greene#include "llvm/Support/Debug.h" 13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/Support/ErrorHandling.h" 142c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar#include "llvm/Support/raw_ostream.h" 152c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar 162c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbarusing namespace llvm; 172c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar 18684c593d05db0bd277268fc9d8c05bce138c745aChris Lattnervoid MCValue::print(raw_ostream &OS, const MCAsmInfo *MAI) const { 192c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar if (isAbsolute()) { 202c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar OS << getConstant(); 212c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar return; 222c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar } 232c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // FIXME: prints as a number, which isn't ideal. But the meaning will be 2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // target-specific anyway. 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if (getRefKind()) 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines OS << ':' << getRefKind() << ':'; 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 299a1d20042f6a6ec648a3588f9b13264a4570aab0Daniel Dunbar getSymA()->print(OS); 301689e0cf55205042b830fdbe3fc5f7b483997334Daniel Dunbar 319a1d20042f6a6ec648a3588f9b13264a4570aab0Daniel Dunbar if (getSymB()) { 329a1d20042f6a6ec648a3588f9b13264a4570aab0Daniel Dunbar OS << " - "; 339a1d20042f6a6ec648a3588f9b13264a4570aab0Daniel Dunbar getSymB()->print(OS); 349a1d20042f6a6ec648a3588f9b13264a4570aab0Daniel Dunbar } 351689e0cf55205042b830fdbe3fc5f7b483997334Daniel Dunbar 362c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar if (getConstant()) 372c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar OS << " + " << getConstant(); 382c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar} 392c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar 40286c4dc355b8be6806081b23c3097485821c7642Manman Ren#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 412c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbarvoid MCValue::dump() const { 42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines print(dbgs(), nullptr); 432c11624b65a65fe487f335603dc0bf6372a50a89Daniel Dunbar} 44cc77eece74c8db09acc2af425e7e6c88a5bb30d1Manman Ren#endif 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesMCSymbolRefExpr::VariantKind MCValue::getAccessVariant() const { 47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCSymbolRefExpr *B = getSymB(); 48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (B) { 49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (B->getKind() != MCSymbolRefExpr::VK_None) 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines llvm_unreachable("unsupported"); 51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCSymbolRefExpr *A = getSymA(); 54dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (!A) 55dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return MCSymbolRefExpr::VK_None; 56dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 57dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCSymbolRefExpr::VariantKind Kind = A->getKind(); 58dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (Kind == MCSymbolRefExpr::VK_WEAKREF) 59dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return MCSymbolRefExpr::VK_None; 60dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return Kind; 61dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 62