mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-07 12:18:32 +00:00
Print a=b as an assignment.
In assembly the expression a=b is parsed as an assignment, so it should be printed as one. This remove a truly horrible hack for producing a label with "a=.". It would be used by codegen but would never be reached by the asm parser. Sorry I missed this when it was first committed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211639 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -116,8 +116,8 @@ protected:
|
|||||||
/// This is appended to emitted labels. Defaults to ":"
|
/// This is appended to emitted labels. Defaults to ":"
|
||||||
const char *LabelSuffix;
|
const char *LabelSuffix;
|
||||||
|
|
||||||
/// This is appended to emitted labels. Defaults to ":"
|
// Print the EH begin symbol with an assignment. Defaults to false.
|
||||||
const char *DebugLabelSuffix;
|
bool UseAssignmentForEHBegin;
|
||||||
|
|
||||||
/// This prefix is used for globals like constant pool entries that are
|
/// This prefix is used for globals like constant pool entries that are
|
||||||
/// completely private to the .s file and should not have names in the .o
|
/// completely private to the .s file and should not have names in the .o
|
||||||
@@ -415,7 +415,7 @@ public:
|
|||||||
const char *getCommentString() const { return CommentString; }
|
const char *getCommentString() const { return CommentString; }
|
||||||
const char *getLabelSuffix() const { return LabelSuffix; }
|
const char *getLabelSuffix() const { return LabelSuffix; }
|
||||||
|
|
||||||
const char *getDebugLabelSuffix() const { return DebugLabelSuffix; }
|
bool useAssignmentForEHBegin() const { return UseAssignmentForEHBegin; }
|
||||||
const char *getPrivateGlobalPrefix() const { return PrivateGlobalPrefix; }
|
const char *getPrivateGlobalPrefix() const { return PrivateGlobalPrefix; }
|
||||||
bool hasLinkerPrivateGlobalPrefix() const {
|
bool hasLinkerPrivateGlobalPrefix() const {
|
||||||
return LinkerPrivateGlobalPrefix[0] != '\0';
|
return LinkerPrivateGlobalPrefix[0] != '\0';
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ public:
|
|||||||
void ChangeSection(const MCSection *Section,
|
void ChangeSection(const MCSection *Section,
|
||||||
const MCExpr *Subsection) override;
|
const MCExpr *Subsection) override;
|
||||||
void EmitLabel(MCSymbol *Symbol) override;
|
void EmitLabel(MCSymbol *Symbol) override;
|
||||||
void EmitDebugLabel(MCSymbol *Symbol) override;
|
|
||||||
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
||||||
void EmitThumbFunc(MCSymbol *Func) override;
|
void EmitThumbFunc(MCSymbol *Func) override;
|
||||||
void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
|
void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
|
||||||
|
|||||||
@@ -87,7 +87,6 @@ public:
|
|||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
void EmitLabel(MCSymbol *Symbol) override;
|
void EmitLabel(MCSymbol *Symbol) override;
|
||||||
void EmitDebugLabel(MCSymbol *Symbol) override;
|
|
||||||
void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
|
void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
|
||||||
void EmitValueImpl(const MCExpr *Value, unsigned Size,
|
void EmitValueImpl(const MCExpr *Value, unsigned Size,
|
||||||
const SMLoc &Loc = SMLoc()) override;
|
const SMLoc &Loc = SMLoc()) override;
|
||||||
|
|||||||
@@ -393,8 +393,6 @@ public:
|
|||||||
// add the section we're emitting it to later.
|
// add the section we're emitting it to later.
|
||||||
virtual void EmitLabel(MCSymbol *Symbol);
|
virtual void EmitLabel(MCSymbol *Symbol);
|
||||||
|
|
||||||
virtual void EmitDebugLabel(MCSymbol *Symbol);
|
|
||||||
|
|
||||||
virtual void EmitEHSymAttributes(const MCSymbol *Symbol, MCSymbol *EHSymbol);
|
virtual void EmitEHSymAttributes(const MCSymbol *Symbol, MCSymbol *EHSymbol);
|
||||||
|
|
||||||
/// EmitAssemblerFlag - Note in the output the specified @p Flag.
|
/// EmitAssemblerFlag - Note in the output the specified @p Flag.
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ public:
|
|||||||
|
|
||||||
void InitSections() override;
|
void InitSections() override;
|
||||||
void EmitLabel(MCSymbol *Symbol) override;
|
void EmitLabel(MCSymbol *Symbol) override;
|
||||||
void EmitDebugLabel(MCSymbol *Symbol) override;
|
|
||||||
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
||||||
void EmitThumbFunc(MCSymbol *Func) override;
|
void EmitThumbFunc(MCSymbol *Func) override;
|
||||||
bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
|
bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
|
||||||
|
|||||||
@@ -112,9 +112,17 @@ void DwarfCFIException::beginFunction(const MachineFunction *MF) {
|
|||||||
TLOF.getCFIPersonalitySymbol(Per, *Asm->Mang, Asm->TM, MMI);
|
TLOF.getCFIPersonalitySymbol(Per, *Asm->Mang, Asm->TM, MMI);
|
||||||
Asm->OutStreamer.EmitCFIPersonality(Sym, PerEncoding);
|
Asm->OutStreamer.EmitCFIPersonality(Sym, PerEncoding);
|
||||||
|
|
||||||
Asm->OutStreamer.EmitDebugLabel
|
MCSymbol *EHBegin =
|
||||||
(Asm->GetTempSymbol("eh_func_begin",
|
Asm->GetTempSymbol("eh_func_begin", Asm->getFunctionNumber());
|
||||||
Asm->getFunctionNumber()));
|
if (Asm->MAI->useAssignmentForEHBegin()) {
|
||||||
|
MCContext &Ctx = Asm->OutContext;
|
||||||
|
MCSymbol *CurPos = Ctx.CreateTempSymbol();
|
||||||
|
Asm->OutStreamer.EmitLabel(CurPos);
|
||||||
|
Asm->OutStreamer.EmitAssignment(EHBegin,
|
||||||
|
MCSymbolRefExpr::Create(CurPos, Ctx));
|
||||||
|
} else {
|
||||||
|
Asm->OutStreamer.EmitLabel(EHBegin);
|
||||||
|
}
|
||||||
|
|
||||||
// Provide LSDA information.
|
// Provide LSDA information.
|
||||||
if (!shouldEmitLSDA)
|
if (!shouldEmitLSDA)
|
||||||
|
|||||||
@@ -656,9 +656,6 @@ namespace {
|
|||||||
Symbol->setSection(*getCurrentSection().first);
|
Symbol->setSection(*getCurrentSection().first);
|
||||||
markDefined(*Symbol);
|
markDefined(*Symbol);
|
||||||
}
|
}
|
||||||
void EmitDebugLabel(MCSymbol *Symbol) override {
|
|
||||||
EmitLabel(Symbol);
|
|
||||||
}
|
|
||||||
void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override {
|
void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override {
|
||||||
// FIXME: should we handle aliases?
|
// FIXME: should we handle aliases?
|
||||||
markDefined(*Symbol);
|
markDefined(*Symbol);
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ MCAsmInfo::MCAsmInfo() {
|
|||||||
SeparatorString = ";";
|
SeparatorString = ";";
|
||||||
CommentString = "#";
|
CommentString = "#";
|
||||||
LabelSuffix = ":";
|
LabelSuffix = ":";
|
||||||
DebugLabelSuffix = ":";
|
UseAssignmentForEHBegin = false;
|
||||||
PrivateGlobalPrefix = "L";
|
PrivateGlobalPrefix = "L";
|
||||||
LinkerPrivateGlobalPrefix = "";
|
LinkerPrivateGlobalPrefix = "";
|
||||||
InlineAsmStart = "APP";
|
InlineAsmStart = "APP";
|
||||||
|
|||||||
@@ -120,7 +120,6 @@ public:
|
|||||||
|
|
||||||
void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override;
|
void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override;
|
||||||
void EmitLabel(MCSymbol *Symbol) override;
|
void EmitLabel(MCSymbol *Symbol) override;
|
||||||
void EmitDebugLabel(MCSymbol *Symbol) override;
|
|
||||||
|
|
||||||
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
||||||
void EmitLinkerOptions(ArrayRef<std::string> Options) override;
|
void EmitLinkerOptions(ArrayRef<std::string> Options) override;
|
||||||
@@ -334,14 +333,6 @@ void MCAsmStreamer::EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) {
|
|||||||
EmitEOL();
|
EmitEOL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCAsmStreamer::EmitDebugLabel(MCSymbol *Symbol) {
|
|
||||||
assert(Symbol->isUndefined() && "Cannot define a symbol twice!");
|
|
||||||
MCStreamer::EmitDebugLabel(Symbol);
|
|
||||||
|
|
||||||
OS << *Symbol << MAI->getDebugLabelSuffix();
|
|
||||||
EmitEOL();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCAsmStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
void MCAsmStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
||||||
switch (Flag) {
|
switch (Flag) {
|
||||||
case MCAF_SyntaxUnified: OS << "\t.syntax unified"; break;
|
case MCAF_SyntaxUnified: OS << "\t.syntax unified"; break;
|
||||||
|
|||||||
@@ -65,10 +65,6 @@ void MCELFStreamer::EmitLabel(MCSymbol *Symbol) {
|
|||||||
MCELF::SetType(SD, ELF::STT_TLS);
|
MCELF::SetType(SD, ELF::STT_TLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCELFStreamer::EmitDebugLabel(MCSymbol *Symbol) {
|
|
||||||
EmitLabel(Symbol);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCELFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
void MCELFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
||||||
// Let the target do whatever target specific stuff it needs to do.
|
// Let the target do whatever target specific stuff it needs to do.
|
||||||
getAssembler().getBackend().handleAssemblerFlag(Flag);
|
getAssembler().getBackend().handleAssemblerFlag(Flag);
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ public:
|
|||||||
|
|
||||||
void ChangeSection(const MCSection *Sect, const MCExpr *Subsect) override;
|
void ChangeSection(const MCSection *Sect, const MCExpr *Subsect) override;
|
||||||
void EmitLabel(MCSymbol *Symbol) override;
|
void EmitLabel(MCSymbol *Symbol) override;
|
||||||
void EmitDebugLabel(MCSymbol *Symbol) override;
|
|
||||||
void EmitEHSymAttributes(const MCSymbol *Symbol, MCSymbol *EHSymbol) override;
|
void EmitEHSymAttributes(const MCSymbol *Symbol, MCSymbol *EHSymbol) override;
|
||||||
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
|
||||||
void EmitLinkerOptions(ArrayRef<std::string> Options) override;
|
void EmitLinkerOptions(ArrayRef<std::string> Options) override;
|
||||||
@@ -162,9 +161,6 @@ void MCMachOStreamer::EmitLabel(MCSymbol *Symbol) {
|
|||||||
SD.setFlags(SD.getFlags() & ~SF_ReferenceTypeMask);
|
SD.setFlags(SD.getFlags() & ~SF_ReferenceTypeMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCMachOStreamer::EmitDebugLabel(MCSymbol *Symbol) {
|
|
||||||
EmitLabel(Symbol);
|
|
||||||
}
|
|
||||||
void MCMachOStreamer::EmitDataRegion(DataRegionData::KindTy Kind) {
|
void MCMachOStreamer::EmitDataRegion(DataRegionData::KindTy Kind) {
|
||||||
if (!getAssembler().getBackend().hasDataInCodeSupport())
|
if (!getAssembler().getBackend().hasDataInCodeSupport())
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -33,9 +33,6 @@ namespace {
|
|||||||
assert(getCurrentSection().first &&"Cannot emit before setting section!");
|
assert(getCurrentSection().first &&"Cannot emit before setting section!");
|
||||||
AssignSection(Symbol, getCurrentSection().first);
|
AssignSection(Symbol, getCurrentSection().first);
|
||||||
}
|
}
|
||||||
void EmitDebugLabel(MCSymbol *Symbol) override {
|
|
||||||
EmitLabel(Symbol);
|
|
||||||
}
|
|
||||||
void EmitAssemblerFlag(MCAssemblerFlag Flag) override {}
|
void EmitAssemblerFlag(MCAssemblerFlag Flag) override {}
|
||||||
void EmitThumbFunc(MCSymbol *Func) override {}
|
void EmitThumbFunc(MCSymbol *Func) override {}
|
||||||
|
|
||||||
|
|||||||
@@ -158,10 +158,6 @@ void MCObjectStreamer::EmitLabel(MCSymbol *Symbol) {
|
|||||||
SD.setOffset(F->getContents().size());
|
SD.setOffset(F->getContents().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCObjectStreamer::EmitDebugLabel(MCSymbol *Symbol) {
|
|
||||||
EmitLabel(Symbol);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCObjectStreamer::EmitULEB128Value(const MCExpr *Value) {
|
void MCObjectStreamer::EmitULEB128Value(const MCExpr *Value) {
|
||||||
int64_t IntValue;
|
int64_t IntValue;
|
||||||
if (Value->EvaluateAsAbsolute(IntValue, getAssembler())) {
|
if (Value->EvaluateAsAbsolute(IntValue, getAssembler())) {
|
||||||
|
|||||||
@@ -239,12 +239,6 @@ void MCStreamer::EmitLabel(MCSymbol *Symbol) {
|
|||||||
TS->emitLabel(Symbol);
|
TS->emitLabel(Symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCStreamer::EmitDebugLabel(MCSymbol *Symbol) {
|
|
||||||
assert(!Symbol->isVariable() && "Cannot emit a variable symbol!");
|
|
||||||
assert(getCurrentSection().first && "Cannot emit before setting section!");
|
|
||||||
AssignSection(Symbol, getCurrentSection().first);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCStreamer::EmitCompactUnwindEncoding(uint32_t CompactUnwindEncoding) {
|
void MCStreamer::EmitCompactUnwindEncoding(uint32_t CompactUnwindEncoding) {
|
||||||
EnsureValidFrame();
|
EnsureValidFrame();
|
||||||
MCDwarfFrameInfo *CurFrame = getCurrentFrameInfo();
|
MCDwarfFrameInfo *CurFrame = getCurrentFrameInfo();
|
||||||
|
|||||||
@@ -82,10 +82,6 @@ void MCWinCOFFStreamer::EmitLabel(MCSymbol *Symbol) {
|
|||||||
MCObjectStreamer::EmitLabel(Symbol);
|
MCObjectStreamer::EmitLabel(Symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCWinCOFFStreamer::EmitDebugLabel(MCSymbol *Symbol) {
|
|
||||||
EmitLabel(Symbol);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCWinCOFFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
void MCWinCOFFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
||||||
llvm_unreachable("not implemented");
|
llvm_unreachable("not implemented");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ MipsMCAsmInfo::MipsMCAsmInfo(StringRef TT) {
|
|||||||
ZeroDirective = "\t.space\t";
|
ZeroDirective = "\t.space\t";
|
||||||
GPRel32Directive = "\t.gpword\t";
|
GPRel32Directive = "\t.gpword\t";
|
||||||
GPRel64Directive = "\t.gpdword\t";
|
GPRel64Directive = "\t.gpdword\t";
|
||||||
DebugLabelSuffix = "=.";
|
UseAssignmentForEHBegin = true;
|
||||||
SupportsDebugInformation = true;
|
SupportsDebugInformation = true;
|
||||||
ExceptionsType = ExceptionHandling::DwarfCFI;
|
ExceptionsType = ExceptionHandling::DwarfCFI;
|
||||||
HasLEB128 = true;
|
HasLEB128 = true;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
; RUN: llc -march=mipsel -mcpu=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=16
|
; RUN: llc -march=mipsel -mcpu=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=16
|
||||||
|
|
||||||
;16: $eh_func_begin0=.
|
;16: .cfi_personality
|
||||||
|
;16-NEXT: [[TMP:.*]]:
|
||||||
|
;16-NEXT: $eh_func_begin0 = ([[TMP]])
|
||||||
@.str = private unnamed_addr constant [7 x i8] c"hello\0A\00", align 1
|
@.str = private unnamed_addr constant [7 x i8] c"hello\0A\00", align 1
|
||||||
@_ZTIi = external constant i8*
|
@_ZTIi = external constant i8*
|
||||||
@.str1 = private unnamed_addr constant [15 x i8] c"exception %i \0A\00", align 1
|
@.str1 = private unnamed_addr constant [15 x i8] c"exception %i \0A\00", align 1
|
||||||
|
|||||||
Reference in New Issue
Block a user