LCOV - code coverage report
Current view: top level - lib/Target/ARM/MCTargetDesc - ARMMCExpr.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 4 10 40.0 %
Date: 2017-09-14 15:23:50 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- ARMMCExpr.h - ARM specific MC expression classes --------*- 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             : #ifndef LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMMCEXPR_H
      11             : #define LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMMCEXPR_H
      12             : 
      13             : #include "llvm/MC/MCExpr.h"
      14             : 
      15             : namespace llvm {
      16             : 
      17           0 : class ARMMCExpr : public MCTargetExpr {
      18             : public:
      19             :   enum VariantKind {
      20             :     VK_ARM_None,
      21             :     VK_ARM_HI16,  // The R_ARM_MOVT_ABS relocation (:upper16: in the .s file)
      22             :     VK_ARM_LO16   // The R_ARM_MOVW_ABS_NC relocation (:lower16: in the .s file)
      23             :   };
      24             : 
      25             : private:
      26             :   const VariantKind Kind;
      27             :   const MCExpr *Expr;
      28             : 
      29             :   explicit ARMMCExpr(VariantKind Kind, const MCExpr *Expr)
      30        6288 :       : Kind(Kind), Expr(Expr) {}
      31             : 
      32             : public:
      33             :   /// @name Construction
      34             :   /// @{
      35             : 
      36             :   static const ARMMCExpr *create(VariantKind Kind, const MCExpr *Expr,
      37             :                                       MCContext &Ctx);
      38             : 
      39             :   static const ARMMCExpr *createUpper16(const MCExpr *Expr, MCContext &Ctx) {
      40        1477 :     return create(VK_ARM_HI16, Expr, Ctx);
      41             :   }
      42             : 
      43             :   static const ARMMCExpr *createLower16(const MCExpr *Expr, MCContext &Ctx) {
      44        1477 :     return create(VK_ARM_LO16, Expr, Ctx);
      45             :   }
      46             : 
      47             :   /// @}
      48             :   /// @name Accessors
      49             :   /// @{
      50             : 
      51             :   /// getOpcode - Get the kind of this expression.
      52             :   VariantKind getKind() const { return Kind; }
      53             : 
      54             :   /// getSubExpr - Get the child of this expression.
      55             :   const MCExpr *getSubExpr() const { return Expr; }
      56             : 
      57             :   /// @}
      58             : 
      59             :   void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
      60           0 :   bool evaluateAsRelocatableImpl(MCValue &Res,
      61             :                                  const MCAsmLayout *Layout,
      62             :                                  const MCFixup *Fixup) const override {
      63           0 :     return false;
      64             :   }
      65             :   void visitUsedExpr(MCStreamer &Streamer) const override;
      66           0 :   MCFragment *findAssociatedFragment() const override {
      67           0 :     return getSubExpr()->findAssociatedFragment();
      68             :   }
      69             : 
      70             :   // There are no TLS ARMMCExprs at the moment.
      71           0 :   void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const override {}
      72             : 
      73             :   static bool classof(const MCExpr *E) {
      74         197 :     return E->getKind() == MCExpr::Target;
      75             :   }
      76             : };
      77             : } // end namespace llvm
      78             : 
      79             : #endif

Generated by: LCOV version 1.13