Skip to content

Commit 0b930de

Browse files
MaskRayAnthony Tran
authored andcommitted
PowerPC: Move PPCMCExpr into PPCMCAsmInfo
to align with targets that have made the transition.
1 parent a708a99 commit 0b930de

File tree

17 files changed

+85
-129
lines changed

17 files changed

+85
-129
lines changed

llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "MCTargetDesc/PPCMCExpr.h"
9+
#include "MCTargetDesc/PPCMCAsmInfo.h"
1010
#include "MCTargetDesc/PPCMCTargetDesc.h"
1111
#include "MCTargetDesc/PPCTargetStreamer.h"
1212
#include "PPCInstrInfo.h"

llvm/lib/Target/PowerPC/MCTargetDesc/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ add_llvm_component_library(LLVMPowerPCDesc
44
PPCMCTargetDesc.cpp
55
PPCMCAsmInfo.cpp
66
PPCMCCodeEmitter.cpp
7-
PPCMCExpr.cpp
87
PPCPredicates.cpp
98
PPCELFObjectWriter.cpp
109
PPCXCOFFObjectWriter.cpp

llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "MCTargetDesc/PPCFixupKinds.h"
10-
#include "MCTargetDesc/PPCMCExpr.h"
10+
#include "MCTargetDesc/PPCMCAsmInfo.h"
1111
#include "MCTargetDesc/PPCMCTargetDesc.h"
1212
#include "llvm/BinaryFormat/ELF.h"
1313
#include "llvm/BinaryFormat/MachO.h"

llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "MCTargetDesc/PPCFixupKinds.h"
10-
#include "MCTargetDesc/PPCMCExpr.h"
10+
#include "MCTargetDesc/PPCMCAsmInfo.h"
1111
#include "MCTargetDesc/PPCMCTargetDesc.h"
1212
#include "llvm/MC/MCContext.h"
1313
#include "llvm/MC/MCELFObjectWriter.h"

llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFStreamer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
//===----------------------------------------------------------------------===//
1919

2020
#include "PPCELFStreamer.h"
21+
#include "PPCMCAsmInfo.h"
2122
#include "PPCMCCodeEmitter.h"
22-
#include "PPCMCExpr.h"
2323
#include "PPCMCTargetDesc.h"
2424
#include "llvm/BinaryFormat/ELF.h"
2525
#include "llvm/MC/MCAsmBackend.h"

llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "MCTargetDesc/PPCInstPrinter.h"
1414
#include "MCTargetDesc/PPCMCTargetDesc.h"
1515
#include "MCTargetDesc/PPCPredicates.h"
16-
#include "PPCMCExpr.h"
16+
#include "PPCMCAsmInfo.h"
1717
#include "llvm/MC/MCAsmInfo.h"
1818
#include "llvm/MC/MCExpr.h"
1919
#include "llvm/MC/MCInst.h"

llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
#include "PPCMCAsmInfo.h"
14-
#include "PPCMCExpr.h"
13+
#include "MCTargetDesc/PPCMCAsmInfo.h"
1514
#include "llvm/MC/MCExpr.h"
1615
#include "llvm/Support/raw_ostream.h"
1716
#include "llvm/TargetParser/Triple.h"
@@ -99,6 +98,66 @@ const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
9998
{PPC::S_U, "u"},
10099
};
101100

101+
static std::optional<int64_t> evaluateAsInt64(uint16_t specifier,
102+
int64_t Value) {
103+
switch (specifier) {
104+
case PPC::S_LO:
105+
return Value & 0xffff;
106+
case PPC::S_HI:
107+
return (Value >> 16) & 0xffff;
108+
case PPC::S_HA:
109+
return ((Value + 0x8000) >> 16) & 0xffff;
110+
case PPC::S_HIGH:
111+
return (Value >> 16) & 0xffff;
112+
case PPC::S_HIGHA:
113+
return ((Value + 0x8000) >> 16) & 0xffff;
114+
case PPC::S_HIGHER:
115+
return (Value >> 32) & 0xffff;
116+
case PPC::S_HIGHERA:
117+
return ((Value + 0x8000) >> 32) & 0xffff;
118+
case PPC::S_HIGHEST:
119+
return (Value >> 48) & 0xffff;
120+
case PPC::S_HIGHESTA:
121+
return ((Value + 0x8000) >> 48) & 0xffff;
122+
default:
123+
return {};
124+
}
125+
}
126+
127+
bool PPC::evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res) {
128+
MCValue Value;
129+
130+
if (!Expr.getSubExpr()->evaluateAsRelocatable(Value, nullptr))
131+
return false;
132+
133+
if (!Value.isAbsolute())
134+
return false;
135+
auto Tmp = evaluateAsInt64(Expr.getSpecifier(), Value.getConstant());
136+
if (!Tmp)
137+
return false;
138+
Res = *Tmp;
139+
return true;
140+
}
141+
142+
static bool evaluateAsRelocatable(const MCSpecifierExpr &Expr, MCValue &Res,
143+
const MCAssembler *Asm) {
144+
if (!Expr.getSubExpr()->evaluateAsRelocatable(Res, Asm))
145+
return false;
146+
147+
// The signedness of the result is dependent on the instruction operand. E.g.
148+
// in addis 3,3,65535@l, 65535@l is signed. In the absence of information at
149+
// parse time (!Asm), disable the folding.
150+
std::optional<int64_t> MaybeInt =
151+
evaluateAsInt64(Expr.getSpecifier(), Res.getConstant());
152+
if (Res.isAbsolute() && MaybeInt) {
153+
Res = MCValue::get(*MaybeInt);
154+
} else {
155+
Res.setSpecifier(Expr.getSpecifier());
156+
}
157+
158+
return true;
159+
}
160+
102161
PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit, const Triple& T) {
103162
// FIXME: This is not always needed. For example, it is not needed in the
104163
// v2 abi.
@@ -146,7 +205,7 @@ void PPCELFMCAsmInfo::printSpecifierExpr(raw_ostream &OS,
146205
bool PPCELFMCAsmInfo::evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr,
147206
MCValue &Res,
148207
const MCAssembler *Asm) const {
149-
return PPC::evaluateAsRelocatableImpl(Expr, Res, Asm);
208+
return evaluateAsRelocatable(Expr, Res, Asm);
150209
}
151210

152211
void PPCXCOFFMCAsmInfo::anchor() {}
@@ -181,5 +240,5 @@ void PPCXCOFFMCAsmInfo::printSpecifierExpr(raw_ostream &OS,
181240

182241
bool PPCXCOFFMCAsmInfo::evaluateAsRelocatableImpl(
183242
const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
184-
return PPC::evaluateAsRelocatableImpl(Expr, Res, Asm);
243+
return evaluateAsRelocatable(Expr, Res, Asm);
185244
}

llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
#include "llvm/MC/MCAsmInfoELF.h"
1717
#include "llvm/MC/MCAsmInfoXCOFF.h"
18+
#include "llvm/MC/MCExpr.h"
19+
#include "llvm/MC/MCValue.h"
1820

1921
namespace llvm {
2022
class Triple;
@@ -123,8 +125,17 @@ enum Specifier {
123125
S_TPREL_LO, // symbol@tprel@l
124126
S_U, // symbol@u
125127
};
128+
129+
bool evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res);
130+
}
131+
132+
namespace PPCMCExpr {
133+
using Specifier = uint16_t;
126134
}
127135

136+
static inline uint16_t getSpecifier(const MCSymbolRefExpr *SRE) {
137+
return SRE->getKind();
138+
}
128139
} // namespace llvm
129140

