From 706b4fc47bbc608932d3b491ae19a3b9cde9497b Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Fri, 17 Jan 2020 20:45:01 +0000 Subject: Vendor import of llvm-project master e26a78e70, the last commit before the llvmorg-11-init tag, from which release/10.x was branched. --- llvm/lib/MC/MCFragment.cpp | 56 ++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 29 deletions(-) (limited to 'llvm/lib/MC/MCFragment.cpp') diff --git a/llvm/lib/MC/MCFragment.cpp b/llvm/lib/MC/MCFragment.cpp index ae5bd65507bc9..a96b8e86aed3c 100644 --- a/llvm/lib/MC/MCFragment.cpp +++ b/llvm/lib/MC/MCFragment.cpp @@ -232,13 +232,11 @@ uint64_t llvm::computeBundlePadding(const MCAssembler &Assembler, void ilist_alloc_traits::deleteNode(MCFragment *V) { V->destroy(); } -MCFragment::~MCFragment() = default; - MCFragment::MCFragment(FragmentType Kind, bool HasInstructions, MCSection *Parent) - : Kind(Kind), HasInstructions(HasInstructions), LayoutOrder(0), - Parent(Parent), Atom(nullptr), Offset(~UINT64_C(0)) { - if (Parent && !isDummy()) + : Parent(Parent), Atom(nullptr), Offset(~UINT64_C(0)), LayoutOrder(0), + Kind(Kind), HasInstructions(HasInstructions) { + if (Parent && !isa(*this)) Parent->getFragmentList().push_back(this); } @@ -277,8 +275,8 @@ void MCFragment::destroy() { case FT_LEB: delete cast(this); return; - case FT_Padding: - delete cast(this); + case FT_BoundaryAlign: + delete cast(this); return; case FT_SymbolId: delete cast(this); @@ -324,7 +322,7 @@ LLVM_DUMP_METHOD void MCFragment::dump() const { case MCFragment::FT_Dwarf: OS << "MCDwarfFragment"; break; case MCFragment::FT_DwarfFrame: OS << "MCDwarfCallFrameFragment"; break; case MCFragment::FT_LEB: OS << "MCLEBFragment"; break; - case MCFragment::FT_Padding: OS << "MCPaddingFragment"; break; + case MCFragment::FT_BoundaryAlign: OS<<"MCBoundaryAlignFragment"; break; case MCFragment::FT_SymbolId: OS << "MCSymbolIdFragment"; break; case MCFragment::FT_CVInlineLines: OS << "MCCVInlineLineTableFragment"; break; case MCFragment::FT_CVDefRange: OS << "MCCVDefRangeTableFragment"; break; @@ -333,13 +331,13 @@ LLVM_DUMP_METHOD void MCFragment::dump() const { OS << "(this)) + if (const auto *EF = dyn_cast(this)) OS << " BundlePadding:" << static_cast(EF->getBundlePadding()); OS << ">"; switch (getKind()) { case MCFragment::FT_Align: { - const MCAlignFragment *AF = cast(this); + const auto *AF = cast(this); if (AF->hasEmitNops()) OS << " (emit nops)"; OS << "\n "; @@ -349,7 +347,7 @@ LLVM_DUMP_METHOD void MCFragment::dump() const { break; } case MCFragment::FT_Data: { - const MCDataFragment *DF = cast(this); + const auto *DF = cast(this); OS << "\n "; OS << " Contents:["; const SmallVectorImpl &Contents = DF->getContents(); @@ -372,7 +370,7 @@ LLVM_DUMP_METHOD void MCFragment::dump() const { break; } case MCFragment::FT_CompactEncodedInst: { - const MCCompactEncodedInstFragment *CEIF = + const auto *CEIF = cast(this); OS << "\n "; OS << " Contents:["; @@ -385,60 +383,60 @@ LLVM_DUMP_METHOD void MCFragment::dump() const { break; } case MCFragment::FT_Fill: { - const MCFillFragment *FF = cast(this); + const auto *FF = cast(this); OS << " Value:" << static_cast(FF->getValue()) << " ValueSize:" << static_cast(FF->getValueSize()) << " NumValues:" << FF->getNumValues(); break; } case MCFragment::FT_Relaxable: { - const MCRelaxableFragment *F = cast(this); + const auto *F = cast(this); OS << "\n "; OS << " Inst:"; F->getInst().dump_pretty(OS); break; } case MCFragment::FT_Org: { - const MCOrgFragment *OF = cast(this); + const auto *OF = cast(this); OS << "\n "; OS << " Offset:" << OF->getOffset() << " Value:" << static_cast(OF->getValue()); break; } case MCFragment::FT_Dwarf: { - const MCDwarfLineAddrFragment *OF = cast(this); + const auto *OF = cast(this); OS << "\n "; OS << " AddrDelta:" << OF->getAddrDelta() << " LineDelta:" << OF->getLineDelta(); break; } case MCFragment::FT_DwarfFrame: { - const MCDwarfCallFrameFragment *CF = cast(this); + const auto *CF = cast(this); OS << "\n "; OS << " AddrDelta:" << CF->getAddrDelta(); break; } case MCFragment::FT_LEB: { - const MCLEBFragment *LF = cast(this); + const auto *LF = cast(this); OS << "\n "; OS << " Value:" << LF->getValue() << " Signed:" << LF->isSigned(); break; } - case MCFragment::FT_Padding: { - const MCPaddingFragment *F = cast(this); - OS << "\n "; - OS << " PaddingPoliciesMask:" << F->getPaddingPoliciesMask() - << " IsInsertionPoint:" << F->isInsertionPoint() - << " Size:" << F->getSize(); - OS << "\n "; - OS << " Inst:"; - F->getInst().dump_pretty(OS); - OS << " InstSize:" << F->getInstSize(); + case MCFragment::FT_BoundaryAlign: { + const auto *BF = cast(this); + if (BF->canEmitNops()) + OS << " (can emit nops to align"; + if (BF->isFused()) + OS << " fused branch)"; + else + OS << " unfused branch)"; OS << "\n "; + OS << " BoundarySize:" << BF->getAlignment().value() + << " Size:" << BF->getSize(); break; } case MCFragment::FT_SymbolId: { - const MCSymbolIdFragment *F = cast(this); + const auto *F = cast(this); OS << "\n "; OS << " Sym:" << F->getSymbol(); break; -- cgit v1.2.3