From 0583894a1c429afa79ed5e3795980eb63a4934b8 Mon Sep 17 00:00:00 2001 From: Zhuowei Zhang Date: Thu, 18 Apr 2019 00:06:09 -0700 Subject: [PATCH] [Swift+WASM] [IRGen] disable debugger tuning and atomics on WebAssembly LLVM doesn't support LLDB debugger tuning for WebAssembly (since lldb tuning generates a DWARF5 accel table even when DWARF5 is disabled, and WebAssembly doesn't support DWARF5). In addition, support for atomics is currently very limited. Set LLVM target options to avoid generating DWARF5 debug data and lower atomics to regular load/stores when building for WebAssembly. This shouldn't affect existing platforms. --- lib/IRGen/IRGen.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/IRGen/IRGen.cpp b/lib/IRGen/IRGen.cpp index 815c972e0455b..81a507d587651 100644 --- a/lib/IRGen/IRGen.cpp +++ b/lib/IRGen/IRGen.cpp @@ -156,6 +156,14 @@ swift::getIRTargetOptions(IRGenOptions &Opts, ASTContext &Ctx) { auto *Clang = static_cast(Ctx.getClangModuleLoader()); clang::TargetOptions &ClangOpts = Clang->getTargetInfo().getTargetOpts(); + + // WebAssembly doesn't support atomics or DWARF5 yet. + // (LLVM debugger tuning generates a DWARF5 accel table even when DWARF5 is disabled) + if (Clang->getTargetInfo().getTriple().isOSBinFormatWasm()) { + TargetOpts.DebuggerTuning = llvm::DebuggerKind::Default; + TargetOpts.ThreadModel = llvm::ThreadModel::Single; + } + return std::make_tuple(TargetOpts, ClangOpts.CPU, ClangOpts.Features, ClangOpts.Triple); }