1 //===- SystemZConstantPoolValue.h - SystemZ constant-pool value -*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef SYSTEMZCONSTANTPOOLVALUE_H
11 #define SYSTEMZCONSTANTPOOLVALUE_H
13 #include "llvm/CodeGen/MachineConstantPool.h"
14 #include "llvm/Support/ErrorHandling.h"
21 enum SystemZCPModifier {
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;
34 SystemZConstantPoolValue(const GlobalValue *GV,
35 SystemZCP::SystemZCPModifier Modifier);
38 static SystemZConstantPoolValue *
39 Create(const GlobalValue *GV, SystemZCP::SystemZCPModifier Modifier);
41 // Override MachineConstantPoolValue.
42 virtual unsigned getRelocationInfo() const override;
43 virtual int getExistingMachineCPValue(MachineConstantPool *CP,
44 unsigned Alignment) override;
45 virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID) override;
46 virtual void print(raw_ostream &O) const override;
48 // Access SystemZ-specific fields.
49 const GlobalValue *getGlobalValue() const { return GV; }
50 SystemZCP::SystemZCPModifier getModifier() const { return Modifier; }
53 } // End llvm namespace