Go to the documentation of this file.
13 #ifndef LLVM_MC_MCSECTIONELF_H
14 #define LLVM_MC_MCSECTIONELF_H
57 UniqueID(UniqueID), EntrySize(entrySize), Group(
group, IsComdat),
58 LinkedToSym(LinkedToSym) {
81 const MCExpr *Subsection)
const override;
95 return S->getVariant() ==
SV_ELF;
101 #endif // LLVM_MC_MCSECTIONELF_H
unsigned getUniqueID() const
This is an optimization pass for GlobalISel generic memory operations.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
void printSwitchToSection(const MCAsmInfo &MAI, const Triple &T, raw_ostream &OS, const MCExpr *Subsection) const override
Context object for machine code objects.
This class is intended to be used as a base class for asm properties and features specific to the tar...
const MCSymbolELF * getGroup() const
Triple - Helper class for working with autoconf configuration names.
The instances of the Type class are immutable: once they are created, they are never changed.
This represents a section on linux, lots of unix variants and some bare metal systems.
const MCSymbol * getLinkedToSymbol() const
unsigned getEntrySize() const
MCSection & getSection() const
Get the section associated with a defined, non-absolute symbol.
bb420 i The CBE manages to mtctr r0 r11 stbx r9 addi bdz later b loop This could be much the loop would be a single dispatch group
bool isVirtualSection() const override
Check whether this section is "virtual", that is has no actual object file contents.
This class implements an extremely fast bulk output stream that can only output to a stream.
bool shouldOmitSectionDirective(StringRef Name, const MCAsmInfo &MAI) const
Decides whether a '.section' directive should be printed before the section name.
PointerTy getPointer() const
AMD64 Optimization Manual has some nice information about optimizing integer multiplication by a constant How much of it applies to Intel s X86 implementation There are definite trade offs to xmm0 cvttss2siq rdx jb L3 subss xmm0 rax cvttss2siq rdx xorq rdx rax ret instead of xmm1 cvttss2siq rcx movaps xmm2 subss xmm2 cvttss2siq rax rdx xorq rax ucomiss xmm0 cmovb rax ret Seems like the jb branch has high likelihood of being taken It would have saved a few instructions It s not possible to reference and DH registers in an instruction requiring REX prefix divb and mulb both produce results in AH If isel emits a CopyFromReg which gets turned into a movb and that can be allocated a r8b r15b To get around isel emits a CopyFromReg from AX and then right shift it down by and truncate it It s not pretty but it works We need some register allocation magic to make the hack go which would often require a callee saved register Callees usually need to keep this value live for most of their body so it doesn t add a significant burden on them We currently implement this in however this is suboptimal because it means that it would be quite awkward to implement the optimization for callers A better implementation would be to relax the LLVM IR rules for sret arguments to allow a function with an sret argument to have a non void return type
const MCSection * getLinkedToSection() const
static constexpr unsigned NonUniqueID
unsigned getFlags() const
bool useCodeAlign() const override
Return true if a .align directive should use "optimized nops" to fill instead of 0s.
StringRef - Represent a constant reference to a string, i.e.
void setFlags(unsigned F)
Instances of this class represent a uniqued identifier for a section in the current translation unit.
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
StringRef getVirtualSectionKind() const override
SectionKind - This is a simple POD value that classifies the properties of a section.
static bool classof(const MCSection *S)
PointerIntPair - This class implements a pair of a pointer and small integer.
Base class for the full range of assembler expressions which are needed for parsing.