mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
[MC] Refactor emitELFSize to make usage more consistent. NFC.
Move the cast<MCSymbolELF> inside emitELFSize, so that: - it's done in one place instead of at each call - it's more consistent with similar functions like EmitCOFFSafeSEH - ambiguity between cast<> and dyn_cast<> is avoided (which also eliminates an unnecessary dyn_cast call) This also makes it easier to experiment with using ".size" directives on non-ELF targets. llvm-svn: 288437
This commit is contained in:
parent
e97970a12c
commit
078794f61e
@ -57,7 +57,7 @@ public:
|
||||
void EmitCOFFSymbolType(int Type) override;
|
||||
void EndCOFFSymbolDef() override;
|
||||
|
||||
void emitELFSize(MCSymbolELF *Symbol, const MCExpr *Value) override;
|
||||
void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
|
||||
|
||||
void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment) override;
|
||||
|
@ -477,7 +477,7 @@ public:
|
||||
///
|
||||
/// This corresponds to an assembler statement such as:
|
||||
/// .size symbol, expression
|
||||
virtual void emitELFSize(MCSymbolELF *Symbol, const MCExpr *Value);
|
||||
virtual void emitELFSize(MCSymbol *Symbol, const MCExpr *Value);
|
||||
|
||||
/// \brief Emit a Linker Optimization Hint (LOH) directive.
|
||||
/// \param Args - Arguments of the LOH.
|
||||
|
@ -537,7 +537,7 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
|
||||
|
||||
if (MAI->hasDotTypeDotSizeDirective())
|
||||
// .size foo, 42
|
||||
OutStreamer->emitELFSize(cast<MCSymbolELF>(EmittedInitSym),
|
||||
OutStreamer->emitELFSize(EmittedInitSym,
|
||||
MCConstantExpr::create(Size, OutContext));
|
||||
|
||||
OutStreamer->AddBlankLine();
|
||||
@ -962,8 +962,7 @@ void AsmPrinter::EmitFunctionBody() {
|
||||
const MCExpr *SizeExp = MCBinaryExpr::createSub(
|
||||
MCSymbolRefExpr::create(CurrentFnEnd, OutContext),
|
||||
MCSymbolRefExpr::create(CurrentFnSymForSize, OutContext), OutContext);
|
||||
if (auto Sym = dyn_cast<MCSymbolELF>(CurrentFnSym))
|
||||
OutStreamer->emitELFSize(Sym, SizeExp);
|
||||
OutStreamer->emitELFSize(CurrentFnSym, SizeExp);
|
||||
}
|
||||
|
||||
for (const HandlerInfo &HI : Handlers) {
|
||||
@ -1104,8 +1103,7 @@ void AsmPrinter::emitGlobalIndirectSymbol(Module &M,
|
||||
(!BaseObject || BaseObject->hasPrivateLinkage())) {
|
||||
const DataLayout &DL = M.getDataLayout();
|
||||
uint64_t Size = DL.getTypeAllocSize(GA->getValueType());
|
||||
OutStreamer->emitELFSize(cast<MCSymbolELF>(Name),
|
||||
MCConstantExpr::create(Size, OutContext));
|
||||
OutStreamer->emitELFSize(Name, MCConstantExpr::create(Size, OutContext));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -151,7 +151,7 @@ public:
|
||||
void EmitCOFFSafeSEH(MCSymbol const *Symbol) override;
|
||||
void EmitCOFFSectionIndex(MCSymbol const *Symbol) override;
|
||||
void EmitCOFFSecRel32(MCSymbol const *Symbol) override;
|
||||
void emitELFSize(MCSymbolELF *Symbol, const MCExpr *Value) override;
|
||||
void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
|
||||
void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment) override;
|
||||
|
||||
@ -620,7 +620,7 @@ void MCAsmStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol) {
|
||||
EmitEOL();
|
||||
}
|
||||
|
||||
void MCAsmStreamer::emitELFSize(MCSymbolELF *Symbol, const MCExpr *Value) {
|
||||
void MCAsmStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
|
||||
assert(MAI->hasDotTypeDotSizeDirective());
|
||||
OS << "\t.size\t";
|
||||
Symbol->print(OS, MAI);
|
||||
|
@ -329,8 +329,8 @@ void MCELFStreamer::EmitCommonSymbol(MCSymbol *S, uint64_t Size,
|
||||
->setSize(MCConstantExpr::create(Size, getContext()));
|
||||
}
|
||||
|
||||
void MCELFStreamer::emitELFSize(MCSymbolELF *Symbol, const MCExpr *Value) {
|
||||
Symbol->setSize(Value);
|
||||
void MCELFStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
|
||||
cast<MCSymbolELF>(Symbol)->setSize(Value);
|
||||
}
|
||||
|
||||
void MCELFStreamer::EmitLocalCommonSymbol(MCSymbol *S, uint64_t Size,
|
||||
|
@ -798,7 +798,7 @@ void MCStreamer::EndCOFFSymbolDef() {}
|
||||
void MCStreamer::EmitFileDirective(StringRef Filename) {}
|
||||
void MCStreamer::EmitCOFFSymbolStorageClass(int StorageClass) {}
|
||||
void MCStreamer::EmitCOFFSymbolType(int Type) {}
|
||||
void MCStreamer::emitELFSize(MCSymbolELF *Symbol, const MCExpr *Value) {}
|
||||
void MCStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {}
|
||||
void MCStreamer::EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment) {}
|
||||
void MCStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol,
|
||||
|
@ -153,8 +153,7 @@ void XCoreAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
|
||||
unsigned Size = DL.getTypeAllocSize(C->getType());
|
||||
if (MAI->hasDotTypeDotSizeDirective()) {
|
||||
OutStreamer->EmitSymbolAttribute(GVSym, MCSA_ELF_TypeObject);
|
||||
OutStreamer->emitELFSize(cast<MCSymbolELF>(GVSym),
|
||||
MCConstantExpr::create(Size, OutContext));
|
||||
OutStreamer->emitELFSize(GVSym, MCConstantExpr::create(Size, OutContext));
|
||||
}
|
||||
OutStreamer->EmitLabel(GVSym);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user