|  | //===- lib/MC/MCValue.cpp - MCValue implementation ------------------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "llvm/MC/MCValue.h" | 
|  | #include "llvm/Config/llvm-config.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 { | 
|  | 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() <<  ':'; | 
|  |  | 
|  | OS << *getSymA(); | 
|  |  | 
|  | if (getSymB()) { | 
|  | OS << " - "; | 
|  | OS << *getSymB(); | 
|  | } | 
|  |  | 
|  | if (getConstant()) | 
|  | OS << " + " << getConstant(); | 
|  | } | 
|  |  | 
|  | #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) | 
|  | LLVM_DUMP_METHOD void MCValue::dump() const { | 
|  | 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; | 
|  |  | 
|  | return A->getKind(); | 
|  | } |