diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-16 19:46:52 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-16 19:46:52 +0000 |
commit | 6b3f41ed88e8e440e11a4fbf20b6600529f80049 (patch) | |
tree | 928b056f24a634d628c80238dbbf10d41b1a71d5 /tools | |
parent | c46e6a5940c50058e00c0c5f9123fd82e338d29a (diff) |
Diffstat (limited to 'tools')
-rw-r--r-- | tools/bugpoint/ExtractFunction.cpp | 3 | ||||
-rw-r--r-- | tools/llc/llc.cpp | 2 | ||||
-rw-r--r-- | tools/lli/RemoteJITUtils.h | 5 | ||||
-rw-r--r-- | tools/llvm-ar/llvm-ar.cpp | 2 | ||||
-rw-r--r-- | tools/llvm-pdbdump/LLVMOutputStyle.cpp | 2 | ||||
-rw-r--r-- | tools/llvm-pdbdump/PrettyCompilandDumper.cpp | 12 | ||||
-rw-r--r-- | tools/llvm-pdbdump/PrettyFunctionDumper.cpp | 10 | ||||
-rw-r--r-- | tools/llvm-pdbdump/llvm-pdbdump.cpp | 102 | ||||
-rw-r--r-- | tools/llvm-pdbdump/llvm-pdbdump.h | 23 | ||||
-rw-r--r-- | tools/llvm-readobj/COFFDumper.cpp | 8 | ||||
-rw-r--r-- | tools/llvm-readobj/llvm-readobj.cpp | 21 | ||||
-rw-r--r-- | tools/llvm-rtdyld/llvm-rtdyld.cpp | 3 | ||||
-rw-r--r-- | tools/obj2yaml/wasm2yaml.cpp | 63 | ||||
-rw-r--r-- | tools/opt/opt.cpp | 4 | ||||
-rw-r--r-- | tools/yaml2obj/yaml2wasm.cpp | 11 |
15 files changed, 207 insertions, 64 deletions
diff --git a/tools/bugpoint/ExtractFunction.cpp b/tools/bugpoint/ExtractFunction.cpp index 82c61b6e1be7..72872e83f792 100644 --- a/tools/bugpoint/ExtractFunction.cpp +++ b/tools/bugpoint/ExtractFunction.cpp @@ -232,8 +232,7 @@ static Constant *GetTorInit(std::vector<std::pair<Function *, int>> &TorList) { std::vector<Constant *> ArrayElts; Type *Int32Ty = Type::getInt32Ty(TorList[0].first->getContext()); - StructType *STy = - StructType::get(Int32Ty, TorList[0].first->getType(), nullptr); + StructType *STy = StructType::get(Int32Ty, TorList[0].first->getType()); for (unsigned i = 0, e = TorList.size(); i != e; ++i) { Constant *Elts[] = {ConstantInt::get(Int32Ty, TorList[i].second), TorList[i].first}; diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index 7c81abaed755..8c786950036f 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -301,6 +301,8 @@ int main(int argc, char **argv) { initializeConstantHoistingLegacyPassPass(*Registry); initializeScalarOpts(*Registry); initializeVectorization(*Registry); + initializeScalarizeMaskedMemIntrinPass(*Registry); + initializeExpandReductionsPass(*Registry); // Register the target printer for --version. cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion); diff --git a/tools/lli/RemoteJITUtils.h b/tools/lli/RemoteJITUtils.h index 89a514202567..3c82f73ff072 100644 --- a/tools/lli/RemoteJITUtils.h +++ b/tools/lli/RemoteJITUtils.h @@ -118,9 +118,8 @@ public: MemMgr->registerEHFrames(Addr, LoadAddr, Size); } - void deregisterEHFrames(uint8_t *Addr, uint64_t LoadAddr, - size_t Size) override { - MemMgr->deregisterEHFrames(Addr, LoadAddr, Size); + void deregisterEHFrames() override { + MemMgr->deregisterEHFrames(); } bool finalizeMemory(std::string *ErrMsg = nullptr) override { diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index 1519464521dd..3de260410bd9 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -16,7 +16,7 @@ #include "llvm/ADT/Triple.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" -#include "llvm/LibDriver/LibDriver.h" +#include "llvm/ToolDrivers/llvm-lib/LibDriver.h" #include "llvm/Object/Archive.h" #include "llvm/Object/ArchiveWriter.h" #include "llvm/Object/MachO.h" diff --git a/tools/llvm-pdbdump/LLVMOutputStyle.cpp b/tools/llvm-pdbdump/LLVMOutputStyle.cpp index 2dd4ef0fb30d..e975a5220af6 100644 --- a/tools/llvm-pdbdump/LLVMOutputStyle.cpp +++ b/tools/llvm-pdbdump/LLVMOutputStyle.cpp @@ -180,7 +180,7 @@ private: CompactTypeDumpVisitor CTDV(DB, Index, &P); CVTypeVisitor Visitor(CTDV); DictScope D(P, Label); - if (DB.containsTypeIndex(Index)) { + if (DB.contains(Index)) { CVType &Type = DB.getTypeRecord(Index); if (auto EC = Visitor.visitTypeRecord(Type)) return EC; diff --git a/tools/llvm-pdbdump/PrettyCompilandDumper.cpp b/tools/llvm-pdbdump/PrettyCompilandDumper.cpp index 6257313e3e1a..9cf7bf82a164 100644 --- a/tools/llvm-pdbdump/PrettyCompilandDumper.cpp +++ b/tools/llvm-pdbdump/PrettyCompilandDumper.cpp @@ -115,6 +115,8 @@ void CompilandDumper::start(const PDBSymbolCompiland &Symbol, } void CompilandDumper::dump(const PDBSymbolData &Symbol) { + if (!shouldDumpSymLevel(opts::pretty::SymLevel::Data)) + return; if (Printer.IsSymbolExcluded(Symbol.getName())) return; @@ -125,11 +127,17 @@ void CompilandDumper::dump(const PDBSymbolData &Symbol) { Printer << "data: "; WithColor(Printer, PDB_ColorItem::Address).get() << "[" << format_hex(Symbol.getVirtualAddress(), 10) << "]"; + + WithColor(Printer, PDB_ColorItem::Comment).get() + << " [sizeof = " << getTypeLength(Symbol) << "]"; + break; case PDB_LocType::Constant: Printer << "constant: "; WithColor(Printer, PDB_ColorItem::LiteralValue).get() << "[" << Symbol.getValue() << "]"; + WithColor(Printer, PDB_ColorItem::Comment).get() + << " [sizeof = " << getTypeLength(Symbol) << "]"; break; default: Printer << "data(unexpected type=" << LocType << ")"; @@ -140,6 +148,8 @@ void CompilandDumper::dump(const PDBSymbolData &Symbol) { } void CompilandDumper::dump(const PDBSymbolFunc &Symbol) { + if (!shouldDumpSymLevel(opts::pretty::SymLevel::Functions)) + return; if (Symbol.getLength() == 0) return; if (Printer.IsSymbolExcluded(Symbol.getName())) @@ -162,6 +172,8 @@ void CompilandDumper::dump(const PDBSymbolLabel &Symbol) { } void CompilandDumper::dump(const PDBSymbolThunk &Symbol) { + if (!shouldDumpSymLevel(opts::pretty::SymLevel::Thunks)) + return; if (Printer.IsSymbolExcluded(Symbol.getName())) return; diff --git a/tools/llvm-pdbdump/PrettyFunctionDumper.cpp b/tools/llvm-pdbdump/PrettyFunctionDumper.cpp index b0be33c157ce..8b2043989b81 100644 --- a/tools/llvm-pdbdump/PrettyFunctionDumper.cpp +++ b/tools/llvm-pdbdump/PrettyFunctionDumper.cpp @@ -26,6 +26,7 @@ #include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h" #include "llvm/Support/Format.h" +#include "llvm/Support/FormatVariadic.h" using namespace llvm; using namespace llvm::codeview; @@ -119,14 +120,19 @@ void FunctionDumper::start(const PDBSymbolFunc &Symbol, PointerType Pointer) { WithColor(Printer, PDB_ColorItem::Address).get() << format_hex(FuncStart, 10); if (auto DebugStart = Symbol.findOneChild<PDBSymbolFuncDebugStart>()) { uint64_t Prologue = DebugStart->getVirtualAddress() - FuncStart; - WithColor(Printer, PDB_ColorItem::Offset).get() << "+" << Prologue; + WithColor(Printer, PDB_ColorItem::Offset).get() + << formatv("+{0,2}", Prologue); } Printer << " - "; WithColor(Printer, PDB_ColorItem::Address).get() << format_hex(FuncEnd, 10); if (auto DebugEnd = Symbol.findOneChild<PDBSymbolFuncDebugEnd>()) { uint64_t Epilogue = FuncEnd - DebugEnd->getVirtualAddress(); - WithColor(Printer, PDB_ColorItem::Offset).get() << "-" << Epilogue; + WithColor(Printer, PDB_ColorItem::Offset).get() + << formatv("-{0,2}", Epilogue); } + + WithColor(Printer, PDB_ColorItem::Comment).get() + << formatv(" | sizeof={0,3}", Symbol.getLength()); Printer << "] ("; if (Symbol.hasFramePointer()) { diff --git a/tools/llvm-pdbdump/llvm-pdbdump.cpp b/tools/llvm-pdbdump/llvm-pdbdump.cpp index 4cdd87620c86..0e5913fa3c93 100644 --- a/tools/llvm-pdbdump/llvm-pdbdump.cpp +++ b/tools/llvm-pdbdump/llvm-pdbdump.cpp @@ -110,12 +110,22 @@ cl::list<std::string> InputFilenames(cl::Positional, cl::opt<bool> Compilands("compilands", cl::desc("Display compilands"), cl::cat(TypeCategory), cl::sub(PrettySubcommand)); -cl::opt<bool> Symbols("symbols", cl::desc("Display symbols for each compiland"), +cl::opt<bool> Symbols("module-syms", + cl::desc("Display symbols for each compiland"), cl::cat(TypeCategory), cl::sub(PrettySubcommand)); cl::opt<bool> Globals("globals", cl::desc("Dump global symbols"), cl::cat(TypeCategory), cl::sub(PrettySubcommand)); cl::opt<bool> Externals("externals", cl::desc("Dump external symbols"), cl::cat(TypeCategory), cl::sub(PrettySubcommand)); +cl::list<SymLevel> SymTypes( + "sym-types", cl::desc("Type of symbols to dump (default all)"), + cl::cat(TypeCategory), cl::sub(PrettySubcommand), cl::ZeroOrMore, + cl::values( + clEnumValN(SymLevel::Thunks, "thunks", "Display thunk symbols"), + clEnumValN(SymLevel::Data, "data", "Display data symbols"), + clEnumValN(SymLevel::Functions, "funcs", "Display function symbols"), + clEnumValN(SymLevel::All, "all", "Display all symbols (default)"))); + cl::opt<bool> Types("types", cl::desc("Display all types (implies -classes, -enums, -typedefs)"), @@ -126,6 +136,16 @@ cl::opt<bool> Enums("enums", cl::desc("Display enum types"), cl::cat(TypeCategory), cl::sub(PrettySubcommand)); cl::opt<bool> Typedefs("typedefs", cl::desc("Display typedef types"), cl::cat(TypeCategory), cl::sub(PrettySubcommand)); +cl::opt<SymbolSortMode> SymbolOrder( + "symbol-order", cl::desc("symbol sort order"), + cl::init(SymbolSortMode::None), + cl::values(clEnumValN(SymbolSortMode::None, "none", + "Undefined / no particular sort order"), + clEnumValN(SymbolSortMode::Name, "name", "Sort symbols by name"), + clEnumValN(SymbolSortMode::Size, "size", + "Sort symbols by size")), + cl::cat(TypeCategory), cl::sub(PrettySubcommand)); + cl::opt<ClassSortMode> ClassOrder( "class-order", cl::desc("Class sort order"), cl::init(ClassSortMode::None), cl::values( @@ -620,6 +640,49 @@ static void diff(StringRef Path1, StringRef Path2) { ExitOnErr(O->dump()); } +bool opts::pretty::shouldDumpSymLevel(SymLevel Search) { + if (SymTypes.empty()) + return true; + if (llvm::find(SymTypes, Search) != SymTypes.end()) + return true; + if (llvm::find(SymTypes, SymLevel::All) != SymTypes.end()) + return true; + return false; +} + +uint32_t llvm::pdb::getTypeLength(const PDBSymbolData &Symbol) { + auto SymbolType = Symbol.getType(); + const IPDBRawSymbol &RawType = SymbolType->getRawSymbol(); + + return RawType.getLength(); +} + +bool opts::pretty::compareFunctionSymbols( + const std::unique_ptr<PDBSymbolFunc> &F1, + const std::unique_ptr<PDBSymbolFunc> &F2) { + assert(opts::pretty::SymbolOrder != opts::pretty::SymbolSortMode::None); + + if (opts::pretty::SymbolOrder == opts::pretty::SymbolSortMode::Name) + return F1->getName() < F2->getName(); + + // Note that we intentionally sort in descending order on length, since + // long functions are more interesting than short functions. + return F1->getLength() > F2->getLength(); +} + +bool opts::pretty::compareDataSymbols( + const std::unique_ptr<PDBSymbolData> &F1, + const std::unique_ptr<PDBSymbolData> &F2) { + assert(opts::pretty::SymbolOrder != opts::pretty::SymbolSortMode::None); + + if (opts::pretty::SymbolOrder == opts::pretty::SymbolSortMode::Name) + return F1->getName() < F2->getName(); + + // Note that we intentionally sort in descending order on length, since + // large types are more interesting than short ones. + return getTypeLength(*F1) > getTypeLength(*F2); +} + static void dumpPretty(StringRef Path) { std::unique_ptr<IPDBSession> Session; @@ -708,21 +771,42 @@ static void dumpPretty(StringRef Path) { Printer.NewLine(); WithColor(Printer, PDB_ColorItem::SectionHeader).get() << "---GLOBALS---"; Printer.Indent(); - { + if (shouldDumpSymLevel(opts::pretty::SymLevel::Functions)) { FunctionDumper Dumper(Printer); auto Functions = GlobalScope->findAllChildren<PDBSymbolFunc>(); - while (auto Function = Functions->getNext()) { - Printer.NewLine(); - Dumper.start(*Function, FunctionDumper::PointerType::None); + if (opts::pretty::SymbolOrder == opts::pretty::SymbolSortMode::None) { + while (auto Function = Functions->getNext()) { + Printer.NewLine(); + Dumper.start(*Function, FunctionDumper::PointerType::None); + } + } else { + std::vector<std::unique_ptr<PDBSymbolFunc>> Funcs; + while (auto Func = Functions->getNext()) + Funcs.push_back(std::move(Func)); + std::sort(Funcs.begin(), Funcs.end(), + opts::pretty::compareFunctionSymbols); + for (const auto &Func : Funcs) { + Printer.NewLine(); + Dumper.start(*Func, FunctionDumper::PointerType::None); + } } } - { + if (shouldDumpSymLevel(opts::pretty::SymLevel::Data)) { auto Vars = GlobalScope->findAllChildren<PDBSymbolData>(); VariableDumper Dumper(Printer); - while (auto Var = Vars->getNext()) - Dumper.start(*Var); + if (opts::pretty::SymbolOrder == opts::pretty::SymbolSortMode::None) { + while (auto Var = Vars->getNext()) + Dumper.start(*Var); + } else { + std::vector<std::unique_ptr<PDBSymbolData>> Datas; + while (auto Var = Vars->getNext()) + Datas.push_back(std::move(Var)); + std::sort(Datas.begin(), Datas.end(), opts::pretty::compareDataSymbols); + for (const auto &Var : Datas) + Dumper.start(*Var); + } } - { + if (shouldDumpSymLevel(opts::pretty::SymLevel::Thunks)) { auto Thunks = GlobalScope->findAllChildren<PDBSymbolThunk>(); CompilandDumper Dumper(Printer); while (auto Thunk = Thunks->getNext()) diff --git a/tools/llvm-pdbdump/llvm-pdbdump.h b/tools/llvm-pdbdump/llvm-pdbdump.h index 8b1dde9399bf..e38b32c6a345 100644 --- a/tools/llvm-pdbdump/llvm-pdbdump.h +++ b/tools/llvm-pdbdump/llvm-pdbdump.h @@ -14,6 +14,17 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/raw_ostream.h" +#include <memory> +#include <stdint.h> + +namespace llvm { +namespace pdb { +class PDBSymbolData; +class PDBSymbolFunc; +uint32_t getTypeLength(const PDBSymbolData &Symbol); +} +} + namespace opts { namespace pretty { @@ -29,6 +40,17 @@ enum class ClassSortMode { PaddingPctImmediate }; +enum class SymbolSortMode { None, Name, Size }; + +enum class SymLevel { Functions, Data, Thunks, All }; + +bool shouldDumpSymLevel(SymLevel Level); +bool compareFunctionSymbols( + const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F1, + const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F2); +bool compareDataSymbols(const std::unique_ptr<llvm::pdb::PDBSymbolData> &F1, + const std::unique_ptr<llvm::pdb::PDBSymbolData> &F2); + extern llvm::cl::opt<bool> Compilands; extern llvm::cl::opt<bool> Symbols; extern llvm::cl::opt<bool> Globals; @@ -45,6 +67,7 @@ extern llvm::cl::list<std::string> ExcludeCompilands; extern llvm::cl::list<std::string> IncludeTypes; extern llvm::cl::list<std::string> IncludeSymbols; extern llvm::cl::list<std::string> IncludeCompilands; +extern llvm::cl::opt<SymbolSortMode> SymbolOrder; extern llvm::cl::opt<ClassSortMode> ClassOrder; extern llvm::cl::opt<uint32_t> SizeThreshold; extern llvm::cl::opt<uint32_t> PaddingThreshold; diff --git a/tools/llvm-readobj/COFFDumper.cpp b/tools/llvm-readobj/COFFDumper.cpp index 049af2c4f076..aca7de840d80 100644 --- a/tools/llvm-readobj/COFFDumper.cpp +++ b/tools/llvm-readobj/COFFDumper.cpp @@ -1562,6 +1562,14 @@ void COFFDumper::printResourceDirectoryTable( raw_svector_ostream OS(IDStr); if (i < Table.NumberOfNameEntries) { ArrayRef<UTF16> RawEntryNameString = unwrapOrError(RSF.getEntryNameString(Entry)); + std::vector<UTF16> EndianCorrectedNameString; + if (llvm::sys::IsBigEndianHost) { + EndianCorrectedNameString.resize(RawEntryNameString.size() + 1); + std::copy(RawEntryNameString.begin(), RawEntryNameString.end(), + EndianCorrectedNameString.begin() + 1); + EndianCorrectedNameString[0] = UNI_UTF16_BYTE_ORDER_MARK_SWAPPED; + RawEntryNameString = makeArrayRef(EndianCorrectedNameString); + } std::string EntryNameString; if (!llvm::convertUTF16ToUTF8String(RawEntryNameString, EntryNameString)) error(object_error::parse_failed); diff --git a/tools/llvm-readobj/llvm-readobj.cpp b/tools/llvm-readobj/llvm-readobj.cpp index 8a9d7bc720c3..cd7244a8f970 100644 --- a/tools/llvm-readobj/llvm-readobj.cpp +++ b/tools/llvm-readobj/llvm-readobj.cpp @@ -311,13 +311,6 @@ static void reportError(StringRef Input, std::error_code EC) { reportError(Twine(Input) + ": " + EC.message()); } -static void reportError(StringRef Input, StringRef Message) { - if (Input == "-") - Input = "<stdin>"; - - reportError(Twine(Input) + ": " + Message); -} - static void reportError(StringRef Input, Error Err) { if (Input == "-") Input = "<stdin>"; @@ -481,11 +474,7 @@ static void dumpArchive(const Archive *Arc) { Expected<std::unique_ptr<Binary>> ChildOrErr = Child.getAsBinary(); if (!ChildOrErr) { if (auto E = isNotObjectErrorInvalidFileType(ChildOrErr.takeError())) { - std::string Buf; - raw_string_ostream OS(Buf); - logAllUnhandledErrors(ChildOrErr.takeError(), OS, ""); - OS.flush(); - reportError(Arc->getFileName(), Buf); + reportError(Arc->getFileName(), ChildOrErr.takeError()); } continue; } @@ -507,11 +496,7 @@ static void dumpMachOUniversalBinary(const MachOUniversalBinary *UBinary) { if (ObjOrErr) dumpObject(&*ObjOrErr.get()); else if (auto E = isNotObjectErrorInvalidFileType(ObjOrErr.takeError())) { - std::string Buf; - raw_string_ostream OS(Buf); - logAllUnhandledErrors(ObjOrErr.takeError(), OS, ""); - OS.flush(); - reportError(UBinary->getFileName(), Buf); + reportError(UBinary->getFileName(), ObjOrErr.takeError()); } else if (Expected<std::unique_ptr<Archive>> AOrErr = Obj.getAsArchive()) dumpArchive(&*AOrErr.get()); @@ -524,7 +509,7 @@ static void dumpInput(StringRef File) { // Attempt to open the binary. Expected<OwningBinary<Binary>> BinaryOrErr = createBinary(File); if (!BinaryOrErr) - reportError(File, errorToErrorCode(BinaryOrErr.takeError())); + reportError(File, BinaryOrErr.takeError()); Binary &Binary = *BinaryOrErr.get().getBinary(); if (Archive *Arc = dyn_cast<Archive>(&Binary)) diff --git a/tools/llvm-rtdyld/llvm-rtdyld.cpp b/tools/llvm-rtdyld/llvm-rtdyld.cpp index 75345de50280..ba130ce80be8 100644 --- a/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ b/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -175,8 +175,7 @@ public: void registerEHFrames(uint8_t *Addr, uint64_t LoadAddr, size_t Size) override {} - void deregisterEHFrames(uint8_t *Addr, uint64_t LoadAddr, - size_t Size) override {} + void deregisterEHFrames() override {} void preallocateSlab(uint64_t Size) { std::string Err; diff --git a/tools/obj2yaml/wasm2yaml.cpp b/tools/obj2yaml/wasm2yaml.cpp index cc04b995f667..d4d978f028e2 100644 --- a/tools/obj2yaml/wasm2yaml.cpp +++ b/tools/obj2yaml/wasm2yaml.cpp @@ -25,6 +25,23 @@ public: ErrorOr<WasmYAML::Object *> dump(); }; +WasmYAML::Table make_table(const wasm::WasmTable &Table) { + WasmYAML::Table T; + T.ElemType = Table.ElemType; + T.TableLimits.Flags = Table.Limits.Flags; + T.TableLimits.Initial = Table.Limits.Initial; + T.TableLimits.Maximum = Table.Limits.Maximum; + return T; +} + +WasmYAML::Limits make_limits(const wasm::WasmLimits &Limits) { + WasmYAML::Limits L; + L.Flags = Limits.Flags; + L.Initial = Limits.Initial; + L.Maximum = Limits.Maximum; + return L; +} + ErrorOr<WasmYAML::Object *> WasmDumper::dump() { auto Y = make_unique<WasmYAML::Object>(); @@ -82,17 +99,26 @@ ErrorOr<WasmYAML::Object *> WasmDumper::dump() { case wasm::WASM_SEC_IMPORT: { auto ImportSec = make_unique<WasmYAML::ImportSection>(); for (auto &Import : Obj.imports()) { - WasmYAML::Import Ex; - Ex.Module = Import.Module; - Ex.Field = Import.Field; - Ex.Kind = Import.Kind; - if (Ex.Kind == wasm::WASM_EXTERNAL_FUNCTION) { - Ex.SigIndex = Import.SigIndex; - } else if (Ex.Kind == wasm::WASM_EXTERNAL_GLOBAL) { - Ex.GlobalType = Import.GlobalType; - Ex.GlobalMutable = Import.GlobalMutable; + WasmYAML::Import Im; + Im.Module = Import.Module; + Im.Field = Import.Field; + Im.Kind = Import.Kind; + switch (Im.Kind) { + case wasm::WASM_EXTERNAL_FUNCTION: + Im.SigIndex = Import.SigIndex; + break; + case wasm::WASM_EXTERNAL_GLOBAL: + Im.GlobalImport.Type = Import.Global.Type; + Im.GlobalImport.Mutable = Import.Global.Mutable; + break; + case wasm::WASM_EXTERNAL_TABLE: + Im.TableImport = make_table(Import.Table); + break; + case wasm::WASM_EXTERNAL_MEMORY: + Im.Memory = make_limits(Import.Memory); + break; } - ImportSec->Imports.push_back(Ex); + ImportSec->Imports.push_back(Im); } S = std::move(ImportSec); break; @@ -107,25 +133,16 @@ ErrorOr<WasmYAML::Object *> WasmDumper::dump() { } case wasm::WASM_SEC_TABLE: { auto TableSec = make_unique<WasmYAML::TableSection>(); - for (auto &Table : Obj.tables()) { - WasmYAML::Table T; - T.ElemType = Table.ElemType; - T.TableLimits.Flags = Table.Limits.Flags; - T.TableLimits.Initial = Table.Limits.Initial; - T.TableLimits.Maximum = Table.Limits.Maximum; - TableSec->Tables.push_back(T); + for (const wasm::WasmTable &Table : Obj.tables()) { + TableSec->Tables.push_back(make_table(Table)); } S = std::move(TableSec); break; } case wasm::WASM_SEC_MEMORY: { auto MemorySec = make_unique<WasmYAML::MemorySection>(); - for (auto &Memory : Obj.memories()) { - WasmYAML::Limits L; - L.Flags = Memory.Flags; - L.Initial = Memory.Initial; - L.Maximum = Memory.Maximum; - MemorySec->Memories.push_back(L); + for (const wasm::WasmLimits &Memory : Obj.memories()) { + MemorySec->Memories.push_back(make_limits(Memory)); } S = std::move(MemorySec); break; diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index 40459e559986..c362dff3a3e0 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -385,18 +385,20 @@ int main(int argc, char **argv) { initializeTarget(Registry); // For codegen passes, only passes that do IR to IR transformation are // supported. + initializeScalarizeMaskedMemIntrinPass(Registry); initializeCodeGenPreparePass(Registry); initializeAtomicExpandPass(Registry); initializeRewriteSymbolsLegacyPassPass(Registry); initializeWinEHPreparePass(Registry); initializeDwarfEHPreparePass(Registry); - initializeSafeStackPass(Registry); + initializeSafeStackLegacyPassPass(Registry); initializeSjLjEHPreparePass(Registry); initializePreISelIntrinsicLoweringLegacyPassPass(Registry); initializeGlobalMergePass(Registry); initializeInterleavedAccessPass(Registry); initializeCountingFunctionInserterPass(Registry); initializeUnreachableBlockElimLegacyPassPass(Registry); + initializeExpandReductionsPass(Registry); #ifdef LINK_POLLY_INTO_TOOLS polly::initializePollyPasses(Registry); diff --git a/tools/yaml2obj/yaml2wasm.cpp b/tools/yaml2obj/yaml2wasm.cpp index eed9f2c4039b..5c8aba33ee80 100644 --- a/tools/yaml2obj/yaml2wasm.cpp +++ b/tools/yaml2obj/yaml2wasm.cpp @@ -169,8 +169,15 @@ int WasmWriter::writeSectionContent(raw_ostream &OS, encodeULEB128(Import.SigIndex, OS); break; case wasm::WASM_EXTERNAL_GLOBAL: - encodeSLEB128(Import.GlobalType, OS); - writeUint8(OS, Import.GlobalMutable); + encodeSLEB128(Import.GlobalImport.Type, OS); + writeUint8(OS, Import.GlobalImport.Mutable); + break; + case wasm::WASM_EXTERNAL_MEMORY: + writeLimits(Import.Memory, OS); + break; + case wasm::WASM_EXTERNAL_TABLE: + encodeSLEB128(Import.TableImport.ElemType, OS); + writeLimits(Import.TableImport.TableLimits, OS); break; default: errs() << "Unknown import type: " << Import.Kind; |