1198090Srdivacky//===- lib/MC/MCValue.cpp - MCValue implementation ------------------------===// 2198090Srdivacky// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6198090Srdivacky// 7198090Srdivacky//===----------------------------------------------------------------------===// 8198090Srdivacky 9198090Srdivacky#include "llvm/MC/MCValue.h" 10341825Sdim#include "llvm/Config/llvm-config.h" 11205407Srdivacky#include "llvm/MC/MCExpr.h" 12202375Srdivacky#include "llvm/Support/Debug.h" 13276479Sdim#include "llvm/Support/ErrorHandling.h" 14198090Srdivacky#include "llvm/Support/raw_ostream.h" 15198090Srdivacky 16198090Srdivackyusing namespace llvm; 17198090Srdivacky 18288943Sdimvoid MCValue::print(raw_ostream &OS) const { 19198090Srdivacky if (isAbsolute()) { 20198090Srdivacky OS << getConstant(); 21198090Srdivacky return; 22198090Srdivacky } 23198090Srdivacky 24276479Sdim // FIXME: prints as a number, which isn't ideal. But the meaning will be 25276479Sdim // target-specific anyway. 26276479Sdim if (getRefKind()) 27276479Sdim OS << ':' << getRefKind() << ':'; 28276479Sdim 29288943Sdim OS << *getSymA(); 30198090Srdivacky 31205407Srdivacky if (getSymB()) { 32205407Srdivacky OS << " - "; 33288943Sdim OS << *getSymB(); 34205407Srdivacky } 35198090Srdivacky 36198090Srdivacky if (getConstant()) 37198090Srdivacky OS << " + " << getConstant(); 38198090Srdivacky} 39198090Srdivacky 40321369Sdim#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 41309124SdimLLVM_DUMP_METHOD void MCValue::dump() const { 42288943Sdim print(dbgs()); 43198090Srdivacky} 44321369Sdim#endif 45276479Sdim 46276479SdimMCSymbolRefExpr::VariantKind MCValue::getAccessVariant() const { 47276479Sdim const MCSymbolRefExpr *B = getSymB(); 48276479Sdim if (B) { 49276479Sdim if (B->getKind() != MCSymbolRefExpr::VK_None) 50276479Sdim llvm_unreachable("unsupported"); 51276479Sdim } 52276479Sdim 53276479Sdim const MCSymbolRefExpr *A = getSymA(); 54276479Sdim if (!A) 55276479Sdim return MCSymbolRefExpr::VK_None; 56276479Sdim 57360784Sdim return A->getKind(); 58276479Sdim} 59