Go to the documentation of this file.
28 cl::desc(
"Add .note.gnu.property with BTI to assembly files"),
44 return ConstantPools->addEntry(
Streamer, Expr, Size, Loc);
48 ConstantPools->emitForCurrentSection(
Streamer);
75 "The .note.gnu.property is not emitted because it is already present.");
104 for (
char &
C : Buffer) {
116 if (TT.isOSBinFormatELF())
118 if (TT.isOSBinFormatCOFF())
MCStreamer & getStreamer()
This is an optimization pass for GlobalISel generic memory operations.
Context object for machine code objects.
void emitNoteSection(unsigned Flags)
Callback used to implement the .note.gnu.property section.
Triple - Helper class for working with autoconf configuration names.
virtual void emitInst(uint32_t Inst)
Callback used to implement the .inst directive.
This represents a section on linux, lots of unix variants and some bare metal systems.
Common register allocation spilling lr str ldr sxth r3 ldr mla r4 can lr mov lr str ldr sxth r3 mla r4 and then merge mul and lr str ldr sxth r3 mla r4 It also increase the likelihood the store may become dead bb27 Successors according to LLVM ID Predecessors according to mbb< bb27, 0x8b0a7c0 > Note ADDri is not a two address instruction its result reg1037 is an operand of the PHI node in bb76 and its operand reg1039 is the result of the PHI node We should treat it as a two address code and make sure the ADDri is scheduled after any node that reads reg1039 Use info(i.e. register scavenger) to assign it a free register to allow reuse the collector could move the objects and invalidate the derived pointer This is bad enough in the first but safe points can crop up unpredictably **array_addr i32 n y store obj * new
MCTargetStreamer * createAArch64ObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
Streaming machine code generation interface.
AArch64TargetStreamer(MCStreamer &S)
Represents a location in source code.
(vector float) vec_cmpeq(*A, *B) C
const Triple & getTargetTriple() const
virtual void switchSection(MCSection *Section, const MCExpr *Subsection=nullptr)
Set the current section where code is being emitted to Section.
Target specific streamer interface.
MCSection * getCurrentSectionOnly() const
MCSymbol * endSection(MCSection *Section)
MCTargetStreamer * createAArch64NullTargetStreamer(MCStreamer &S)
initializer< Ty > init(const Ty &Val)
virtual void emitIntValue(uint64_t Value, unsigned Size)
Special case of EmitValue that avoids the client having to pass in a MCExpr for constant integers.
StringRef - Represent a constant reference to a string, i.e.
~AArch64TargetStreamer() override
Instances of this class represent a uniqued identifier for a section in the current translation unit.
virtual void emitValueToAlignment(Align Alignment, int64_t Value=0, unsigned ValueSize=1, unsigned MaxBytesToEmit=0)
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
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
void emitConstantPools() override
@ GNU_PROPERTY_AARCH64_FEATURE_1_AND
bool isRegistered() const
const MCExpr * addConstantPoolEntry(const MCExpr *, unsigned Size, SMLoc Loc)
Callback used to implement the ldr= pseudo.
MCContext & getContext() const
static cl::opt< bool > MarkBTIProperty("aarch64-mark-bti-property", cl::Hidden, cl::desc("Add .note.gnu.property with BTI to assembly files"), cl::init(false))
virtual void emitBytes(StringRef Data)
Emit the bytes in Data into the output.
@ GNU_PROPERTY_AARCH64_FEATURE_1_BTI
Generic base class for all target subtargets.
Base class for the full range of assembler expressions which are needed for parsing.
void emitCurrentConstantPool()
Callback used to implement the .ltorg directive.