1afe66035SDaniel Dunbar //===- lib/MC/MCValue.cpp - MCValue implementation ------------------------===// 2afe66035SDaniel Dunbar // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6afe66035SDaniel Dunbar // 7afe66035SDaniel Dunbar //===----------------------------------------------------------------------===// 8afe66035SDaniel Dunbar 9afe66035SDaniel Dunbar #include "llvm/MC/MCValue.h" 10432a3883SNico Weber #include "llvm/Config/llvm-config.h" 119c64ec0aSDaniel Dunbar #include "llvm/MC/MCExpr.h" 12ac7f537dSDavid Greene #include "llvm/Support/Debug.h" 133d082fa5SRafael Espindola #include "llvm/Support/ErrorHandling.h" 14afe66035SDaniel Dunbar #include "llvm/Support/raw_ostream.h" 15afe66035SDaniel Dunbar 16afe66035SDaniel Dunbar using namespace llvm; 17afe66035SDaniel Dunbar print(raw_ostream & OS) const180e1fe184SSean Silvavoid MCValue::print(raw_ostream &OS) const { 19afe66035SDaniel Dunbar if (isAbsolute()) { 20afe66035SDaniel Dunbar OS << getConstant(); 21afe66035SDaniel Dunbar return; 22afe66035SDaniel Dunbar } 23afe66035SDaniel Dunbar 240999cbd0STim Northover // FIXME: prints as a number, which isn't ideal. But the meaning will be 250999cbd0STim Northover // target-specific anyway. 260999cbd0STim Northover if (getRefKind()) 270999cbd0STim Northover OS << ':' << getRefKind() << ':'; 280999cbd0STim Northover 29f4a13653SRafael Espindola OS << *getSymA(); 301a019d85SDaniel Dunbar 319c64ec0aSDaniel Dunbar if (getSymB()) { 329c64ec0aSDaniel Dunbar OS << " - "; 33f4a13653SRafael Espindola OS << *getSymB(); 349c64ec0aSDaniel Dunbar } 351a019d85SDaniel Dunbar 36afe66035SDaniel Dunbar if (getConstant()) 37afe66035SDaniel Dunbar OS << " + " << getConstant(); 38afe66035SDaniel Dunbar } 39afe66035SDaniel Dunbar 40615eb470SAaron Ballman #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) dump() const41eb2a2546SYaron KerenLLVM_DUMP_METHOD void MCValue::dump() const { 429ccec066SReid Kleckner print(dbgs()); 43afe66035SDaniel Dunbar } 448c209aa8SMatthias Braun #endif 453d082fa5SRafael Espindola getAccessVariant() const463d082fa5SRafael EspindolaMCSymbolRefExpr::VariantKind MCValue::getAccessVariant() const { 473d082fa5SRafael Espindola const MCSymbolRefExpr *B = getSymB(); 483d082fa5SRafael Espindola if (B) { 493d082fa5SRafael Espindola if (B->getKind() != MCSymbolRefExpr::VK_None) 503d082fa5SRafael Espindola llvm_unreachable("unsupported"); 513d082fa5SRafael Espindola } 523d082fa5SRafael Espindola 533d082fa5SRafael Espindola const MCSymbolRefExpr *A = getSymA(); 543d082fa5SRafael Espindola if (!A) 553d082fa5SRafael Espindola return MCSymbolRefExpr::VK_None; 563d082fa5SRafael Espindola 57*2b0256e4SFangrui Song return A->getKind(); 583d082fa5SRafael Espindola } 59