@@ -1532,15 +1532,15 @@ Expected<uint64_t> AtomRef::materialize(MCCASReader &Reader,
1532
1532
}
1533
1533
1534
1534
Expected<MCAlignFragmentRef>
1535
- MCAlignFragmentRef::create (MCCASBuilder &MB, const MCAlignFragment &F,
1535
+ MCAlignFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1536
1536
unsigned FragmentSize,
1537
1537
ArrayRef<char > FragmentContents) {
1538
1538
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
1539
1539
if (!B)
1540
1540
return B.takeError ();
1541
1541
1542
- uint64_t Count = FragmentSize / F.getFillLen ();
1543
- if (F.hasEmitNops ()) {
1542
+ uint64_t Count = FragmentSize / F.getAlignFillLen ();
1543
+ if (F.hasAlignEmitNops ()) {
1544
1544
// Write 0 as size and use backend to emit nop.
1545
1545
writeVBR8 (0 , B->Data );
1546
1546
if (!MB.Asm .getBackend ().writeNopData (MB.FragmentOS , Count,
@@ -1551,8 +1551,8 @@ MCAlignFragmentRef::create(MCCASBuilder &MB, const MCAlignFragment &F,
1551
1551
return get (B->build ());
1552
1552
}
1553
1553
writeVBR8 (Count, B->Data );
1554
- writeVBR8 (F.getFill (), B->Data );
1555
- writeVBR8 (F.getFillLen (), B->Data );
1554
+ writeVBR8 (F.getAlignFill (), B->Data );
1555
+ writeVBR8 (F.getAlignFillLen (), B->Data );
1556
1556
return get (B->build ());
1557
1557
}
1558
1558
@@ -1598,9 +1598,10 @@ Expected<uint64_t> MCAlignFragmentRef::materialize(MCCASReader &Reader,
1598
1598
return Count * ValueSize;
1599
1599
}
1600
1600
1601
- Expected<MCBoundaryAlignFragmentRef> MCBoundaryAlignFragmentRef::create (
1602
- MCCASBuilder &MB, const MCBoundaryAlignFragment &F, unsigned FragmentSize,
1603
- ArrayRef<char > FragmentContents) {
1601
+ Expected<MCBoundaryAlignFragmentRef>
1602
+ MCBoundaryAlignFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1603
+ unsigned FragmentSize,
1604
+ ArrayRef<char > FragmentContents) {
1604
1605
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
1605
1606
if (!B)
1606
1607
return B.takeError ();
@@ -1619,9 +1620,10 @@ MCBoundaryAlignFragmentRef::materialize(MCCASReader &Reader,
1619
1620
return getData ().size ();
1620
1621
}
1621
1622
1622
- Expected<MCCVInlineLineTableFragmentRef> MCCVInlineLineTableFragmentRef::create (
1623
- MCCASBuilder &MB, const MCCVInlineLineTableFragment &F,
1624
- unsigned FragmentSize, ArrayRef<char > FragmentContents) {
1623
+ Expected<MCCVInlineLineTableFragmentRef>
1624
+ MCCVInlineLineTableFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1625
+ unsigned FragmentSize,
1626
+ ArrayRef<char > FragmentContents) {
1625
1627
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
1626
1628
if (!B)
1627
1629
return B.takeError ();
@@ -1637,15 +1639,16 @@ MCCVInlineLineTableFragmentRef::materialize(MCCASReader &Reader,
1637
1639
}
1638
1640
1639
1641
Expected<MCFillFragmentRef>
1640
- MCFillFragmentRef::create (MCCASBuilder &MB, const MCFillFragment &F,
1642
+ MCFillFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1641
1643
unsigned FragmentSize,
1642
1644
ArrayRef<char > FragmentContents) {
1645
+ auto *FillFrag = dyn_cast<MCFillFragment>(&F);
1643
1646
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
1644
1647
if (!B)
1645
1648
return B.takeError ();
1646
1649
writeVBR8 (FragmentSize, B->Data );
1647
- writeVBR8 (F. getValue (), B->Data );
1648
- writeVBR8 (F. getValueSize (), B->Data );
1650
+ writeVBR8 (FillFrag-> getValue (), B->Data );
1651
+ writeVBR8 (FillFrag-> getValueSize (), B->Data );
1649
1652
return get (B->build ());
1650
1653
}
1651
1654
@@ -1687,7 +1690,7 @@ Expected<uint64_t> MCFillFragmentRef::materialize(MCCASReader &Reader,
1687
1690
}
1688
1691
1689
1692
Expected<MCLEBFragmentRef>
1690
- MCLEBFragmentRef::create (MCCASBuilder &MB, const MCLEBFragment &F,
1693
+ MCLEBFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1691
1694
unsigned FragmentSize,
1692
1695
ArrayRef<char > FragmentContents) {
1693
1696
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
@@ -1704,14 +1707,15 @@ Expected<uint64_t> MCLEBFragmentRef::materialize(MCCASReader &Reader,
1704
1707
}
1705
1708
1706
1709
Expected<MCNopsFragmentRef>
1707
- MCNopsFragmentRef::create (MCCASBuilder &MB, const MCNopsFragment &F,
1710
+ MCNopsFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1708
1711
unsigned FragmentSize,
1709
1712
ArrayRef<char > FragmentContents) {
1713
+ auto *NopsFrag = dyn_cast<MCNopsFragment>(&F);
1710
1714
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
1711
1715
if (!B)
1712
1716
return B.takeError ();
1713
- int64_t NumBytes = F. getNumBytes ();
1714
- int64_t ControlledNopLength = F. getControlledNopLength ();
1717
+ int64_t NumBytes = NopsFrag-> getNumBytes ();
1718
+ int64_t ControlledNopLength = NopsFrag-> getControlledNopLength ();
1715
1719
int64_t MaximumNopLength =
1716
1720
MB.Asm .getBackend ().getMaximumNopSize (*F.getSubtargetInfo ());
1717
1721
if (ControlledNopLength > MaximumNopLength)
@@ -1740,14 +1744,15 @@ Expected<uint64_t> MCNopsFragmentRef::materialize(MCCASReader &Reader,
1740
1744
}
1741
1745
1742
1746
Expected<MCOrgFragmentRef>
1743
- MCOrgFragmentRef::create (MCCASBuilder &MB, const MCOrgFragment &F,
1747
+ MCOrgFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1744
1748
unsigned FragmentSize,
1745
1749
ArrayRef<char > FragmentContents) {
1750
+ auto *OrgFrag = dyn_cast<MCOrgFragment>(&F);
1746
1751
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
1747
1752
if (!B)
1748
1753
return B.takeError ();
1749
1754
writeVBR8 (FragmentSize, B->Data );
1750
- writeVBR8 ((char )F. getValue (), B->Data );
1755
+ writeVBR8 ((char )OrgFrag-> getValue (), B->Data );
1751
1756
return get (B->build ());
1752
1757
}
1753
1758
@@ -1758,13 +1763,14 @@ Expected<uint64_t> MCOrgFragmentRef::materialize(MCCASReader &Reader,
1758
1763
}
1759
1764
1760
1765
Expected<MCSymbolIdFragmentRef>
1761
- MCSymbolIdFragmentRef::create (MCCASBuilder &MB, const MCSymbolIdFragment &F,
1766
+ MCSymbolIdFragmentRef::create (MCCASBuilder &MB, const MCFragment &F,
1762
1767
unsigned FragmentSize,
1763
1768
ArrayRef<char > FragmentContents) {
1769
+ auto *SymbolIDFrag = dyn_cast<MCSymbolIdFragment>(&F);
1764
1770
Expected<Builder> B = Builder::startNode (MB.Schema , KindString);
1765
1771
if (!B)
1766
1772
return B.takeError ();
1767
- writeVBR8 (F. getSymbol ()->getIndex (), B->Data );
1773
+ writeVBR8 (SymbolIDFrag-> getSymbol ()->getIndex (), B->Data );
1768
1774
return get (B->build ());
1769
1775
}
1770
1776
@@ -1777,7 +1783,7 @@ MCSymbolIdFragmentRef::materialize(MCCASReader &Reader,
1777
1783
1778
1784
#define MCFRAGMENT_NODE_REF (MCFragmentName, MCEnumName, MCEnumIdentifier ) \
1779
1785
Expected<MCFragmentName##Ref> MCFragmentName##Ref::create( \
1780
- MCCASBuilder &MB, const MCFragmentName &F, unsigned FragmentSize, \
1786
+ MCCASBuilder &MB, const MCFragment &F, unsigned FragmentSize, \
1781
1787
ArrayRef<char > FragmentContents) { \
1782
1788
Expected<Builder> B = Builder::startNode (MB.Schema , KindString); \
1783
1789
if (!B) \
@@ -1850,8 +1856,7 @@ Error MCCASBuilder::buildFragment(const MCFragment &F, unsigned Size,
1850
1856
switch (F.getKind ()) {
1851
1857
#define MCFRAGMENT_NODE_REF (MCFragmentName, MCEnumName, MCEnumIdentifier ) \
1852
1858
case MCFragment::MCEnumName: { \
1853
- const MCFragmentName &SF = cast<MCFragmentName>(F); \
1854
- auto FN = MCFragmentName##Ref::create (*this , SF, Size, FragmentContents); \
1859
+ auto FN = MCFragmentName##Ref::create (*this , F, Size, FragmentContents); \
1855
1860
if (!FN) \
1856
1861
return FN.takeError (); \
1857
1862
addNode (*FN); \
@@ -1922,7 +1927,8 @@ Error MCDataFragmentMerger::tryMerge(const MCFragment &F, unsigned Size,
1922
1927
1923
1928
static Error writeAlignFragment (MCCASBuilder &Builder, const MCFragment &AF,
1924
1929
raw_ostream &OS, unsigned FragmentSize) {
1925
- uint64_t Count = FragmentSize / AF.getAlignFillLen ();
1930
+ OS << StringRef (AF.getContents ().data (), AF.getContents ().size ());
1931
+ uint64_t Count = (FragmentSize - AF.getFixedSize ()) / AF.getAlignFillLen ();
1926
1932
if (AF.hasAlignEmitNops ()) {
1927
1933
if (!Builder.Asm .getBackend ().writeNopData (OS, Count,
1928
1934
AF.getSubtargetInfo ()))
@@ -2851,8 +2857,7 @@ static ArrayRef<char> getFragmentContents(const MCFragment &Fragment) {
2851
2857
switch (Fragment.getKind ()) {
2852
2858
#define MCFRAGMENT_NODE_REF (MCFragmentName, MCEnumName, MCEnumIdentifier ) \
2853
2859
case MCFragment::MCEnumName: { \
2854
- const MCFragmentName &SF = cast<MCFragmentName>(Fragment); \
2855
- return SF.getContents (); \
2860
+ return Fragment.getContents (); \
2856
2861
}
2857
2862
#define MCFRAGMENT_ENCODED_FRAGMENT_ONLY
2858
2863
#include " llvm/MCCAS/MCCASObjectV1.def"
0 commit comments