Home | History | Annotate | Download | only in SystemZ
      1 //===- SystemZConstantPoolValue.h - SystemZ constant-pool value -*- 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_SYSTEMZ_SYSTEMZCONSTANTPOOLVALUE_H
     11 #define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZCONSTANTPOOLVALUE_H
     12 
     13 #include "llvm/CodeGen/MachineConstantPool.h"
     14 #include "llvm/Support/ErrorHandling.h"
     15 
     16 namespace llvm {
     17 
     18 class GlobalValue;
     19 
     20 namespace SystemZCP {
     21 enum SystemZCPModifier {
     22   TLSGD,
     23   TLSLDM,
     24   DTPOFF,
     25   NTPOFF
     26 };
     27 } // end namespace SystemZCP
     28 
     29 /// A SystemZ-specific constant pool value.  At present, the only
     30 /// defined constant pool values are module IDs or offsets of
     31 /// thread-local variables (written x@TLSGD, x@TLSLDM, x@DTPOFF,
     32 /// or x@NTPOFF).
     33 class SystemZConstantPoolValue : public MachineConstantPoolValue {
     34   const GlobalValue *GV;
     35   SystemZCP::SystemZCPModifier Modifier;
     36 
     37 protected:
     38   SystemZConstantPoolValue(const GlobalValue *GV,
     39                            SystemZCP::SystemZCPModifier Modifier);
     40 
     41 public:
     42   static SystemZConstantPoolValue *
     43     Create(const GlobalValue *GV, SystemZCP::SystemZCPModifier Modifier);
     44 
     45   // Override MachineConstantPoolValue.
     46   int getExistingMachineCPValue(MachineConstantPool *CP,
     47                                 unsigned Alignment) override;
     48   void addSelectionDAGCSEId(FoldingSetNodeID &ID) override;
     49   void print(raw_ostream &O) const override;
     50 
     51   // Access SystemZ-specific fields.
     52   const GlobalValue *getGlobalValue() const { return GV; }
     53   SystemZCP::SystemZCPModifier getModifier() const { return Modifier; }
     54 };
     55 
     56 } // end namespace llvm
     57 
     58 #endif
     59