reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | //===- 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; MCSymbolRefExpr::VariantKind Kind = A->getKind(); if (Kind == MCSymbolRefExpr::VK_WEAKREF) return MCSymbolRefExpr::VK_None; return Kind; } |