[NFC][X86] Refine code in X86AsmBackend
Replace pattern getContents().size with universe function call
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
index c2eb78b..26d7856 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
@@ -494,6 +494,23 @@
return false;
}
+/// \returns the fragment size if it has instructions, otherwise returns 0.
+static size_t getSizeForInstFragment(const MCFragment *F) {
+ if (!F)
+ return 0;
+ // MCEncodedFragmentWithContents being templated makes this tricky.
+ switch (F->getKind()) {
+ default:
+ llvm_unreachable("Unknown fragment with instructions!");
+ case MCFragment::FT_Data:
+ return cast<MCDataFragment>(*F).getContents().size();
+ case MCFragment::FT_Relaxable:
+ return cast<MCRelaxableFragment>(*F).getContents().size();
+ case MCFragment::FT_CompactEncodedInst:
+ return cast<MCCompactEncodedInstFragment>(*F).getContents().size();
+ }
+}
+
/// Check if the instruction to be emitted is right after any data.
static bool
isRightAfterData(MCFragment *CurrentFragment,
@@ -503,7 +520,7 @@
// added into the previous fragment, we need to skip them since they
// have no contents.
for (; isa_and_nonnull<MCDataFragment>(F); F = F->getPrevNode())
- if (cast<MCDataFragment>(F)->getContents().size() != 0)
+ if (getSizeForInstFragment(F) != 0)
break;
// Since data is always emitted into a DataFragment, our check strategy is
@@ -518,28 +535,11 @@
// - If the fragment is not a DataFragment, returns false.
if (auto *DF = dyn_cast_or_null<MCDataFragment>(F))
return DF != PrevInstPosition.first ||
- DF->getContents().size() != PrevInstPosition.second;
+ getSizeForInstFragment(DF) != PrevInstPosition.second;
return false;
}
-/// \returns the fragment size if it has instructions, otherwise returns 0.
-static size_t getSizeForInstFragment(const MCFragment *F) {
- if (!F || !F->hasInstructions())
- return 0;
- // MCEncodedFragmentWithContents being templated makes this tricky.
- switch (F->getKind()) {
- default:
- llvm_unreachable("Unknown fragment with instructions!");
- case MCFragment::FT_Data:
- return cast<MCDataFragment>(*F).getContents().size();
- case MCFragment::FT_Relaxable:
- return cast<MCRelaxableFragment>(*F).getContents().size();
- case MCFragment::FT_CompactEncodedInst:
- return cast<MCCompactEncodedInstFragment>(*F).getContents().size();
- }
-}
-
/// Check if the instruction operand needs to be aligned.
bool X86AsmBackend::needAlignInst(const MCInst &Inst) const {
const MCInstrDesc &InstDesc = MCII->get(Inst.getOpcode());
@@ -880,7 +880,7 @@
if (!isFullyRelaxed(RF))
return false;
- const unsigned OldSize = RF.getContents().size();
+ const unsigned OldSize = getSizeForInstFragment(&RF);
if (OldSize == 15)
return false;
@@ -922,7 +922,7 @@
SmallString<15> Code;
raw_svector_ostream VecOS(Code);
Emitter.encodeInstruction(Relaxed, VecOS, Fixups, *RF.getSubtargetInfo());
- const unsigned OldSize = RF.getContents().size();
+ const unsigned OldSize = getSizeForInstFragment(&RF);
const unsigned NewSize = Code.size();
assert(NewSize >= OldSize && "size decrease during relaxation?");
unsigned Delta = NewSize - OldSize;