13dac3a9bSDimitry Andric //===-- WebAssemblySubtarget.cpp - WebAssembly Subtarget Information ------===//
23dac3a9bSDimitry Andric //
33dac3a9bSDimitry Andric //                     The LLVM Compiler Infrastructure
43dac3a9bSDimitry Andric //
53dac3a9bSDimitry Andric // This file is distributed under the University of Illinois Open Source
63dac3a9bSDimitry Andric // License. See LICENSE.TXT for details.
73dac3a9bSDimitry Andric //
83dac3a9bSDimitry Andric //===----------------------------------------------------------------------===//
93dac3a9bSDimitry Andric ///
103dac3a9bSDimitry Andric /// \file
114ba319b5SDimitry Andric /// This file implements the WebAssembly-specific subclass of
123dac3a9bSDimitry Andric /// TargetSubtarget.
133dac3a9bSDimitry Andric ///
143dac3a9bSDimitry Andric //===----------------------------------------------------------------------===//
153dac3a9bSDimitry Andric 
163dac3a9bSDimitry Andric #include "WebAssemblySubtarget.h"
173ca95b02SDimitry Andric #include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
183ca95b02SDimitry Andric #include "WebAssemblyInstrInfo.h"
193dac3a9bSDimitry Andric #include "llvm/Support/TargetRegistry.h"
203dac3a9bSDimitry Andric using namespace llvm;
213dac3a9bSDimitry Andric 
223dac3a9bSDimitry Andric #define DEBUG_TYPE "wasm-subtarget"
233dac3a9bSDimitry Andric 
243dac3a9bSDimitry Andric #define GET_SUBTARGETINFO_CTOR
253dac3a9bSDimitry Andric #define GET_SUBTARGETINFO_TARGET_DESC
263dac3a9bSDimitry Andric #include "WebAssemblyGenSubtargetInfo.inc"
273dac3a9bSDimitry Andric 
283dac3a9bSDimitry Andric WebAssemblySubtarget &
initializeSubtargetDependencies(StringRef FS)293dac3a9bSDimitry Andric WebAssemblySubtarget::initializeSubtargetDependencies(StringRef FS) {
303dac3a9bSDimitry Andric   // Determine default and user-specified characteristics
313dac3a9bSDimitry Andric 
323dac3a9bSDimitry Andric   if (CPUString.empty())
333dac3a9bSDimitry Andric     CPUString = "generic";
343dac3a9bSDimitry Andric 
353dac3a9bSDimitry Andric   ParseSubtargetFeatures(CPUString, FS);
363dac3a9bSDimitry Andric   return *this;
373dac3a9bSDimitry Andric }
383dac3a9bSDimitry Andric 
WebAssemblySubtarget(const Triple & TT,const std::string & CPU,const std::string & FS,const TargetMachine & TM)393dac3a9bSDimitry Andric WebAssemblySubtarget::WebAssemblySubtarget(const Triple &TT,
403dac3a9bSDimitry Andric                                            const std::string &CPU,
413dac3a9bSDimitry Andric                                            const std::string &FS,
423dac3a9bSDimitry Andric                                            const TargetMachine &TM)
43*b5893f02SDimitry Andric     : WebAssemblyGenSubtargetInfo(TT, CPU, FS), CPUString(CPU),
44*b5893f02SDimitry Andric       TargetTriple(TT), FrameLowering(),
45*b5893f02SDimitry Andric       InstrInfo(initializeSubtargetDependencies(FS)), TSInfo(),
46875ed548SDimitry Andric       TLInfo(TM, *this) {}
473dac3a9bSDimitry Andric 
enableMachineScheduler() const483ca95b02SDimitry Andric bool WebAssemblySubtarget::enableMachineScheduler() const {
493ca95b02SDimitry Andric   // Disable the MachineScheduler for now. Even with ShouldTrackPressure set and
503ca95b02SDimitry Andric   // enableMachineSchedDefaultSched overridden, it appears to have an overall
513ca95b02SDimitry Andric   // negative effect for the kinds of register optimizations we're doing.
523ca95b02SDimitry Andric   return false;
533ca95b02SDimitry Andric }
543ca95b02SDimitry Andric 
useAA() const557d523365SDimitry Andric bool WebAssemblySubtarget::useAA() const { return true; }
56