xref: /llvm-project-15.0.7/llvm/lib/MC/MCValue.cpp (revision 2b0256e4)
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 Silva void 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 Keren LLVM_DUMP_METHOD void MCValue::dump() const {
429ccec066SReid Kleckner   print(dbgs());
43afe66035SDaniel Dunbar }
448c209aa8SMatthias Braun #endif
453d082fa5SRafael Espindola 
getAccessVariant() const463d082fa5SRafael Espindola MCSymbolRefExpr::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