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 SYSTEMZCONSTANTPOOLVALUE_H 11 #define 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 NTPOFF 23 }; 24 } 25 26 /// A SystemZ-specific constant pool value. At present, the only 27 /// defined constant pool values are offsets of thread-local variables 28 /// (written x@NTPOFF). 29 class SystemZConstantPoolValue : public MachineConstantPoolValue { 30 const GlobalValue *GV; 31 SystemZCP::SystemZCPModifier Modifier; 32 33 protected: 34 SystemZConstantPoolValue(const GlobalValue *GV, 35 SystemZCP::SystemZCPModifier Modifier); 36 37 public: 38 static SystemZConstantPoolValue * 39 Create(const GlobalValue *GV, SystemZCP::SystemZCPModifier Modifier); 40 41 // Override MachineConstantPoolValue. 42 virtual unsigned getRelocationInfo() const LLVM_OVERRIDE; 43 virtual int getExistingMachineCPValue(MachineConstantPool *CP, 44 unsigned Alignment) LLVM_OVERRIDE; 45 virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID) LLVM_OVERRIDE; 46 virtual void print(raw_ostream &O) const LLVM_OVERRIDE; 47 48 // Access SystemZ-specific fields. 49 const GlobalValue *getGlobalValue() const { return GV; } 50 SystemZCP::SystemZCPModifier getModifier() const { return Modifier; } 51 }; 52 53 } // End llvm namespace 54 55 #endif 56