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 {
21enum SystemZCPModifier {
22  NTPOFF
23};
24} // end namespace SystemZCP
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  unsigned getRelocationInfo() const override;
43  int getExistingMachineCPValue(MachineConstantPool *CP,
44                                unsigned Alignment) override;
45  void addSelectionDAGCSEId(FoldingSetNodeID &ID) override;
46  void print(raw_ostream &O) const 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 namespace llvm
54
55#endif
56