130141
#endif

llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#include "PPCMCCodeEmitter.h"
1414
#include "MCTargetDesc/PPCFixupKinds.h"
15-
#include "PPCMCExpr.h"
15+
#include "PPCMCAsmInfo.h"
1616
#include "PPCMCTargetDesc.h"
1717
#include "llvm/ADT/SmallVector.h"
1818
#include "llvm/ADT/Statistic.h"

llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp

Lines changed: 0 additions & 77 deletions
This file was deleted.

llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h

Lines changed: 0 additions & 35 deletions
This file was deleted.

llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include "MCTargetDesc/PPCInstPrinter.h"
1515
#include "MCTargetDesc/PPCMCAsmInfo.h"
1616
#include "PPCELFStreamer.h"
17-
#include "PPCMCExpr.h"
17+
#include "PPCMCAsmInfo.h"
1818
#include "PPCTargetStreamer.h"
1919
#include "PPCXCOFFStreamer.h"
2020
#include "TargetInfo/PowerPCTargetInfo.h"

llvm/lib/Target/PowerPC/MCTargetDesc/PPCTargetStreamer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#ifndef LLVM_LIB_TARGET_POWERPC_PPCTARGETSTREAMER_H
1010
#define LLVM_LIB_TARGET_POWERPC_PPCTARGETSTREAMER_H
1111

12-
#include "PPCMCExpr.h"
12+
#include "PPCMCAsmInfo.h"
1313
#include "llvm/ADT/StringRef.h"
1414
#include "llvm/MC/MCExpr.h"
1515
#include "llvm/MC/MCStreamer.h"

llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#include "MCTargetDesc/PPCFixupKinds.h"
1111
#include "MCTargetDesc/PPCMCTargetDesc.h"
12-
#include "PPCMCExpr.h"
12+
#include "PPCMCAsmInfo.h"
1313
#include "llvm/BinaryFormat/XCOFF.h"
1414
#include "llvm/MC/MCFixup.h"
1515
#include "llvm/MC/MCValue.h"

llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
//===----------------------------------------------------------------------===//
1717

1818
#include "MCTargetDesc/PPCInstPrinter.h"
19-
#include "MCTargetDesc/PPCMCExpr.h"
19+
#include "MCTargetDesc/PPCMCAsmInfo.h"
2020
#include "MCTargetDesc/PPCMCTargetDesc.h"
2121
#include "MCTargetDesc/PPCPredicates.h"
2222
#include "MCTargetDesc/PPCTargetStreamer.h"

llvm/lib/Target/PowerPC/PPCMCInstLower.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//
1212
//===----------------------------------------------------------------------===//
1313

14-
#include "MCTargetDesc/PPCMCExpr.h"
14+
#include "MCTargetDesc/PPCMCAsmInfo.h"
1515
#include "PPC.h"
1616
#include "PPCMachineFunctionInfo.h"
1717
#include "PPCSubtarget.h"

llvm/utils/gn/secondary/llvm/lib/Target/PowerPC/MCTargetDesc/BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ static_library("MCTargetDesc") {
5858
"PPCInstPrinter.cpp",
5959
"PPCMCAsmInfo.cpp",
6060
"PPCMCCodeEmitter.cpp",
61-
"PPCMCExpr.cpp",
6261
"PPCMCTargetDesc.cpp",
6362
"PPCPredicates.cpp",
6463
"PPCXCOFFObjectWriter.cpp",

0 commit comments

Comments
 (0)