Home | History | Annotate | Download | only in NVPTX
      1 //===-- NVPTXMCExpr.h - NVPTX 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 // Modeled after ARMMCExpr
     11 
     12 #ifndef NVPTXMCEXPR_H
     13 #define NVPTXMCEXPR_H
     14 
     15 #include "llvm/ADT/APFloat.h"
     16 #include "llvm/MC/MCExpr.h"
     17 
     18 namespace llvm {
     19 
     20 class NVPTXFloatMCExpr : public MCTargetExpr {
     21 public:
     22   enum VariantKind {
     23     VK_NVPTX_None,
     24     VK_NVPTX_SINGLE_PREC_FLOAT,   // FP constant in single-precision
     25     VK_NVPTX_DOUBLE_PREC_FLOAT    // FP constant in double-precision
     26   };
     27 
     28 private:
     29   const VariantKind Kind;
     30   const APFloat Flt;
     31 
     32   explicit NVPTXFloatMCExpr(VariantKind _Kind, APFloat _Flt)
     33     : Kind(_Kind), Flt(_Flt) {}
     34 
     35 public:
     36   /// @name Construction
     37   /// @{
     38 
     39   static const NVPTXFloatMCExpr *Create(VariantKind Kind, APFloat Flt,
     40                                         MCContext &Ctx);
     41 
     42   static const NVPTXFloatMCExpr *CreateConstantFPSingle(APFloat Flt,
     43                                                         MCContext &Ctx) {
     44     return Create(VK_NVPTX_SINGLE_PREC_FLOAT, Flt, Ctx);
     45   }
     46 
     47   static const NVPTXFloatMCExpr *CreateConstantFPDouble(APFloat Flt,
     48                                                         MCContext &Ctx) {
     49     return Create(VK_NVPTX_DOUBLE_PREC_FLOAT, Flt, Ctx);
     50   }
     51 
     52   /// @}
     53   /// @name Accessors
     54   /// @{
     55 
     56   /// getOpcode - Get the kind of this expression.
     57   VariantKind getKind() const { return Kind; }
     58 
     59   /// getSubExpr - Get the child of this expression.
     60   APFloat getAPFloat() const { return Flt; }
     61 
     62 /// @}
     63 
     64   void PrintImpl(raw_ostream &OS) const;
     65   bool EvaluateAsRelocatableImpl(MCValue &Res,
     66                                  const MCAsmLayout *Layout) const {
     67     return false;
     68   }
     69   void AddValueSymbols(MCAssembler *) const {};
     70   const MCSection *FindAssociatedSection() const {
     71     return NULL;
     72   }
     73 
     74   // There are no TLS NVPTXMCExprs at the moment.
     75   void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const {}
     76 
     77   static bool classof(const MCExpr *E) {
     78     return E->getKind() == MCExpr::Target;
     79   }
     80 };
     81 } // end namespace llvm
     82 
     83 #endif
     84