X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FWebAssembly%2FWebAssemblyTargetMachine.cpp;h=18e2e5057db55a9556fc70f2757fc7c6a159815f;hp=6f93248bd13ce731fc35e4d83b8c8906bc51b8ff;hb=33dfebdcfa2f1e74f7881cba810478273f21ed33;hpb=1ff585db47087b5df032b6cf819e71b1fd1fe25e diff --git a/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 6f93248bd13..18e2e5057db 100644 --- a/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -46,8 +46,8 @@ WebAssemblyTargetMachine::WebAssemblyTargetMachine( const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL) : LLVMTargetMachine(T, TT.isArch64Bit() - ? "e-p:64:64-i64:64-v128:8:128-n32:64-S128" - : "e-p:32:32-i64:64-v128:8:128-n32:64-S128", + ? "e-p:64:64-i64:64-n32:64-S128" + : "e-p:32:32-i64:64-n32:64-S128", TT, CPU, FS, Options, RM, CM, OL), TLOF(make_unique()) { initAsmInfo(); @@ -77,7 +77,7 @@ WebAssemblyTargetMachine::getSubtargetImpl(const Function &F) const { // creation will depend on the TM and the code generation flags on the // function that reside in TargetOptions. resetTargetOptions(F); - I = make_unique(TargetTriple, CPU, FS, *this); + I = llvm::make_unique(TargetTriple, CPU, FS, *this); } return I.get(); } @@ -94,15 +94,12 @@ public: } FunctionPass *createTargetRegisterAllocator(bool) override; - void addFastRegAlloc(FunctionPass *RegAllocPass) override; - void addOptimizedRegAlloc(FunctionPass *RegAllocPass) override; void addIRPasses() override; bool addPreISel() override; bool addInstSelector() override; bool addILPOpts() override; void addPreRegAlloc() override; - void addRegAllocPasses(bool Optimized); void addPostRegAlloc() override; void addPreSched2() override; void addPreEmitPass() override; @@ -110,7 +107,7 @@ public: } // end anonymous namespace TargetIRAnalysis WebAssemblyTargetMachine::getTargetIRAnalysis() { - return TargetIRAnalysis([this](Function &F) { + return TargetIRAnalysis([this](const Function &F) { return TargetTransformInfo(WebAssemblyTTIImpl(this, F)); }); } @@ -124,16 +121,6 @@ FunctionPass *WebAssemblyPassConfig::createTargetRegisterAllocator(bool) { return nullptr; // No reg alloc } -void WebAssemblyPassConfig::addFastRegAlloc(FunctionPass *RegAllocPass) { - assert(!RegAllocPass && "WebAssembly uses no regalloc!"); - addRegAllocPasses(false); -} - -void WebAssemblyPassConfig::addOptimizedRegAlloc(FunctionPass *RegAllocPass) { - assert(!RegAllocPass && "WebAssembly uses no regalloc!"); - addRegAllocPasses(true); -} - //===----------------------------------------------------------------------===// // The following functions are called from lib/CodeGen/Passes.cpp to modify // the CodeGen pass sequence. @@ -164,10 +151,22 @@ bool WebAssemblyPassConfig::addILPOpts() { return true; } void WebAssemblyPassConfig::addPreRegAlloc() {} -void WebAssemblyPassConfig::addRegAllocPasses(bool Optimized) {} - -void WebAssemblyPassConfig::addPostRegAlloc() {} +void WebAssemblyPassConfig::addPostRegAlloc() { + // FIXME: the following passes dislike virtual registers. Disable them for now + // so that basic tests can pass. Future patches will remedy this. + // + // Fails with: Regalloc must assign all vregs. + disablePass(&PrologEpilogCodeInserterID); + // Fails with: should be run after register allocation. + disablePass(&MachineCopyPropagationID); + + // TODO: Until we get ReverseBranchCondition support, MachineBlockPlacement + // can create ugly-looking control flow. + disablePass(&MachineBlockPlacementID); +} void WebAssemblyPassConfig::addPreSched2() {} -void WebAssemblyPassConfig::addPreEmitPass() {} +void WebAssemblyPassConfig::addPreEmitPass() { + addPass(createWebAssemblyCFGStackify()); +}