mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-31 09:22:31 +00:00
[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
This commit is contained in:
parent
36a4230a66
commit
8c6d367a4e
@ -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);
|
||||
|
||||
|
@ -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>.)
|
||||
|
@ -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();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user