Index: llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp =================================================================== --- llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp +++ llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp @@ -40,6 +40,20 @@ return new WebAssemblyMCAsmInfo(TT); } +static MCCodeGenInfo *createMCCodeGenInfo(const Triple & /*TT*/, + Reloc::Model /*RM*/, + CodeModel::Model CM, + CodeGenOpt::Level OL) { + CodeModel::Model M = (CM == CodeModel::Default || CM == CodeModel::JITDefault) + ? CodeModel::Large + : CM; + if (M != CodeModel::Large) + report_fatal_error("Non-large code models are not supported yet"); + MCCodeGenInfo *CGI = new MCCodeGenInfo(); + CGI->initMCCodeGenInfo(Reloc::PIC_, CM, OL); + return CGI; +} + static MCInstrInfo *createMCInstrInfo() { MCInstrInfo *X = new MCInstrInfo(); InitWebAssemblyMCInstrInfo(X); @@ -99,6 +113,9 @@ // Register the MC instruction info. TargetRegistry::RegisterMCInstrInfo(*T, createMCInstrInfo); + // Register the MC codegen info. + TargetRegistry::RegisterMCCodeGenInfo(*T, createMCCodeGenInfo); + // Register the MC register info. TargetRegistry::RegisterMCRegInfo(*T, createMCRegisterInfo); Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyRegColoring.cpp =================================================================== --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyRegColoring.cpp +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyRegColoring.cpp @@ -29,10 +29,6 @@ #define DEBUG_TYPE "wasm-reg-coloring" -static cl::opt - DisableRegColoring("disable-wasm-reg-coloring", cl::Hidden, cl::init(false), - cl::desc("Disable WebAssembly register coloring")); - namespace { class WebAssemblyRegColoring final : public MachineFunctionPass { public: @@ -80,9 +76,6 @@ << "********** Function: " << MF.getName() << '\n'; }); - if (DisableRegColoring) - return false; - // If there are calls to setjmp or sigsetjmp, don't perform coloring. Virtual // registers could be modified before the longjmp is executed, resulting in // the wrong value being used afterwards. (See .) Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp =================================================================== --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -185,11 +185,13 @@ // Fails with: should be run after register allocation. disablePass(&MachineCopyPropagationID); - // Mark registers as representing wasm's expression stack. - addPass(createWebAssemblyRegStackify()); + if (getOptLevel() != CodeGenOpt::None) { + // Mark registers as representing wasm's expression stack. + addPass(createWebAssemblyRegStackify()); - // Run the register coloring pass to reduce the total number of registers. - addPass(createWebAssemblyRegColoring()); + // Run the register coloring pass to reduce the total number of registers. + addPass(createWebAssemblyRegColoring()); + } TargetPassConfig::addPostRegAlloc();