LCOV - code coverage report
Current view: top level - include/llvm/MC - MCValue.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 4 4 100.0 %
Date: 2017-09-14 15:23:50 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- llvm/MC/MCValue.h - MCValue class -----------------------*- C++ -*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : //
      10             : // This file contains the declaration of the MCValue class.
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #ifndef LLVM_MC_MCVALUE_H
      15             : #define LLVM_MC_MCVALUE_H
      16             : 
      17             : #include "llvm/MC/MCExpr.h"
      18             : #include "llvm/MC/MCSymbol.h"
      19             : #include "llvm/Support/DataTypes.h"
      20             : #include <cassert>
      21             : 
      22             : namespace llvm {
      23             : class MCAsmInfo;
      24             : class raw_ostream;
      25             : 
      26             : /// \brief This represents an "assembler immediate".
      27             : ///
      28             : ///  In its most general form, this can hold ":Kind:(SymbolA - SymbolB +
      29             : ///  imm64)".  Not all targets supports relocations of this general form, but we
      30             : ///  need to represent this anyway.
      31             : ///
      32             : /// In general both SymbolA and SymbolB will also have a modifier
      33             : /// analogous to the top-level Kind. Current targets are not expected
      34             : /// to make use of both though. The choice comes down to whether
      35             : /// relocation modifiers apply to the closest symbol or the whole
      36             : /// expression.
      37             : ///
      38             : /// Note that this class must remain a simple POD value class, because we need
      39             : /// it to live in unions etc.
      40             : class MCValue {
      41             :   const MCSymbolRefExpr *SymA, *SymB;
      42             :   int64_t Cst;
      43             :   uint32_t RefKind;
      44             : public:
      45     8937677 :   MCValue() : SymA(nullptr), SymB(nullptr), Cst(0), RefKind(0) {}
      46             :   int64_t getConstant() const { return Cst; }
      47             :   const MCSymbolRefExpr *getSymA() const { return SymA; }
      48             :   const MCSymbolRefExpr *getSymB() const { return SymB; }
      49             :   uint32_t getRefKind() const { return RefKind; }
      50             : 
      51             :   /// \brief Is this an absolute (as opposed to relocatable) value.
      52     4465508 :   bool isAbsolute() const { return !SymA && !SymB; }
      53             : 
      54             :   /// \brief Print the value to the stream \p OS.
      55             :   void print(raw_ostream &OS) const;
      56             : 
      57             :   /// \brief Print the value to stderr.
      58             :   void dump() const;
      59             : 
      60             :   MCSymbolRefExpr::VariantKind getAccessVariant() const;
      61             : 
      62             :   static MCValue get(const MCSymbolRefExpr *SymA,
      63             :                      const MCSymbolRefExpr *SymB = nullptr,
      64             :                      int64_t Val = 0, uint32_t RefKind = 0) {
      65     5918788 :     MCValue R;
      66             :     R.Cst = Val;
      67             :     R.SymA = SymA;
      68             :     R.SymB = SymB;
      69             :     R.RefKind = RefKind;
      70             :     return R;
      71             :   }
      72             : 
      73             :   static MCValue get(int64_t Val) {
      74      989536 :     MCValue R;
      75             :     R.Cst = Val;
      76             :     R.SymA = nullptr;
      77             :     R.SymB = nullptr;
      78             :     R.RefKind = 0;
      79             :     return R;
      80             :   }
      81             : 
      82             : };
      83             : 
      84             : } // end namespace llvm
      85             : 
      86             : #endif

Generated by: LCOV version 1.13