[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

llvm-svn: 261176
This commit is contained in:
Derek Schuff 2016-02-17 23:20:43 +00:00
parent 7687bcee4a
commit 71434ff642
3 changed files with 23 additions and 11 deletions

View File

@ -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);

View File

@ -29,10 +29,6 @@ using namespace llvm;
#define DEBUG_TYPE "wasm-reg-coloring"
static cl::opt<bool>
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 <rdar://problem/8007500>.)

View File

@ -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();