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