[IR] Replace of PointerType::get(Type) with opaque version (NFC) (#123617)
[llvm-project.git] / llvm / lib / Target / CSKY / CSKYConstantPoolValue.cpp
blob7998f4c6de9c2ba3db74e5743c9875da68a5c0a9
1 //===-- CSKYConstantPoolValue.cpp - CSKY constantpool value ---------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the CSKY specific constantpool value class.
11 //===----------------------------------------------------------------------===//
13 #include "CSKYConstantPoolValue.h"
14 #include "llvm/ADT/FoldingSet.h"
15 #include "llvm/CodeGen/MachineBasicBlock.h"
16 #include "llvm/IR/Constant.h"
17 #include "llvm/IR/Constants.h"
18 #include "llvm/IR/GlobalValue.h"
19 #include "llvm/IR/Type.h"
20 #include "llvm/Support/raw_ostream.h"
21 using namespace llvm;
23 //===----------------------------------------------------------------------===//
24 // CSKYConstantPoolValue
25 //===----------------------------------------------------------------------===//
27 CSKYConstantPoolValue::CSKYConstantPoolValue(Type *Ty, CSKYCP::CSKYCPKind Kind,
28 unsigned PCAdjust,
29 CSKYCP::CSKYCPModifier Modifier,
30 bool AddCurrentAddress,
31 unsigned ID)
32 : MachineConstantPoolValue(Ty), Kind(Kind), PCAdjust(PCAdjust),
33 Modifier(Modifier), AddCurrentAddress(AddCurrentAddress), LabelId(ID) {}
35 const char *CSKYConstantPoolValue::getModifierText() const {
36 switch (Modifier) {
37 case CSKYCP::ADDR:
38 return "ADDR";
39 case CSKYCP::GOT:
40 return "GOT";
41 case CSKYCP::GOTOFF:
42 return "GOTOFF";
43 case CSKYCP::PLT:
44 return "PLT";
45 case CSKYCP::TLSIE:
46 return "TLSIE";
47 case CSKYCP::TLSLE:
48 return "TLSLE";
49 case CSKYCP::TLSGD:
50 return "TLSGD";
51 case CSKYCP::NO_MOD:
52 return "";
54 llvm_unreachable("Unknown modifier!");
57 int CSKYConstantPoolValue::getExistingMachineCPValue(MachineConstantPool *CP,
58 Align Alignment) {
59 llvm_unreachable("Shouldn't be calling this directly!");
62 void CSKYConstantPoolValue::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
63 ID.AddInteger(LabelId);
64 ID.AddInteger(PCAdjust);
65 ID.AddInteger(Modifier);
68 void CSKYConstantPoolValue::print(raw_ostream &O) const {
69 if (Modifier)
70 O << "(" << getModifierText() << ")";
71 if (PCAdjust)
72 O << " + " << PCAdjust;
75 //===----------------------------------------------------------------------===//
76 // CSKYConstantPoolConstant
77 //===----------------------------------------------------------------------===//
79 CSKYConstantPoolConstant::CSKYConstantPoolConstant(
80 const Constant *C, Type *Ty, CSKYCP::CSKYCPKind Kind, unsigned PCAdjust,
81 CSKYCP::CSKYCPModifier Modifier, bool AddCurrentAddress, unsigned ID)
82 : CSKYConstantPoolValue(Ty, Kind, PCAdjust, Modifier, AddCurrentAddress,
83 ID),
84 CVal(C) {}
86 CSKYConstantPoolConstant *CSKYConstantPoolConstant::Create(
87 const Constant *C, CSKYCP::CSKYCPKind Kind, unsigned PCAdjust,
88 CSKYCP::CSKYCPModifier Modifier, bool AddCurrentAddress, unsigned ID) {
89 return new CSKYConstantPoolConstant(C, C->getType(), Kind, PCAdjust, Modifier,
90 AddCurrentAddress, ID);
93 CSKYConstantPoolConstant *CSKYConstantPoolConstant::Create(
94 const Constant *C, Type *Ty, CSKYCP::CSKYCPKind Kind, unsigned PCAdjust,
95 CSKYCP::CSKYCPModifier Modifier, bool AddCurrentAddress, unsigned ID) {
96 return new CSKYConstantPoolConstant(C, Ty, Kind, PCAdjust, Modifier,
97 AddCurrentAddress, ID);
100 const GlobalValue *CSKYConstantPoolConstant::getGV() const {
101 assert(isa<GlobalValue>(CVal) && "CVal should be GlobalValue");
102 return cast<GlobalValue>(CVal);
105 const BlockAddress *CSKYConstantPoolConstant::getBlockAddress() const {
106 assert(isa<BlockAddress>(CVal) && "CVal should be BlockAddress");
107 return cast<BlockAddress>(CVal);
110 const Constant *CSKYConstantPoolConstant::getConstantPool() const {
111 return CVal;
114 int CSKYConstantPoolConstant::getExistingMachineCPValue(MachineConstantPool *CP,
115 Align Alignment) {
116 return getExistingMachineCPValueImpl<CSKYConstantPoolConstant>(CP, Alignment);
119 void CSKYConstantPoolConstant::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
120 ID.AddPointer(CVal);
122 CSKYConstantPoolValue::addSelectionDAGCSEId(ID);
125 void CSKYConstantPoolConstant::print(raw_ostream &O) const {
126 O << CVal->getName();
127 CSKYConstantPoolValue::print(O);
130 //===----------------------------------------------------------------------===//
131 // CSKYConstantPoolSymbol
132 //===----------------------------------------------------------------------===//
134 CSKYConstantPoolSymbol::CSKYConstantPoolSymbol(Type *Ty, const char *S,
135 unsigned PCAdjust,
136 CSKYCP::CSKYCPModifier Modifier,
137 bool AddCurrentAddress)
138 : CSKYConstantPoolValue(Ty, CSKYCP::CPExtSymbol, PCAdjust, Modifier,
139 AddCurrentAddress),
140 S(strdup(S)) {}
142 CSKYConstantPoolSymbol *
143 CSKYConstantPoolSymbol::Create(Type *Ty, const char *S, unsigned PCAdjust,
144 CSKYCP::CSKYCPModifier Modifier) {
145 return new CSKYConstantPoolSymbol(Ty, S, PCAdjust, Modifier, false);
148 int CSKYConstantPoolSymbol::getExistingMachineCPValue(MachineConstantPool *CP,
149 Align Alignment) {
151 return getExistingMachineCPValueImpl<CSKYConstantPoolSymbol>(CP, Alignment);
154 void CSKYConstantPoolSymbol::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
155 ID.AddString(S);
156 CSKYConstantPoolValue::addSelectionDAGCSEId(ID);
159 void CSKYConstantPoolSymbol::print(raw_ostream &O) const {
160 O << S;
161 CSKYConstantPoolValue::print(O);
164 //===----------------------------------------------------------------------===//
165 // CSKYConstantPoolMBB
166 //===----------------------------------------------------------------------===//
168 CSKYConstantPoolMBB::CSKYConstantPoolMBB(Type *Ty, const MachineBasicBlock *Mbb,
169 unsigned PCAdjust,
170 CSKYCP::CSKYCPModifier Modifier,
171 bool AddCurrentAddress)
172 : CSKYConstantPoolValue(Ty, CSKYCP::CPMachineBasicBlock, PCAdjust, Modifier,
173 AddCurrentAddress),
174 MBB(Mbb) {}
176 CSKYConstantPoolMBB *CSKYConstantPoolMBB::Create(Type *Ty,
177 const MachineBasicBlock *Mbb,
178 unsigned PCAdjust) {
179 return new CSKYConstantPoolMBB(Ty, Mbb, PCAdjust, CSKYCP::ADDR, false);
182 int CSKYConstantPoolMBB::getExistingMachineCPValue(MachineConstantPool *CP,
183 Align Alignment) {
184 return getExistingMachineCPValueImpl<CSKYConstantPoolMBB>(CP, Alignment);
187 void CSKYConstantPoolMBB::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
188 ID.AddPointer(MBB);
189 CSKYConstantPoolValue::addSelectionDAGCSEId(ID);
192 void CSKYConstantPoolMBB::print(raw_ostream &O) const {
193 O << "BB#" << MBB->getNumber();
194 CSKYConstantPoolValue::print(O);
197 //===----------------------------------------------------------------------===//
198 // CSKYConstantPoolJT
199 //===----------------------------------------------------------------------===//
201 CSKYConstantPoolJT::CSKYConstantPoolJT(Type *Ty, int JTIndex, unsigned PCAdj,
202 CSKYCP::CSKYCPModifier Modifier,
203 bool AddCurrentAddress)
204 : CSKYConstantPoolValue(Ty, CSKYCP::CPJT, PCAdj, Modifier,
205 AddCurrentAddress),
206 JTI(JTIndex) {}
208 CSKYConstantPoolJT *
209 CSKYConstantPoolJT::Create(Type *Ty, int JTI, unsigned PCAdj,
210 CSKYCP::CSKYCPModifier Modifier) {
211 return new CSKYConstantPoolJT(Ty, JTI, PCAdj, Modifier, false);
214 int CSKYConstantPoolJT::getExistingMachineCPValue(MachineConstantPool *CP,
215 Align Alignment) {
216 return getExistingMachineCPValueImpl<CSKYConstantPoolJT>(CP, Alignment);
219 void CSKYConstantPoolJT::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
220 ID.AddInteger(JTI);
221 CSKYConstantPoolValue::addSelectionDAGCSEId(ID);
224 void CSKYConstantPoolJT::print(raw_ostream &O) const {
225 O << "JTI#" << JTI;
226 CSKYConstantPoolValue::print(O);