Go to the documentation of this file.
27 if (CurrentSection !=
nullptr)
36 Streamer.
emitValue(Entry.Value, Entry.Size, Entry.Loc);
45 if (CurrentSection ==
nullptr)
53 auto Itr =
C ? CachedEntries.find(
C->getValue()) : CachedEntries.end();
54 if (Itr != CachedEntries.end())
71 CachedEntries[
C->getValue()] = SymRef;
78 CurrentSection =
nullptr;
79 CachedEntries.clear();
87 const MCExpr *AdjustExpr) {
91 const MCExpr *OrigExpr = Expr;
93 if (
const CSKYMCExpr *CE = dyn_cast<CSKYMCExpr>(Expr)) {
94 Expr = CE->getSubExpr();
95 ELFRefKind = CE->getKind();
99 const MCSymbol *Sym = &SymExpr->getSymbol();
134 void CSKYTargetAsmStreamer::emitAttribute(
unsigned Attribute,
unsigned Value) {
138 void CSKYTargetAsmStreamer::emitTextAttribute(
unsigned Attribute,
140 OS <<
"\t.csky_attribute\t" <<
Attribute <<
", \"" <<
String <<
"\"\n";
143 void CSKYTargetAsmStreamer::finishAttributeSection() {}
MCStreamer & getStreamer()
virtual void emitDataRegion(MCDataRegionType Kind)
Note in the output the specified region Kind.
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 ...
CSKYTargetStreamer(MCStreamer &S)
void emitCurrentConstantPool()
void emitValue(const MCExpr *Value, unsigned Size, SMLoc Loc=SMLoc())
static const CSKYMCExpr * create(const MCExpr *Expr, VariantKind Kind, MCContext &Ctx)
void emitAll(MCStreamer &Streamer)
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
Streaming machine code generation interface.
@ MCDR_DataRegion
.data_region
Represents a location in source code.
const MCExpr * addEntry(MCStreamer &Streamer, const MCExpr *Value, unsigned Size, SMLoc Loc, const MCExpr *AdjustExpr)
(vector float) vec_cmpeq(*A, *B) C
virtual void emitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc())
Emit a label for Symbol into the current section.
virtual void switchSection(MCSection *Section, const MCExpr *Subsection=nullptr)
Set the current section where code is being emitted to Section.
VariantKind getKind() const
Target specific streamer interface.
MCSection * getCurrentSectionOnly() const
const MCSubtargetInfo * getSubtargetInfo() const
virtual void emitTextAttribute(unsigned Attribute, StringRef String)
static const MCBinaryExpr * createSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
const MCExpr * getSubExpr() const
Represent a reference to a symbol from inside an expression.
StringRef - Represent a constant reference to a string, i.e.
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
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
const MCExpr * addConstantPoolEntry(const MCExpr *, SMLoc Loc, const MCExpr *AdjustExpr=nullptr)
Add a new entry to the constant pool for the current section and return an MCExpr that can be used to...
virtual void emitAttribute(unsigned Attribute, unsigned Value)
const MCExpr * addEntry(const MCExpr *Value, MCContext &Context, unsigned Size, SMLoc Loc)
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
DenseMap< SymbolIndex, const MCExpr * > ConstantMap
MCContext & getContext() const
virtual void finishAttributeSection()
virtual void emitCodeAlignment(unsigned ByteAlignment, const MCSubtargetInfo *STI, unsigned MaxBytesToEmit=0)
Emit nops until the byte alignment ByteAlignment is reached.
@ MCDR_DataRegionEnd
.end_data_region
Generic base class for all target subtargets.
LLVM Value Representation.
Base class for the full range of assembler expressions which are needed for parsing.
virtual void emitTargetAttributes(const MCSubtargetInfo &STI)