From 6c4dbfeec1e7008294136590b73c3cc29edafbb1 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Fri, 23 Feb 2018 04:59:57 +0000 Subject: [PATCH] [WebAssembly] Move lambda declaration output of loop. NFC. Differential Revision: https://reviews.llvm.org/D43534 llvm-svn: 325857 --- lld/wasm/Writer.cpp | 46 +++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp index 8a8381f75ab1..b176e4480809 100644 --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -759,31 +759,33 @@ void Writer::assignIndexes() { } } + auto HandleRelocs = [&](InputChunk *Chunk) { + if (!Chunk->Live) + return; + ObjFile *File = Chunk->File; + ArrayRef Types = File->getWasmObj()->types(); + for (const WasmRelocation& Reloc : Chunk->getRelocations()) { + if (Reloc.Type == R_WEBASSEMBLY_TABLE_INDEX_I32 || + Reloc.Type == R_WEBASSEMBLY_TABLE_INDEX_SLEB) { + FunctionSymbol *Sym = File->getFunctionSymbol(Reloc.Index); + if (Sym->hasTableIndex() || !Sym->hasOutputIndex()) + continue; + Sym->setTableIndex(TableIndex++); + IndirectFunctions.emplace_back(Sym); + } else if (Reloc.Type == R_WEBASSEMBLY_TYPE_INDEX_LEB) { + File->TypeMap[Reloc.Index] = registerType(Types[Reloc.Index]); + File->TypeIsUsed[Reloc.Index] = true; + } + } + }; + for (ObjFile *File : Symtab->ObjectFiles) { DEBUG(dbgs() << "Handle relocs: " << File->getName() << "\n"); - auto HandleRelocs = [&](InputChunk *Chunk) { - if (!Chunk->Live) - return; - ArrayRef Types = File->getWasmObj()->types(); - for (const WasmRelocation& Reloc : Chunk->getRelocations()) { - if (Reloc.Type == R_WEBASSEMBLY_TABLE_INDEX_I32 || - Reloc.Type == R_WEBASSEMBLY_TABLE_INDEX_SLEB) { - FunctionSymbol *Sym = File->getFunctionSymbol(Reloc.Index); - if (Sym->hasTableIndex() || !Sym->hasOutputIndex()) - continue; - Sym->setTableIndex(TableIndex++); - IndirectFunctions.emplace_back(Sym); - } else if (Reloc.Type == R_WEBASSEMBLY_TYPE_INDEX_LEB) { - Chunk->File->TypeMap[Reloc.Index] = registerType(Types[Reloc.Index]); - Chunk->File->TypeIsUsed[Reloc.Index] = true; - } - } - }; - for (InputFunction* Function : File->Functions) - HandleRelocs(Function); - for (InputSegment* Segment : File->Segments) - HandleRelocs(Segment); + for (InputChunk* Chunk : File->Functions) + HandleRelocs(Chunk); + for (InputChunk* Chunk : File->Segments) + HandleRelocs(Chunk); } }