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 16namespace llvm { 17 18class GlobalValue; 19 20namespace 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). 29class SystemZConstantPoolValue : public MachineConstantPoolValue { 30 const GlobalValue *GV; 31 SystemZCP::SystemZCPModifier Modifier; 32 33protected: 34 SystemZConstantPoolValue(const GlobalValue *GV, 35 SystemZCP::SystemZCPModifier Modifier); 36 37public: 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