Go to the documentation of this file.
12 #include "llvm/Config/llvm-config.h"
25 : Begin(Begin), BundleGroupBeforeFirstInst(
false), HasInstructions(
false),
26 IsRegistered(
false), DummyFragment(
this), Name(Name), Variant(V),
41 if (BundleLockNestingDepth == 0) {
44 if (--BundleLockNestingDepth == 0) {
53 BundleLockState = NewState;
55 ++BundleLockNestingDepth;
60 if (Subsection == 0 && SubsectionFragmentMap.empty())
64 SubsectionFragmentMap, std::make_pair(Subsection, (
MCFragment *)
nullptr));
65 bool ExactMatch =
false;
66 if (
MI != SubsectionFragmentMap.end()) {
67 ExactMatch =
MI->first == Subsection;
72 if (
MI == SubsectionFragmentMap.end())
75 IP =
MI->second->getIterator();
76 if (!ExactMatch && Subsection != 0) {
80 SubsectionFragmentMap.insert(
MI, std::make_pair(Subsection,
F));
83 F->setSubsectionNumber(Subsection);
92 PendingLabels.push_back(PendingLabel(label, Subsection));
96 unsigned Subsection) {
97 if (PendingLabels.empty())
102 for (
auto It = PendingLabels.begin(); It != PendingLabels.end(); ++It) {
103 PendingLabel& Label = *It;
104 if (Label.Subsection == Subsection) {
105 Label.Sym->setFragment(
F);
106 Label.Sym->setOffset(FOffset);
107 PendingLabels.
erase(It--);
115 while (!PendingLabels.empty()) {
116 PendingLabel& Label = PendingLabels[0];
126 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
131 OS <<
" Fragments:[\n ";
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds.
This is an optimization pass for GlobalISel generic memory operations.
iterator erase(const_iterator CI)
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
into xmm2 addss xmm2 xmm1 xmm3 addss xmm3 movaps xmm0 unpcklps xmm0 ret seems silly when it could just be one addps Expand libm rounding functions main should enable SSE DAZ mode and other fast SSE modes Think about doing i64 math in SSE regs on x86 This testcase should have no SSE instructions in it
void setBundleLockState(BundleLockStateType NewState)
Context object for machine code objects.
auto lower_bound(R &&Range, T &&Value)
Provide wrappers to std::lower_bound which take ranges instead of having to pass begin/end explicitly...
void addPendingLabel(MCSymbol *label, unsigned Subsection=0)
Add a pending label for the requested subsection.
raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
MCSection::iterator getSubsectionInsertionPoint(unsigned Subsection)
MCSection(SectionVariant V, StringRef Name, SectionKind K, MCSymbol *Begin)
MCSection::FragmentListType & getFragmentList()
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
This class implements an extremely fast bulk output stream that can only output to a stream.
MCSymbol * getEndSymbol(MCContext &Ctx)
virtual StringRef getVirtualSectionKind() const
BundleLockStateType
Express the state of bundle locked groups while emitting code.
StringRef - Represent a constant reference to a string, i.e.
Analysis the ScalarEvolution expression for r is this
MCSymbol * createTempSymbol()
Create a temporary symbol with a unique name.
SectionKind - This is a simple POD value that classifies the properties of a section.
Iterator for intrusive lists based on ilist_node.
void flushPendingLabels()
Associate all pending labels with empty data fragments.
iterator insert(iterator where, pointer New)
bool isInSection() const
isInSection - Check if this symbol is defined in some section (i.e., it is defined but not absolute).
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Fragment for data and encoded instructions.