@@ -196,9 +196,14 @@ uint64_t MCAssembler::computeFragmentSize(const MCFragment &F) const {
196
196
assert (getBackendPtr () && " Requires assembler backend" );
197
197
switch (F.getKind ()) {
198
198
case MCFragment::FT_Data:
199
- return cast<MCDataFragment>(F).getContents ().size ();
200
199
case MCFragment::FT_Relaxable:
201
- return cast<MCRelaxableFragment>(F).getContents ().size ();
200
+ case MCFragment::FT_LEB:
201
+ case MCFragment::FT_Dwarf:
202
+ case MCFragment::FT_DwarfFrame:
203
+ case MCFragment::FT_CVInlineLines:
204
+ case MCFragment::FT_CVDefRange:
205
+ case MCFragment::FT_PseudoProbe:
206
+ return cast<MCEncodedFragment>(F).getContents ().size ();
202
207
case MCFragment::FT_Fill: {
203
208
auto &FF = cast<MCFillFragment>(F);
204
209
int64_t NumValues = 0 ;
@@ -217,9 +222,6 @@ uint64_t MCAssembler::computeFragmentSize(const MCFragment &F) const {
217
222
case MCFragment::FT_Nops:
218
223
return cast<MCNopsFragment>(F).getNumBytes ();
219
224
220
- case MCFragment::FT_LEB:
221
- return cast<MCLEBFragment>(F).getContents ().size ();
222
-
223
225
case MCFragment::FT_BoundaryAlign:
224
226
return cast<MCBoundaryAlignFragment>(F).getSize ();
225
227
@@ -275,17 +277,6 @@ uint64_t MCAssembler::computeFragmentSize(const MCFragment &F) const {
275
277
}
276
278
return Size;
277
279
}
278
-
279
- case MCFragment::FT_Dwarf:
280
- return cast<MCDwarfLineAddrFragment>(F).getContents ().size ();
281
- case MCFragment::FT_DwarfFrame:
282
- return cast<MCDwarfCallFrameFragment>(F).getContents ().size ();
283
- case MCFragment::FT_CVInlineLines:
284
- return cast<MCCVInlineLineTableFragment>(F).getContents ().size ();
285
- case MCFragment::FT_CVDefRange:
286
- return cast<MCCVDefRangeFragment>(F).getContents ().size ();
287
- case MCFragment::FT_PseudoProbe:
288
- return cast<MCPseudoProbeAddrFragment>(F).getContents ().size ();
289
280
}
290
281
291
282
llvm_unreachable (" invalid fragment kind" );
@@ -543,6 +534,22 @@ static void writeFragment(raw_ostream &OS, const MCAssembler &Asm,
543
534
++stats::EmittedFragments;
544
535
545
536
switch (F.getKind ()) {
537
+ case MCFragment::FT_Data:
538
+ case MCFragment::FT_Relaxable:
539
+ case MCFragment::FT_LEB:
540
+ case MCFragment::FT_Dwarf:
541
+ case MCFragment::FT_DwarfFrame:
542
+ case MCFragment::FT_CVInlineLines:
543
+ case MCFragment::FT_CVDefRange:
544
+ case MCFragment::FT_PseudoProbe: {
545
+ if (F.getKind () == MCFragment::FT_Data)
546
+ ++stats::EmittedDataFragments;
547
+ else if (F.getKind () == MCFragment::FT_Relaxable)
548
+ ++stats::EmittedRelaxableFragments;
549
+ const auto &EF = cast<MCEncodedFragment>(F);
550
+ OS << StringRef (EF.getContents ().data (), EF.getContents ().size ());
551
+ break ;
552
+ }
546
553
case MCFragment::FT_Align: {
547
554
++stats::EmittedAlignFragments;
548
555
const MCAlignFragment &AF = cast<MCAlignFragment>(F);
@@ -589,18 +596,6 @@ static void writeFragment(raw_ostream &OS, const MCAssembler &Asm,
589
596
break ;
590
597
}
591
598
592
- case MCFragment::FT_Data:
593
- ++stats::EmittedDataFragments;
594
- OS << StringRef (cast<MCDataFragment>(F).getContents ().data (),
595
- cast<MCDataFragment>(F).getContents ().size ());
596
- break ;
597
-
598
- case MCFragment::FT_Relaxable:
599
- ++stats::EmittedRelaxableFragments;
600
- OS << StringRef (cast<MCRelaxableFragment>(F).getContents ().data (),
601
- cast<MCRelaxableFragment>(F).getContents ().size ());
602
- break ;
603
-
604
599
case MCFragment::FT_Fill: {
605
600
++stats::EmittedFillFragments;
606
601
const MCFillFragment &FF = cast<MCFillFragment>(F);
@@ -676,12 +671,6 @@ static void writeFragment(raw_ostream &OS, const MCAssembler &Asm,
676
671
break ;
677
672
}
678
673
679
- case MCFragment::FT_LEB: {
680
- const MCLEBFragment &LF = cast<MCLEBFragment>(F);
681
- OS << StringRef (LF.getContents ().data (), LF.getContents ().size ());
682
- break ;
683
- }
684
-
685
674
case MCFragment::FT_BoundaryAlign: {
686
675
const MCBoundaryAlignFragment &BF = cast<MCBoundaryAlignFragment>(F);
687
676
if (!Asm.getBackend ().writeNopData (OS, FragmentSize, BF.getSubtargetInfo ()))
@@ -706,31 +695,6 @@ static void writeFragment(raw_ostream &OS, const MCAssembler &Asm,
706
695
break ;
707
696
}
708
697
709
- case MCFragment::FT_Dwarf: {
710
- const MCDwarfLineAddrFragment &OF = cast<MCDwarfLineAddrFragment>(F);
711
- OS << StringRef (OF.getContents ().data (), OF.getContents ().size ());
712
- break ;
713
- }
714
- case MCFragment::FT_DwarfFrame: {
715
- const MCDwarfCallFrameFragment &CF = cast<MCDwarfCallFrameFragment>(F);
716
- OS << StringRef (CF.getContents ().data (), CF.getContents ().size ());
717
- break ;
718
- }
719
- case MCFragment::FT_CVInlineLines: {
720
- const auto &OF = cast<MCCVInlineLineTableFragment>(F);
721
- OS << StringRef (OF.getContents ().data (), OF.getContents ().size ());
722
- break ;
723
- }
724
- case MCFragment::FT_CVDefRange: {
725
- const auto &DRF = cast<MCCVDefRangeFragment>(F);
726
- OS << StringRef (DRF.getContents ().data (), DRF.getContents ().size ());
727
- break ;
728
- }
729
- case MCFragment::FT_PseudoProbe: {
730
- const MCPseudoProbeAddrFragment &PF = cast<MCPseudoProbeAddrFragment>(F);
731
- OS << StringRef (PF.getContents ().data (), PF.getContents ().size ());
732
- break ;
733
- }
734
698
}
735
699
736
700
assert (OS.tell () - Start == FragmentSize &&
0 commit comments