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 16namespace llvm { 17 18class GlobalValue; 19 20namespace SystemZCP { 21enum 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). 33class SystemZConstantPoolValue : public MachineConstantPoolValue { 34 const GlobalValue *GV; 35 SystemZCP::SystemZCPModifier Modifier; 36 37protected: 38 SystemZConstantPoolValue(const GlobalValue *GV, 39 SystemZCP::SystemZCPModifier Modifier); 40 41public: 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