Skip to content

Commit ffc5f79

Browse files
committed
LoongArch: Replace most Specifier members with raw relocation types
Follow Sparc.
1 parent cd6c4b6 commit ffc5f79

File tree

6 files changed

+337
-542
lines changed

6 files changed

+337
-542
lines changed

llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp

Lines changed: 164 additions & 186 deletions
Large diffs are not rendered by default.

llvm/lib/Target/LoongArch/LoongArchMCInstLower.cpp

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "LoongArch.h"
1515
#include "MCTargetDesc/LoongArchBaseInfo.h"
1616
#include "MCTargetDesc/LoongArchMCExpr.h"
17+
#include "llvm/BinaryFormat/ELF.h"
1718
#include "llvm/CodeGen/AsmPrinter.h"
1819
#include "llvm/CodeGen/MachineBasicBlock.h"
1920
#include "llvm/CodeGen/MachineInstr.h"
@@ -25,7 +26,7 @@ using namespace llvm;
2526
static MCOperand lowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym,
2627
const AsmPrinter &AP) {
2728
MCContext &Ctx = AP.OutContext;
28-
LoongArchMCExpr::Specifier Kind;
29+
uint16_t Kind = 0;
2930

3031
switch (LoongArchII::getDirectFlags(MO)) {
3132
default:
@@ -40,88 +41,88 @@ static MCOperand lowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym,
4041
Kind = LoongArchMCExpr::VK_CALL_PLT;
4142
break;
4243
case LoongArchII::MO_PCREL_HI:
43-
Kind = LoongArchMCExpr::VK_PCALA_HI20;
44+
Kind = ELF::R_LARCH_PCALA_HI20;
4445
break;
4546
case LoongArchII::MO_PCREL_LO:
46-
Kind = LoongArchMCExpr::VK_PCALA_LO12;
47+
Kind = ELF::R_LARCH_PCALA_LO12;
4748
break;
4849
case LoongArchII::MO_PCREL64_LO:
49-
Kind = LoongArchMCExpr::VK_PCALA64_LO20;
50+
Kind = ELF::R_LARCH_PCALA64_LO20;
5051
break;
5152
case LoongArchII::MO_PCREL64_HI:
52-
Kind = LoongArchMCExpr::VK_PCALA64_HI12;
53+
Kind = ELF::R_LARCH_PCALA64_HI12;
5354
break;
5455
case LoongArchII::MO_GOT_PC_HI:
55-
Kind = LoongArchMCExpr::VK_GOT_PC_HI20;
56+
Kind = ELF::R_LARCH_GOT_PC_HI20;
5657
break;
5758
case LoongArchII::MO_GOT_PC_LO:
58-
Kind = LoongArchMCExpr::VK_GOT_PC_LO12;
59+
Kind = ELF::R_LARCH_GOT_PC_LO12;
5960
break;
6061
case LoongArchII::MO_GOT_PC64_LO:
61-
Kind = LoongArchMCExpr::VK_GOT64_PC_LO20;
62+
Kind = ELF::R_LARCH_GOT64_PC_LO20;
6263
break;
6364
case LoongArchII::MO_GOT_PC64_HI:
64-
Kind = LoongArchMCExpr::VK_GOT64_PC_HI12;
65+
Kind = ELF::R_LARCH_GOT64_PC_HI12;
6566
break;
6667
case LoongArchII::MO_LE_HI:
67-
Kind = LoongArchMCExpr::VK_TLS_LE_HI20;
68+
Kind = ELF::R_LARCH_TLS_LE_HI20;
6869
break;
6970
case LoongArchII::MO_LE_LO:
70-
Kind = LoongArchMCExpr::VK_TLS_LE_LO12;
71+
Kind = ELF::R_LARCH_TLS_LE_LO12;
7172
break;
7273
case LoongArchII::MO_LE64_LO:
73-
Kind = LoongArchMCExpr::VK_TLS_LE64_LO20;
74+
Kind = ELF::R_LARCH_TLS_LE64_LO20;
7475
break;
7576
case LoongArchII::MO_LE64_HI:
76-
Kind = LoongArchMCExpr::VK_TLS_LE64_HI12;
77+
Kind = ELF::R_LARCH_TLS_LE64_HI12;
7778
break;
7879
case LoongArchII::MO_IE_PC_HI:
79-
Kind = LoongArchMCExpr::VK_TLS_IE_PC_HI20;
80+
Kind = ELF::R_LARCH_TLS_IE_PC_HI20;
8081
break;
8182
case LoongArchII::MO_IE_PC_LO:
82-
Kind = LoongArchMCExpr::VK_TLS_IE_PC_LO12;
83+
Kind = ELF::R_LARCH_TLS_IE_PC_LO12;
8384
break;
8485
case LoongArchII::MO_IE_PC64_LO:
85-
Kind = LoongArchMCExpr::VK_TLS_IE64_PC_LO20;
86+
Kind = ELF::R_LARCH_TLS_IE64_PC_LO20;
8687
break;
8788
case LoongArchII::MO_IE_PC64_HI:
88-
Kind = LoongArchMCExpr::VK_TLS_IE64_PC_HI12;
89+
Kind = ELF::R_LARCH_TLS_IE64_PC_HI12;
8990
break;
9091
case LoongArchII::MO_LD_PC_HI:
91-
Kind = LoongArchMCExpr::VK_TLS_LD_PC_HI20;
92+
Kind = ELF::R_LARCH_TLS_LD_PC_HI20;
9293
break;
9394
case LoongArchII::MO_GD_PC_HI:
94-
Kind = LoongArchMCExpr::VK_TLS_GD_PC_HI20;
95+
Kind = ELF::R_LARCH_TLS_GD_PC_HI20;
9596
break;
9697
case LoongArchII::MO_CALL36:
97-
Kind = LoongArchMCExpr::VK_CALL36;
98+
Kind = ELF::R_LARCH_CALL36;
9899
break;
99100
case LoongArchII::MO_DESC_PC_HI:
100-
Kind = LoongArchMCExpr::VK_TLS_DESC_PC_HI20;
101+
Kind = ELF::R_LARCH_TLS_DESC_PC_HI20;
101102
break;
102103
case LoongArchII::MO_DESC_PC_LO:
103-
Kind = LoongArchMCExpr::VK_TLS_DESC_PC_LO12;
104+
Kind = ELF::R_LARCH_TLS_DESC_PC_LO12;
104105
break;
105106
case LoongArchII::MO_DESC64_PC_LO:
106-
Kind = LoongArchMCExpr::VK_TLS_DESC64_PC_LO20;
107+
Kind = ELF::R_LARCH_TLS_DESC64_PC_LO20;
107108
break;
108109
case LoongArchII::MO_DESC64_PC_HI:
109-
Kind = LoongArchMCExpr::VK_TLS_DESC64_PC_HI12;
110+
Kind = ELF::R_LARCH_TLS_DESC64_PC_HI12;
110111
break;
111112
case LoongArchII::MO_DESC_LD:
112-
Kind = LoongArchMCExpr::VK_TLS_DESC_LD;
113+
Kind = ELF::R_LARCH_TLS_DESC_LD;
113114
break;
114115
case LoongArchII::MO_DESC_CALL:
115-
Kind = LoongArchMCExpr::VK_TLS_DESC_CALL;
116+
Kind = ELF::R_LARCH_TLS_DESC_CALL;
116117
break;
117118
case LoongArchII::MO_LE_HI_R:
118-
Kind = LoongArchMCExpr::VK_TLS_LE_HI20_R;
119+
Kind = ELF::R_LARCH_TLS_LE_HI20_R;
119120
break;
120121
case LoongArchII::MO_LE_ADD_R:
121-
Kind = LoongArchMCExpr::VK_TLS_LE_ADD_R;
122+
Kind = ELF::R_LARCH_TLS_LE_ADD_R;
122123
break;
123124
case LoongArchII::MO_LE_LO_R:
124-
Kind = LoongArchMCExpr::VK_TLS_LE_LO12_R;
125+
Kind = ELF::R_LARCH_TLS_LE_LO12_R;
125126
break;
126127
// TODO: Handle more target-flags.
127128
}

llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,19 @@ unsigned LoongArchELFObjectWriter::getRelocType(MCContext &Ctx,
5151
const MCFixup &Fixup,
5252
bool IsPCRel) const {
5353
switch (Target.getSpecifier()) {
54-
case LoongArchMCExpr::VK_TLS_LE_HI20:
55-
case LoongArchMCExpr::VK_TLS_IE_PC_HI20:
56-
case LoongArchMCExpr::VK_TLS_IE_HI20:
57-
case LoongArchMCExpr::VK_TLS_LD_PC_HI20:
58-
case LoongArchMCExpr::VK_TLS_LD_HI20:
59-
case LoongArchMCExpr::VK_TLS_GD_PC_HI20:
60-
case LoongArchMCExpr::VK_TLS_GD_HI20:
61-
case LoongArchMCExpr::VK_TLS_DESC_PC_HI20:
62-
case LoongArchMCExpr::VK_TLS_DESC_HI20:
63-
case LoongArchMCExpr::VK_TLS_LE_HI20_R:
64-
case LoongArchMCExpr::VK_TLS_LD_PCREL20_S2:
65-
case LoongArchMCExpr::VK_TLS_GD_PCREL20_S2:
66-
case LoongArchMCExpr::VK_TLS_DESC_PCREL20_S2:
54+
case ELF::R_LARCH_TLS_LE_HI20:
55+
case ELF::R_LARCH_TLS_IE_PC_HI20:
56+
case ELF::R_LARCH_TLS_IE_HI20:
57+
case ELF::R_LARCH_TLS_LD_PC_HI20:
58+
case ELF::R_LARCH_TLS_LD_HI20:
59+
case ELF::R_LARCH_TLS_GD_PC_HI20:
60+
case ELF::R_LARCH_TLS_GD_HI20:
61+
case ELF::R_LARCH_TLS_DESC_PC_HI20:
62+
case ELF::R_LARCH_TLS_DESC_HI20:
63+
case ELF::R_LARCH_TLS_LE_HI20_R:
64+
case ELF::R_LARCH_TLS_LD_PCREL20_S2:
65+
case ELF::R_LARCH_TLS_GD_PCREL20_S2:
66+
case ELF::R_LARCH_TLS_DESC_PCREL20_S2:
6767
if (auto *SA = Target.getAddSym())
6868
cast<MCSymbolELF>(SA)->setType(ELF::STT_TLS);
6969
break;

llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp

Lines changed: 15 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -132,175 +132,42 @@ LoongArchMCCodeEmitter::getExprOpValue(const MCInst &MI, const MCOperand &MO,
132132
unsigned FixupKind = LoongArch::fixup_loongarch_invalid;
133133
if (Kind == MCExpr::Target) {
134134
const LoongArchMCExpr *LAExpr = cast<LoongArchMCExpr>(Expr);
135-
135+
FixupKind = LAExpr->getSpecifier();
136136
RelaxCandidate = LAExpr->getRelaxHint();
137-
switch (LAExpr->getSpecifier()) {
137+
switch (uint16_t(LAExpr->getSpecifier())) {
138138
case LoongArchMCExpr::VK_None:
139139
llvm_unreachable("Unhandled fixup kind!");
140-
case LoongArchMCExpr::VK_TLS_LE_ADD_R:
141-
llvm_unreachable("VK_TLS_LE_ADD_R should not represent an "
140+
case ELF::R_LARCH_TLS_LE_ADD_R:
141+
llvm_unreachable("ELF::R_LARCH_TLS_LE_ADD_R should not represent an "
142142
"instruction operand");
143-
case LoongArchMCExpr::VK_B16:
143+
case ELF::R_LARCH_B16:
144144
FixupKind = LoongArch::fixup_loongarch_b16;
145145
break;
146-
case LoongArchMCExpr::VK_B21:
146+
case ELF::R_LARCH_B21:
147147
FixupKind = LoongArch::fixup_loongarch_b21;
148148
break;
149-
case LoongArchMCExpr::VK_B26:
149+
case ELF::R_LARCH_B26:
150150
case LoongArchMCExpr::VK_CALL:
151151
case LoongArchMCExpr::VK_CALL_PLT:
152152
FixupKind = LoongArch::fixup_loongarch_b26;
153153
break;
154-
case LoongArchMCExpr::VK_ABS_HI20:
154+
case ELF::R_LARCH_ABS_HI20:
155155
FixupKind = LoongArch::fixup_loongarch_abs_hi20;
156156
break;
157-
case LoongArchMCExpr::VK_ABS_LO12:
157+
case ELF::R_LARCH_ABS_LO12:
158158
FixupKind = LoongArch::fixup_loongarch_abs_lo12;
159159
break;
160-
case LoongArchMCExpr::VK_ABS64_LO20:
160+
case ELF::R_LARCH_ABS64_LO20:
161161
FixupKind = LoongArch::fixup_loongarch_abs64_lo20;
162162
break;
163-
case LoongArchMCExpr::VK_ABS64_HI12:
163+
case ELF::R_LARCH_ABS64_HI12:
164164
FixupKind = LoongArch::fixup_loongarch_abs64_hi12;
165165
break;
166-
case LoongArchMCExpr::VK_PCALA_HI20:
167-
FixupKind = ELF::R_LARCH_PCALA_HI20;
168-
break;
169-
case LoongArchMCExpr::VK_PCALA_LO12:
170-
FixupKind = ELF::R_LARCH_PCALA_LO12;
171-
break;
172-
case LoongArchMCExpr::VK_PCALA64_LO20:
173-
FixupKind = ELF::R_LARCH_PCALA64_LO20;
174-
break;
175-
case LoongArchMCExpr::VK_PCALA64_HI12:
176-
FixupKind = ELF::R_LARCH_PCALA64_HI12;
177-
break;
178-
case LoongArchMCExpr::VK_GOT_PC_HI20:
179-
FixupKind = ELF::R_LARCH_GOT_PC_HI20;
180-
break;
181-
case LoongArchMCExpr::VK_GOT_PC_LO12:
182-
FixupKind = ELF::R_LARCH_GOT_PC_LO12;
183-
break;
184-
case LoongArchMCExpr::VK_GOT64_PC_LO20:
185-
FixupKind = ELF::R_LARCH_GOT64_PC_LO20;
186-
break;
187-
case LoongArchMCExpr::VK_GOT64_PC_HI12:
188-
FixupKind = ELF::R_LARCH_GOT64_PC_HI12;
189-
break;
190-
case LoongArchMCExpr::VK_GOT_HI20:
191-
FixupKind = ELF::R_LARCH_GOT_HI20;
192-
break;
193-
case LoongArchMCExpr::VK_GOT_LO12:
194-
FixupKind = ELF::R_LARCH_GOT_LO12;
195-
break;
196-
case LoongArchMCExpr::VK_GOT64_LO20:
197-
FixupKind = ELF::R_LARCH_GOT64_LO20;
198-
break;
199-
case LoongArchMCExpr::VK_GOT64_HI12:
200-
FixupKind = ELF::R_LARCH_GOT64_HI12;
201-
break;
202-
case LoongArchMCExpr::VK_TLS_LE_HI20:
203-
FixupKind = ELF::R_LARCH_TLS_LE_HI20;
204-
break;
205-
case LoongArchMCExpr::VK_TLS_LE_LO12:
206-
FixupKind = ELF::R_LARCH_TLS_LE_LO12;
207-
break;
208-
case LoongArchMCExpr::VK_TLS_LE64_LO20:
209-
FixupKind = ELF::R_LARCH_TLS_LE64_LO20;
210-
break;
211-
case LoongArchMCExpr::VK_TLS_LE64_HI12:
212-
FixupKind = ELF::R_LARCH_TLS_LE64_HI12;
213-
break;
214-
case LoongArchMCExpr::VK_TLS_IE_PC_HI20:
215-
FixupKind = ELF::R_LARCH_TLS_IE_PC_HI20;
216-
break;
217-
case LoongArchMCExpr::VK_TLS_IE_PC_LO12:
218-
FixupKind = ELF::R_LARCH_TLS_IE_PC_LO12;
219-
break;
220-
case LoongArchMCExpr::VK_TLS_IE64_PC_LO20:
221-
FixupKind = ELF::R_LARCH_TLS_IE64_PC_LO20;
222-
break;
223-
case LoongArchMCExpr::VK_TLS_IE64_PC_HI12:
224-
FixupKind = ELF::R_LARCH_TLS_IE64_PC_HI12;
225-
break;
226-
case LoongArchMCExpr::VK_TLS_IE_HI20:
227-
FixupKind = ELF::R_LARCH_TLS_IE_HI20;
228-
break;
229-
case LoongArchMCExpr::VK_TLS_IE_LO12:
230-
FixupKind = ELF::R_LARCH_TLS_IE_LO12;
231-
break;
232-
case LoongArchMCExpr::VK_TLS_IE64_LO20:
233-
FixupKind = ELF::R_LARCH_TLS_IE64_LO20;
234-
break;
235-
case LoongArchMCExpr::VK_TLS_IE64_HI12:
236-
FixupKind = ELF::R_LARCH_TLS_IE64_HI12;
237-
break;
238-
case LoongArchMCExpr::VK_TLS_LD_PC_HI20:
239-
FixupKind = ELF::R_LARCH_TLS_LD_PC_HI20;
240-
break;
241-
case LoongArchMCExpr::VK_TLS_LD_HI20:
242-
FixupKind = ELF::R_LARCH_TLS_LD_HI20;
243-
break;
244-
case LoongArchMCExpr::VK_TLS_GD_PC_HI20:
245-
FixupKind = ELF::R_LARCH_TLS_GD_PC_HI20;
246-
break;
247-
case LoongArchMCExpr::VK_TLS_GD_HI20:
248-
FixupKind = ELF::R_LARCH_TLS_GD_HI20;
249-
break;
250-
case LoongArchMCExpr::VK_CALL36:
251-
FixupKind = ELF::R_LARCH_CALL36;
166+
case ELF::R_LARCH_CALL36:
167+
case ELF::R_LARCH_TLS_LE_HI20_R:
168+
case ELF::R_LARCH_TLS_LE_LO12_R:
252169
RelaxCandidate = true;
253170
break;
254-
case LoongArchMCExpr::VK_TLS_DESC_PC_HI20:
255-
FixupKind = ELF::R_LARCH_TLS_DESC_PC_HI20;
256-
break;
257-
case LoongArchMCExpr::VK_TLS_DESC_PC_LO12:
258-
FixupKind = ELF::R_LARCH_TLS_DESC_PC_LO12;
259-
break;
260-
case LoongArchMCExpr::VK_TLS_DESC64_PC_LO20:
261-
FixupKind = ELF::R_LARCH_TLS_DESC64_PC_LO20;
262-
break;
263-
case LoongArchMCExpr::VK_TLS_DESC64_PC_HI12:
264-
FixupKind = ELF::R_LARCH_TLS_DESC64_PC_HI12;
265-
break;
266-
case LoongArchMCExpr::VK_TLS_DESC_HI20:
267-
FixupKind = ELF::R_LARCH_TLS_DESC_HI20;
268-
break;
269-
case LoongArchMCExpr::VK_TLS_DESC_LO12:
270-
FixupKind = ELF::R_LARCH_TLS_DESC_LO12;
271-
break;
272-
case LoongArchMCExpr::VK_TLS_DESC64_LO20:
273-
FixupKind = ELF::R_LARCH_TLS_DESC64_LO20;
274-
break;
275-
case LoongArchMCExpr::VK_TLS_DESC64_HI12:
276-
FixupKind = ELF::R_LARCH_TLS_DESC64_HI12;
277-
break;
278-
case LoongArchMCExpr::VK_TLS_DESC_LD:
279-
FixupKind = ELF::R_LARCH_TLS_DESC_LD;
280-
break;
281-
case LoongArchMCExpr::VK_TLS_DESC_CALL:
282-
FixupKind = ELF::R_LARCH_TLS_DESC_CALL;
283-
break;
284-
case LoongArchMCExpr::VK_TLS_LE_HI20_R:
285-
FixupKind = ELF::R_LARCH_TLS_LE_HI20_R;
286-
RelaxCandidate = true;
287-
break;
288-
case LoongArchMCExpr::VK_TLS_LE_LO12_R:
289-
FixupKind = ELF::R_LARCH_TLS_LE_LO12_R;
290-
RelaxCandidate = true;
291-
break;
292-
case LoongArchMCExpr::VK_PCREL20_S2:
293-
FixupKind = ELF::R_LARCH_PCREL20_S2;
294-
break;
295-
case LoongArchMCExpr::VK_TLS_LD_PCREL20_S2:
296-
FixupKind = ELF::R_LARCH_TLS_LD_PCREL20_S2;
297-
break;
298-
case LoongArchMCExpr::VK_TLS_GD_PCREL20_S2:
299-
FixupKind = ELF::R_LARCH_TLS_GD_PCREL20_S2;
300-
break;
301-
case LoongArchMCExpr::VK_TLS_DESC_PCREL20_S2:
302-
FixupKind = ELF::R_LARCH_TLS_DESC_PCREL20_S2;
303-
break;
304171
}
305172
} else if (Kind == MCExpr::SymbolRef &&
306173
cast<MCSymbolRefExpr>(Expr)->getKind() ==
@@ -385,7 +252,7 @@ void LoongArchMCCodeEmitter::expandAddTPRel(const MCInst &MI,
385252
"Expected expression as third input to TP-relative add");
386253

387254
const LoongArchMCExpr *Expr = dyn_cast<LoongArchMCExpr>(Symbol.getExpr());
388-
assert(Expr && Expr->getSpecifier() == LoongArchMCExpr::VK_TLS_LE_ADD_R &&
255+
assert(Expr && Expr->getSpecifier() == ELF::R_LARCH_TLS_LE_ADD_R &&
389256
"Expected %le_add_r relocation on TP-relative symbol");
390257

391258
// Emit the correct %le_add_r relocation for the symbol.

0 commit comments

Comments
 (0)