From 8c6d367a4eac8c279334baf2de76f1ac79f687a1 Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Wed, 17 Feb 2016 23:20:43 +0000 Subject: [PATCH] [WebAssembly] Disable register stackification and coloring when not optimizing These passes are optimizations, and should be disabled when not optimizing. Also create an MCCodeGenInfo so the opt level is correctly plumbed to the backend pass manager. Also remove the command line flag for disabling register coloring; running llc with -O0 should now be useful for debugging, so it's not necessary. Differential Revision: http://reviews.llvm.org/D17327 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@261176 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../MCTargetDesc/WebAssemblyMCTargetDesc.cpp | 17 +++++++++++++++++ .../WebAssembly/WebAssemblyRegColoring.cpp | 7 ------- .../WebAssembly/WebAssemblyTargetMachine.cpp | 10 ++++++---- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp index 039bc7128ca..a7a813313a2 100644 --- a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp +++ b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp @@ -40,6 +40,20 @@ static MCAsmInfo *createMCAsmInfo(const MCRegisterInfo & /*MRI*/, 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 @@ extern "C" void LLVMInitializeWebAssemblyTargetMC() { // 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); diff --git a/lib/Target/WebAssembly/WebAssemblyRegColoring.cpp b/lib/Target/WebAssembly/WebAssemblyRegColoring.cpp index fd54701c35c..9ec66595d8d 100644 --- a/lib/Target/WebAssembly/WebAssemblyRegColoring.cpp +++ b/lib/Target/WebAssembly/WebAssemblyRegColoring.cpp @@ -29,10 +29,6 @@ using namespace llvm; #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 @@ bool WebAssemblyRegColoring::runOnMachineFunction(MachineFunction &MF) { << "********** 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 .) diff --git a/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 25f009d2fb3..2e2a1194502 100644 --- a/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -185,11 +185,13 @@ void WebAssemblyPassConfig::addPostRegAlloc() { // 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();