Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
Make all temporary symbols unnamed.
Browse files Browse the repository at this point in the history
What this does is make all symbols that would otherwise start with a .L
(or L on MachO) unnamed.

Some of these symbols still show up in the symbol table, but we can just
make them unnamed.

In order to make sure we produce identical results when going thought assembly,
all .L (not just the compiler produced ones), are now unnamed.

Running llc on llvm-as.opt.bc, the peak memory usage goes from 208.24MB to
205.57MB.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240130 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
espindola committed Jun 19, 2015
1 parent 4b77d12 commit ec77d9a
Show file tree
Hide file tree
Showing 25 changed files with 125 additions and 130 deletions.
8 changes: 3 additions & 5 deletions include/llvm/MC/MCContext.h
Expand Up @@ -208,8 +208,7 @@ namespace llvm {

MCSymbol *createSymbolImpl(const StringMapEntry<bool> *Name,
bool CanBeUnnamed);
MCSymbol *createSymbol(StringRef Name, bool AlwaysAddSuffix,
bool IsTemporary);
MCSymbol *createSymbol(StringRef Name, bool AlwaysAddSuffix);

MCSymbol *getOrCreateDirectionalLocalSymbol(unsigned LocalLabelVal,
unsigned Instance);
Expand Down Expand Up @@ -249,10 +248,9 @@ namespace llvm {

/// Create and return a new assembler temporary symbol with a unique but
/// unspecified name.
MCSymbol *createTempSymbol(bool CanBeUnnamed = true);
MCSymbol *createTempSymbol();

MCSymbol *createTempSymbol(const Twine &Name, bool AlwaysAddSuffix,
bool CanBeUnnamed = true);
MCSymbol *createTempSymbol(const Twine &Name, bool AlwaysAddSuffix);

/// Create the definition of a directional local symbol for numbered label
/// (used for "1:" definitions).
Expand Down
13 changes: 10 additions & 3 deletions lib/MC/ELFObjectWriter.cpp
Expand Up @@ -786,10 +786,15 @@ void ELFObjectWriter::computeSymbolTable(
Renames.count(&Symbol)))
continue;

if (Symbol.isTemporary() && Symbol.isUndefined())
Ctx.reportFatalError(SMLoc(), "Undefined temporary");

ELFSymbolData MSD;
MSD.Symbol = cast<MCSymbolELF>(&Symbol);

bool Local = Symbol.getBinding() == ELF::STB_LOCAL;
assert(Local || !Symbol.isTemporary());

if (Symbol.isAbsolute()) {
MSD.SectionIndex = ELF::SHN_ABS;
} else if (Symbol.isCommon()) {
Expand Down Expand Up @@ -888,9 +893,11 @@ void ELFObjectWriter::computeSymbolTable(
unsigned Index = FileNames.size() + 1;

for (ELFSymbolData &MSD : LocalSymbolData) {
unsigned StringIndex = MSD.Symbol->getType() == ELF::STT_SECTION
? 0
: StrTabBuilder.getOffset(MSD.Name);
unsigned StringIndex;
if (MSD.Symbol->getType() == ELF::STT_SECTION || MSD.Name.empty())
StringIndex = 0;
else
StringIndex = StrTabBuilder.getOffset(MSD.Name);
MSD.Symbol->setIndex(Index++);
writeSymbol(Writer, StringIndex, MSD, Layout);
}
Expand Down
28 changes: 13 additions & 15 deletions lib/MC/MCContext.cpp
Expand Up @@ -116,7 +116,7 @@ MCSymbol *MCContext::getOrCreateSymbol(const Twine &Name) {

MCSymbol *&Sym = Symbols[NameRef];
if (!Sym)
Sym = createSymbol(NameRef, false, false);
Sym = createSymbol(NameRef, false);

return Sym;
}
Expand Down Expand Up @@ -175,17 +175,16 @@ MCSymbol *MCContext::createSymbolImpl(const StringMapEntry<bool> *Name,
IsTemporary);
}

MCSymbol *MCContext::createSymbol(StringRef Name, bool AlwaysAddSuffix,
bool CanBeUnnamed) {
if (CanBeUnnamed && !UseNamesOnTempLabels)
return createSymbolImpl(nullptr, true);

MCSymbol *MCContext::createSymbol(StringRef Name, bool AlwaysAddSuffix) {
// Determine whether this is an user writter assembler temporary or normal
// label, if used.
bool IsTemporary = CanBeUnnamed;
if (AllowTemporaryLabels && !IsTemporary)
bool IsTemporary = false;
if (AllowTemporaryLabels)
IsTemporary = Name.startswith(MAI->getPrivateGlobalPrefix());

if (IsTemporary && !UseNamesOnTempLabels)
return createSymbolImpl(nullptr, true);

SmallString<128> NewName = Name;
bool AddSuffix = AlwaysAddSuffix;
unsigned &NextUniqueID = NextID[Name];
Expand All @@ -206,21 +205,20 @@ MCSymbol *MCContext::createSymbol(StringRef Name, bool AlwaysAddSuffix,
llvm_unreachable("Infinite loop");
}

MCSymbol *MCContext::createTempSymbol(const Twine &Name, bool AlwaysAddSuffix,
bool CanBeUnnamed) {
MCSymbol *MCContext::createTempSymbol(const Twine &Name, bool AlwaysAddSuffix) {
SmallString<128> NameSV;
raw_svector_ostream(NameSV) << MAI->getPrivateGlobalPrefix() << Name;
return createSymbol(NameSV, AlwaysAddSuffix, CanBeUnnamed);
return createSymbol(NameSV, AlwaysAddSuffix);
}

MCSymbol *MCContext::createLinkerPrivateTempSymbol() {
SmallString<128> NameSV;
raw_svector_ostream(NameSV) << MAI->getLinkerPrivateGlobalPrefix() << "tmp";
return createSymbol(NameSV, true, false);
return createSymbol(NameSV, true);
}

MCSymbol *MCContext::createTempSymbol(bool CanBeUnnamed) {
return createTempSymbol("tmp", true, CanBeUnnamed);
MCSymbol *MCContext::createTempSymbol() {
return createTempSymbol("tmp", true);
}

unsigned MCContext::NextInstance(unsigned LocalLabelVal) {
Expand All @@ -241,7 +239,7 @@ MCSymbol *MCContext::getOrCreateDirectionalLocalSymbol(unsigned LocalLabelVal,
unsigned Instance) {
MCSymbol *&Sym = LocalSymbols[std::make_pair(LocalLabelVal, Instance)];
if (!Sym)
Sym = createTempSymbol(false);
Sym = createTempSymbol();
return Sym;
}

Expand Down
3 changes: 2 additions & 1 deletion lib/MC/MachObjectWriter.cpp
Expand Up @@ -565,7 +565,8 @@ void MachObjectWriter::computeSymbolTable(

MachSymbolData MSD;
MSD.Symbol = &Symbol;
MSD.StringIndex = StringTable.getOffset(Symbol.getName());
StringRef Name = Symbol.getName();
MSD.StringIndex = Name.empty() ? 0 : StringTable.getOffset(Name);

if (Symbol.isAbsolute()) {
MSD.SectionIndex = 0;
Expand Down
4 changes: 2 additions & 2 deletions test/CodeGen/SPARC/obj-relocs.ll
Expand Up @@ -16,8 +16,8 @@
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_ 0x8
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT22 AGlobalVar 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT10 AGlobalVar 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT22 .L.mystr 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT10 .L.mystr 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT22 - 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT10 - 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_WPLT30 bar 0x0
; CHECK-PIC: ]

Expand Down
2 changes: 1 addition & 1 deletion test/MC/ARM/elf-reloc-02.s
Expand Up @@ -22,6 +22,6 @@

// OBJ: Relocations [
// OBJ: Section {{.*}} .rel.text {
// OBJ-NEXT: 0x{{[0-9,A-F]+}} R_ARM_MOVW_ABS_NC .L.str
// OBJ-NEXT: 0x{{[0-9,A-F]+}} R_ARM_MOVW_ABS_NC -
// OBJ: }
// OBJ: ]
4 changes: 2 additions & 2 deletions test/MC/ELF/basic-elf-32.s
Expand Up @@ -46,9 +46,9 @@ main: # @main

// CHECK: Relocations [
// CHECK: Section {{.*}} .rel.text {
// CHECK: 0x6 R_386_32 .L.str1
// CHECK: 0x6 R_386_32 -
// CHECK: 0xB R_386_PC32 puts
// CHECK: 0x12 R_386_32 .L.str2
// CHECK: 0x12 R_386_32 -
// CHECK: 0x17 R_386_PC32 puts
// CHECK: }
// CHECK: ]
Expand Down
21 changes: 18 additions & 3 deletions test/MC/ELF/compression.s
Expand Up @@ -28,9 +28,24 @@

// In x86 32 bit named symbols are used for temporary symbols in merge
// sections, so make sure we handle symbols inside compressed sections
// 386-SYMBOLS: Name: .Linfo_string0
// 386-SYMBOLS-NOT: }
// 386-SYMBOLS: Section: .zdebug_str
// 386-SYMBOLS: Symbol {
// 386-SYMBOLS-NEXT: Name: (0)
// 386-SYMBOLS-NEXT: Value: 0x0
// 386-SYMBOLS-NEXT: Size: 0
// 386-SYMBOLS-NEXT: Binding: Local (0x0)
// 386-SYMBOLS-NEXT: Type: None (0x0)
// 386-SYMBOLS-NEXT: Other: 0
// 386-SYMBOLS-NEXT: Section: Undefined (0x0)
// 386-SYMBOLS-NEXT: }
// 386-SYMBOLS-NEXT: Symbol {
// 386-SYMBOLS-NEXT: Name: (0)
// 386-SYMBOLS-NEXT: Value: 0x0
// 386-SYMBOLS-NEXT: Size: 0
// 386-SYMBOLS-NEXT: Binding: Local (0x0)
// 386-SYMBOLS-NEXT: Type: None (0x0)
// 386-SYMBOLS-NEXT: Other: 0
// 386-SYMBOLS-NEXT: Section: .zdebug_str (0xA)
// 386-SYMBOLS-NEXT: }

.section .debug_line,"",@progbits

Expand Down
6 changes: 3 additions & 3 deletions test/MC/ELF/discriminator.s
Expand Up @@ -19,12 +19,12 @@ foo:
.long .L.debug_abbrev_begin # Offset Into Abbrev. Section
.byte 8 # Address Size (in bytes)
.byte 1 # Abbrev [1] 0xb:0x1b DW_TAG_compile_unit
.long .Linfo_string0 # DW_AT_producer
.long info_string0 # DW_AT_producer
.short 12 # DW_AT_language
.long .Linfo_string1 # DW_AT_name
.long info_string1 # DW_AT_name
.quad 0 # DW_AT_low_pc
.long 0 # DW_AT_stmt_list
.long .Linfo_string2 # DW_AT_comp_dir
.long info_string2 # DW_AT_comp_dir
# DW_AT_APPLE_optimized
.section .debug_abbrev,"",@progbits
.L.debug_abbrev_begin:
Expand Down
4 changes: 2 additions & 2 deletions test/MC/ELF/merge.s
Expand Up @@ -22,9 +22,9 @@ foo:

// CHECK: Relocations [
// CHECK-NEXT: Section {{.*}} .rela.text {
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_PC32 .Lfoo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_PC32 - 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32 .sec1 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32 .Lfoo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32 - 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_PLT32 foo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_GOTPCREL foo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32S zed 0x{{[^ ]+}}
Expand Down
2 changes: 1 addition & 1 deletion test/MC/ELF/relocation-386.s
Expand Up @@ -5,7 +5,7 @@

// CHECK: Relocations [
// CHECK-NEXT: Section {{.*}} .rel.text {
// CHECK-NEXT: 0x2 R_386_GOTOFF .Lfoo 0x0
// CHECK-NEXT: 0x2 R_386_GOTOFF - 0x0
// CHECK-NEXT: 0x{{[^ ]+}} R_386_PLT32 bar2 0x0
// CHECK-NEXT: 0x{{[^ ]+}} R_386_GOTPC _GLOBAL_OFFSET_TABLE_ 0x0
// Relocation 3 (bar3@GOTOFF) is done with symbol 7 (bss)
Expand Down
4 changes: 4 additions & 0 deletions test/MC/ELF/undef-temp.s
@@ -0,0 +1,4 @@
// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o - 2>&1 | FileCheck %s

// CHECK: Undefined temporary
.long .Lfoo
12 changes: 1 addition & 11 deletions test/MC/ELF/undef.s
Expand Up @@ -2,7 +2,6 @@

// Test which symbols should be in the symbol table

.long .Lsym1
.Lsym2:
.Lsym3:
.Lsym4 = .Lsym2 - .Lsym3
Expand Down Expand Up @@ -33,7 +32,7 @@ test2_b = undef + 1
// CHECK-NEXT: Section: Undefined
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: .Lsym8
// CHECK-NEXT: Name: (0)
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
Expand All @@ -42,15 +41,6 @@ test2_b = undef + 1
// CHECK-NEXT: Section: .rodata.str1.1
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: .Lsym1
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: Undefined
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: sym6
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
Expand Down
18 changes: 0 additions & 18 deletions test/MC/ELF/undef2.s

This file was deleted.

2 changes: 1 addition & 1 deletion test/MC/MachO/AArch64/classrefs.s
Expand Up @@ -10,7 +10,7 @@
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: Lbar
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down
2 changes: 1 addition & 1 deletion test/MC/MachO/AArch64/darwin-ARM64-reloc.s
Expand Up @@ -41,7 +41,7 @@ L_.str:
; CHECK-NEXT: PCRel: 1
; CHECK-NEXT: Length: 2
; CHECK-NEXT: Type: ARM64_RELOC_PAGE21 (3)
; CHECK-NEXT: Symbol: L_.str
; CHECK-NEXT: Symbol: -
; CHECK-NEXT: }
; CHECK-NEXT: Relocation {
; CHECK-NEXT: Offset: 0x20
Expand Down
8 changes: 4 additions & 4 deletions test/MC/MachO/AArch64/ld64-workaround.s
Expand Up @@ -11,28 +11,28 @@
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: Llit16
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x10
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: Llit8
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x8
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: Llit4
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x0
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: Lcfstring
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down
8 changes: 4 additions & 4 deletions test/MC/MachO/AArch64/mergeable.s
Expand Up @@ -26,28 +26,28 @@ L1:
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: L1
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x10
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: L1
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x8
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: L0
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x0
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: L0
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
2 changes: 1 addition & 1 deletion test/MC/MachO/AArch64/reloc-crash.s
Expand Up @@ -10,7 +10,7 @@
; CHECK-NEXT: PCRel: 0
; CHECK-NEXT: Length: 3
; CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
; CHECK-NEXT: Symbol: Lbar
; CHECK-NEXT: Symbol: -
; CHECK-NEXT: }
; CHECK-NEXT: }
; CHECK-NEXT: ]
Expand Down
4 changes: 2 additions & 2 deletions test/MC/MachO/x86_64-mergeable.s
Expand Up @@ -24,7 +24,7 @@ L1:
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: L1
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x10
Expand All @@ -38,7 +38,7 @@ L1:
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: L0
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x0
Expand Down

0 comments on commit ec77d9a

Please sign in to comment.