Skip to content

Commit d21a96f

Browse files
Revert "WIP fix MCCAS, builds but round trip verification error due to FragType not staying the same after materialization, does it not get saved?"
This reverts commit 36becd8.
1 parent 2b1968f commit d21a96f

File tree

3 files changed

+20
-160
lines changed

3 files changed

+20
-160
lines changed

llvm/include/llvm/MCCAS/MCCASObjectV1.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,3 @@ MCFRAGMENT_NODE_REF(MCCVDefRangeFragment, FT_CVDefRange, mc:cv_def_range)
8585

8686
#undef MCFRAGMENT_NODE_REF
8787
#endif /* MCFRAGMENT_NODE_REF */
88-

llvm/include/llvm/MCCAS/MCCASObjectV1.h

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -418,63 +418,6 @@ class SpecificRef : public MCObjectProxy {
418418
};
419419
#include "llvm/MCCAS/MCCASObjectV1.def"
420420

421-
class MCGenericFragmentRef : public SpecificRef<MCGenericFragmentRef> {
422-
using SpecificRefT = SpecificRef<MCGenericFragmentRef>;
423-
friend class SpecificRef<MCGenericFragmentRef>;
424-
425-
public:
426-
MCGenericFragmentRef(SpecificRefT ST, MCFragment::FragmentType FragType)
427-
: SpecificRef<MCGenericFragmentRef>(ST), FragType(FragType) {}
428-
MCFragment::FragmentType FragType;
429-
static constexpr StringLiteral KindString = "mc:generic_fragment";
430-
static Expected<MCGenericFragmentRef> create(MCCASBuilder &MB,
431-
const MCFragment &Fragment,
432-
unsigned FragmentSize,
433-
ArrayRef<char> FragmentContents);
434-
static Expected<MCGenericFragmentRef> get(Expected<MCObjectProxy> Ref,
435-
MCFragment::FragmentType FragType) {
436-
auto Specific = SpecificRefT::getSpecific(std::move(Ref));
437-
if (!Specific)
438-
return Specific.takeError();
439-
return MCGenericFragmentRef(*Specific, FragType);
440-
}
441-
static Expected<MCGenericFragmentRef> get(const MCSchema &Schema,
442-
cas::ObjectRef ID,
443-
MCFragment::FragmentType FragType) {
444-
return get(Schema.get(ID), FragType);
445-
}
446-
static std::optional<MCGenericFragmentRef> Cast(MCObjectProxy Ref) {
447-
auto Specific = SpecificRefT::Cast(Ref);
448-
if (!Specific)
449-
return std::nullopt;
450-
return MCGenericFragmentRef(*Specific);
451-
}
452-
Expected<uint64_t> materialize(const MCFragment::FragmentType FragType,
453-
MCCASReader &Reader,
454-
raw_ostream *Stream) const;
455-
456-
static Expected<MCGenericFragmentRef>
457-
createGenericAlignFragmentRef(MCCASBuilder &MB, const MCFragment &F,
458-
unsigned FragmentSize,
459-
ArrayRef<char> FragmentContents);
460-
461-
static Expected<MCGenericFragmentRef>
462-
createGenericLEBFragmentRef(MCCASBuilder &MB, const MCFragment &F,
463-
unsigned FragmentSize,
464-
ArrayRef<char> FragmentContents);
465-
466-
Expected<uint64_t>
467-
materializeGenericAlignFragmentRef(MCCASReader &Reader,
468-
raw_ostream *Stream) const;
469-
470-
Expected<uint64_t>
471-
materializeGenericLEBFragmentRef(MCCASReader &Reader,
472-
raw_ostream *Stream) const;
473-
474-
private:
475-
explicit MCGenericFragmentRef(SpecificRefT Ref) : SpecificRefT(Ref) {}
476-
};
477-
478421
class PaddingRef : public SpecificRef<PaddingRef> {
479422
using SpecificRefT = SpecificRef<PaddingRef>;
480423
friend class SpecificRef<PaddingRef>;

llvm/lib/MCCAS/MCCASObjectV1.cpp

Lines changed: 20 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ constexpr StringLiteral PaddingRef::KindString;
4848
#define MCFRAGMENT_NODE_REF(MCFragmentName, MCEnumName, MCEnumIdentifier) \
4949
constexpr StringLiteral MCFragmentName##Ref::KindString;
5050
#include "llvm/MCCAS/MCCASObjectV1.def"
51-
constexpr StringLiteral MCGenericFragmentRef::KindString;
5251
constexpr StringLiteral DebugInfoSectionRef::KindString;
5352

5453
void MCSchema::anchor() {}
@@ -173,7 +172,6 @@ Error MCSchema::fillCache() {
173172
PaddingRef::KindString,
174173
MCAssemblerRef::KindString,
175174
DebugInfoSectionRef::KindString,
176-
MCGenericFragmentRef::KindString,
177175
#define CASV1_SIMPLE_DATA_REF(RefName, IdentifierName) RefName::KindString,
178176
#define CASV1_SIMPLE_GROUP_REF(RefName, IdentifierName) RefName::KindString,
179177
#define MCFRAGMENT_NODE_REF(MCFragmentName, MCEnumName, MCEnumIdentifier) \
@@ -1533,33 +1531,34 @@ Expected<uint64_t> AtomRef::materialize(MCCASReader &Reader,
15331531
return Size;
15341532
}
15351533

1536-
Expected<MCGenericFragmentRef>
1537-
MCGenericFragmentRef::createGenericAlignFragmentRef(
1538-
MCCASBuilder &MB, const MCFragment &F, unsigned FragmentSize,
1539-
ArrayRef<char> FragmentContents) {
1534+
Expected<MCAlignFragmentRef>
1535+
MCAlignFragmentRef::create(MCCASBuilder &MB, const MCAlignFragment &F,
1536+
unsigned FragmentSize,
1537+
ArrayRef<char> FragmentContents) {
15401538
Expected<Builder> B = Builder::startNode(MB.Schema, KindString);
15411539
if (!B)
15421540
return B.takeError();
15431541

1544-
uint64_t Count = FragmentSize / F.getAlignFillLen();
1545-
if (F.hasAlignEmitNops()) {
1542+
uint64_t Count = FragmentSize / F.getFillLen();
1543+
if (F.hasEmitNops()) {
15461544
// Write 0 as size and use backend to emit nop.
15471545
writeVBR8(0, B->Data);
15481546
if (!MB.Asm.getBackend().writeNopData(MB.FragmentOS, Count,
15491547
F.getSubtargetInfo()))
15501548
report_fatal_error("unable to write nop sequence of " + Twine(Count) +
15511549
" bytes");
15521550
B->Data.append(MB.FragmentData);
1553-
return get(B->build(), MCFragment::FT_Align);
1551+
return get(B->build());
15541552
}
15551553
writeVBR8(Count, B->Data);
1556-
writeVBR8(F.getAlignFill(), B->Data);
1557-
writeVBR8(F.getAlignFillLen(), B->Data);
1558-
return get(B->build(), MCFragment::FT_Align);
1554+
writeVBR8(F.getFill(), B->Data);
1555+
writeVBR8(F.getFillLen(), B->Data);
1556+
return get(B->build());
15591557
}
15601558

1561-
Expected<uint64_t> MCGenericFragmentRef::materializeGenericAlignFragmentRef(
1562-
MCCASReader &Reader, raw_ostream *Stream) const {
1559+
Expected<uint64_t> MCAlignFragmentRef::materialize(MCCASReader &Reader,
1560+
raw_ostream *Stream) const
1561+
{
15631562
uint64_t Count;
15641563
auto Remaining = getData();
15651564
auto Endian = Reader.getEndian();
@@ -1687,76 +1686,23 @@ Expected<uint64_t> MCFillFragmentRef::materialize(MCCASReader &Reader,
16871686
return Size;
16881687
}
16891688

1690-
Expected<MCGenericFragmentRef>
1691-
MCGenericFragmentRef::createGenericLEBFragmentRef(
1692-
MCCASBuilder &MB, const MCFragment &F, unsigned FragmentSize,
1693-
ArrayRef<char> FragmentContents) {
1689+
Expected<MCLEBFragmentRef>
1690+
MCLEBFragmentRef::create(MCCASBuilder &MB, const MCLEBFragment &F,
1691+
unsigned FragmentSize,
1692+
ArrayRef<char> FragmentContents) {
16941693
Expected<Builder> B = Builder::startNode(MB.Schema, KindString);
16951694
if (!B)
16961695
return B.takeError();
16971696
llvm::append_range(B->Data, F.getContents());
1698-
return get(B->build(), MCFragment::FT_LEB);
1697+
return get(B->build());
16991698
}
17001699

1701-
Expected<uint64_t> MCGenericFragmentRef::materializeGenericLEBFragmentRef(
1702-
MCCASReader &Reader, raw_ostream *Stream) const {
1700+
Expected<uint64_t> MCLEBFragmentRef::materialize(MCCASReader &Reader,
1701+
raw_ostream *Stream) const {
17031702
*Stream << getData();
17041703
return getData().size();
17051704
}
17061705

1707-
Expected<MCGenericFragmentRef>
1708-
MCGenericFragmentRef::create(MCCASBuilder &MB, const MCFragment &Fragment,
1709-
unsigned int FragmentSize,
1710-
ArrayRef<char> FragmentContents) {
1711-
auto FragType = Fragment.getKind();
1712-
switch (FragType) {
1713-
case MCFragment::FT_Align:
1714-
return createGenericAlignFragmentRef(MB, Fragment, FragmentSize,
1715-
FragmentContents);
1716-
case MCFragment::FT_LEB:
1717-
return createGenericLEBFragmentRef(MB, Fragment, FragmentSize,
1718-
FragmentContents);
1719-
case MCFragment::FT_Relaxable:
1720-
case MCFragment::FT_Data:
1721-
case MCFragment::FT_Dwarf:
1722-
case MCFragment::FT_DwarfFrame: {
1723-
Expected<Builder> B = Builder::startNode(MB.Schema, KindString);
1724-
if (!B)
1725-
return B.takeError();
1726-
B->Data.append(MB.FragmentData);
1727-
B->Data.append(FragmentContents.begin(), FragmentContents.end());
1728-
assert(((MB.FragmentData.empty() && Fragment.getContents().empty()) ||
1729-
(MB.FragmentData.size() + Fragment.getContents().size() ==
1730-
FragmentSize)) &&
1731-
"Size should match");
1732-
return get(B->build(), FragType);
1733-
}
1734-
default:
1735-
llvm_unreachable("Other Fragment Kinds should be handled elsewhere!");
1736-
}
1737-
}
1738-
1739-
Expected<uint64_t>
1740-
MCGenericFragmentRef::materialize(const MCFragment::FragmentType FragType,
1741-
MCCASReader &Reader,
1742-
raw_ostream *Stream) const {
1743-
switch (FragType) {
1744-
case MCFragment::FT_Align:
1745-
return materializeGenericAlignFragmentRef(Reader, Stream);
1746-
case MCFragment::FT_LEB:
1747-
return materializeGenericLEBFragmentRef(Reader, Stream);
1748-
case MCFragment::FT_Relaxable:
1749-
case MCFragment::FT_Data:
1750-
case MCFragment::FT_Dwarf:
1751-
case MCFragment::FT_DwarfFrame: {
1752-
*Stream << getData();
1753-
return getData().size();
1754-
}
1755-
default:
1756-
llvm_unreachable("Other Fragment Kinds should be handled elsewhere!");
1757-
}
1758-
}
1759-
17601706
Expected<MCNopsFragmentRef>
17611707
MCNopsFragmentRef::create(MCCASBuilder &MB, const MCNopsFragment &F,
17621708
unsigned FragmentSize,
@@ -1912,18 +1858,6 @@ Error MCCASBuilder::buildFragment(const MCFragment &F, unsigned Size,
19121858
return Error::success(); \
19131859
}
19141860
#include "llvm/MCCAS/MCCASObjectV1.def"
1915-
case MCFragment::FT_Relaxable:
1916-
case MCFragment::FT_Data:
1917-
case MCFragment::FT_Align:
1918-
case MCFragment::FT_Dwarf:
1919-
case MCFragment::FT_DwarfFrame:
1920-
case MCFragment::FT_LEB: {
1921-
auto GF = MCGenericFragmentRef::create(*this, F, Size, FragmentContents);
1922-
if (!GF)
1923-
return GF.takeError();
1924-
addNode(*GF);
1925-
return Error::success();
1926-
}
19271861
}
19281862
llvm_unreachable("unknown fragment");
19291863
}
@@ -2050,14 +1984,6 @@ Error MCDataFragmentMerger::emitMergedFragments() {
20501984
return E;
20511985
break;
20521986
}
2053-
case MCFragment::FT_Relaxable:
2054-
case MCFragment::FT_Data:
2055-
case MCFragment::FT_Dwarf:
2056-
case MCFragment::FT_DwarfFrame:
2057-
case MCFragment::FT_LEB: {
2058-
FragmentData.append(CandidateContents);
2059-
break;
2060-
}
20611987
default:
20621988
llvm_unreachable("other framgents should not be added");
20631989
}
@@ -2935,11 +2861,6 @@ static ArrayRef<char> getFragmentContents(const MCFragment &Fragment) {
29352861
cast<MCCVInlineLineTableFragment>(Fragment);
29362862
return SF.getContents();
29372863
}
2938-
case MCFragment::FT_Relaxable:
2939-
case MCFragment::FT_Data:
2940-
case MCFragment::FT_Align:
2941-
case MCFragment::FT_Dwarf:
2942-
case MCFragment::FT_DwarfFrame:
29432864
case MCFragment::FT_LEB: {
29442865
return Fragment.getContents();
29452866
}
@@ -3681,9 +3602,6 @@ Expected<uint64_t> MCCASReader::materializeAtom(cas::ObjectRef ID,
36813602
return F->materialize(*Stream);
36823603
if (auto F = MergedFragmentRef::Cast(*Node))
36833604
return F->materialize(*Stream);
3684-
if (auto F = MCGenericFragmentRef::Cast(*Node)) {
3685-
return F->materialize(F->FragType, *this, Stream);
3686-
}
36873605

36883606
return createStringError(inconvertibleErrorCode(),
36893607
"unsupported CAS node for fragment");

0 commit comments

Comments
 (0)