mirror of
https://github.com/intel/llvm.git
synced 2026-01-13 11:02:04 +08:00
MC: Replace FT_PseudoProbe with FT_LEB
The fragment type introduced by https://reviews.llvm.org/D91878 is unnecessary and can be replaced with FT_LEB.
This commit is contained in:
@@ -36,8 +36,6 @@ class MCCVDefRangeFragment;
|
||||
class MCCVInlineLineTableFragment;
|
||||
class MCFragment;
|
||||
class MCFixup;
|
||||
class MCLEBFragment;
|
||||
class MCPseudoProbeAddrFragment;
|
||||
class MCSymbolRefExpr;
|
||||
class raw_ostream;
|
||||
class MCAsmBackend;
|
||||
@@ -123,7 +121,6 @@ private:
|
||||
bool relaxCVInlineLineTable(MCCVInlineLineTableFragment &DF);
|
||||
bool relaxCVDefRange(MCCVDefRangeFragment &DF);
|
||||
bool relaxFill(MCFillFragment &F);
|
||||
bool relaxPseudoProbeAddr(MCPseudoProbeAddrFragment &DF);
|
||||
|
||||
public:
|
||||
/// Construct a new assembler instance.
|
||||
|
||||
@@ -207,7 +207,6 @@ public:
|
||||
FT_SymbolId,
|
||||
FT_CVInlineLines,
|
||||
FT_CVDefRange,
|
||||
FT_PseudoProbe,
|
||||
};
|
||||
|
||||
private:
|
||||
@@ -287,7 +286,6 @@ public:
|
||||
case MCFragment::FT_Dwarf:
|
||||
case MCFragment::FT_DwarfFrame:
|
||||
case MCFragment::FT_LEB:
|
||||
case MCFragment::FT_PseudoProbe:
|
||||
case MCFragment::FT_CVInlineLines:
|
||||
case MCFragment::FT_CVDefRange:
|
||||
return true;
|
||||
@@ -732,22 +730,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class MCPseudoProbeAddrFragment : public MCEncodedFragment {
|
||||
/// The expression for the difference of the two symbols that
|
||||
/// make up the address delta between two .pseudoprobe directives.
|
||||
const MCExpr *AddrDelta;
|
||||
|
||||
public:
|
||||
MCPseudoProbeAddrFragment(const MCExpr *AddrDelta)
|
||||
: MCEncodedFragment(FT_PseudoProbe, false), AddrDelta(AddrDelta) {}
|
||||
|
||||
const MCExpr &getAddrDelta() const { return *AddrDelta; }
|
||||
|
||||
static bool classof(const MCFragment *F) {
|
||||
return F->getKind() == MCFragment::FT_PseudoProbe;
|
||||
}
|
||||
};
|
||||
|
||||
inline MCSection::iterator &MCSection::iterator::operator++() {
|
||||
F = F->Next;
|
||||
return *this;
|
||||
|
||||
@@ -201,7 +201,6 @@ uint64_t MCAssembler::computeFragmentSize(const MCFragment &F) const {
|
||||
case MCFragment::FT_DwarfFrame:
|
||||
case MCFragment::FT_CVInlineLines:
|
||||
case MCFragment::FT_CVDefRange:
|
||||
case MCFragment::FT_PseudoProbe:
|
||||
return F.getSize();
|
||||
case MCFragment::FT_Fill: {
|
||||
auto &FF = cast<MCFillFragment>(F);
|
||||
@@ -424,8 +423,7 @@ static void writeFragment(raw_ostream &OS, const MCAssembler &Asm,
|
||||
case MCFragment::FT_Dwarf:
|
||||
case MCFragment::FT_DwarfFrame:
|
||||
case MCFragment::FT_CVInlineLines:
|
||||
case MCFragment::FT_CVDefRange:
|
||||
case MCFragment::FT_PseudoProbe: {
|
||||
case MCFragment::FT_CVDefRange: {
|
||||
if (F.getKind() == MCFragment::FT_Data)
|
||||
++stats::EmittedDataFragments;
|
||||
else if (F.getKind() == MCFragment::FT_Relaxable)
|
||||
@@ -974,22 +972,6 @@ bool MCAssembler::relaxFill(MCFillFragment &F) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MCAssembler::relaxPseudoProbeAddr(MCPseudoProbeAddrFragment &PF) {
|
||||
uint64_t OldSize = PF.getContents().size();
|
||||
int64_t AddrDelta;
|
||||
bool Abs = PF.getAddrDelta().evaluateKnownAbsolute(AddrDelta, *this);
|
||||
assert(Abs && "We created a pseudo probe with an invalid expression");
|
||||
(void)Abs;
|
||||
SmallVector<char, 8> Data;
|
||||
raw_svector_ostream OSE(Data);
|
||||
|
||||
// AddrDelta is a signed integer
|
||||
encodeSLEB128(AddrDelta, OSE, OldSize);
|
||||
PF.setContents(Data);
|
||||
PF.clearFixups();
|
||||
return OldSize != Data.size();
|
||||
}
|
||||
|
||||
bool MCAssembler::relaxFragment(MCFragment &F) {
|
||||
switch(F.getKind()) {
|
||||
default:
|
||||
@@ -1011,8 +993,6 @@ bool MCAssembler::relaxFragment(MCFragment &F) {
|
||||
return relaxCVDefRange(cast<MCCVDefRangeFragment>(F));
|
||||
case MCFragment::FT_Fill:
|
||||
return relaxFill(cast<MCFillFragment>(F));
|
||||
case MCFragment::FT_PseudoProbe:
|
||||
return relaxPseudoProbeAddr(cast<MCPseudoProbeAddrFragment>(F));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
|
||||
case MCFragment::FT_SymbolId: OS << "SymbolId"; break;
|
||||
case MCFragment::FT_CVInlineLines: OS << "CVInlineLineTable"; break;
|
||||
case MCFragment::FT_CVDefRange: OS << "CVDefRangeTable"; break;
|
||||
case MCFragment::FT_PseudoProbe: OS << "PseudoProbe"; break;
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
@@ -182,12 +181,6 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MCFragment::FT_PseudoProbe: {
|
||||
const auto *OF = cast<MCPseudoProbeAddrFragment>(this);
|
||||
OS << " AddrDelta:";
|
||||
OF->getAddrDelta().print(OS, nullptr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -81,8 +81,9 @@ void MCPseudoProbe::emit(MCObjectStreamer *MCOS,
|
||||
if (AddrDelta->evaluateAsAbsolute(Delta, MCOS->getAssemblerPtr())) {
|
||||
MCOS->emitSLEB128IntValue(Delta);
|
||||
} else {
|
||||
MCOS->insert(MCOS->getContext().allocFragment<MCPseudoProbeAddrFragment>(
|
||||
AddrDelta));
|
||||
auto *F = MCOS->getCurrentFragment();
|
||||
F->makeLEB(true, AddrDelta);
|
||||
MCOS->newFragment();
|
||||
}
|
||||
} else {
|
||||
// Emit the GUID of the split function that the sentinel probe represents.
|
||||
|
||||
Reference in New Issue
Block a user