1//===-- WebAssemblySubtarget.cpp - WebAssembly Subtarget Information ------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// This file implements the WebAssembly-specific subclass of
11/// TargetSubtarget.
12///
13//===----------------------------------------------------------------------===//
14
15#include "WebAssemblySubtarget.h"
16#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
17#include "WebAssemblyInstrInfo.h"
18#include "llvm/Support/TargetRegistry.h"
19using namespace llvm;
20
21#define DEBUG_TYPE "wasm-subtarget"
22
23#define GET_SUBTARGETINFO_CTOR
24#define GET_SUBTARGETINFO_TARGET_DESC
25#include "WebAssemblyGenSubtargetInfo.inc"
26
27WebAssemblySubtarget &
28WebAssemblySubtarget::initializeSubtargetDependencies(StringRef FS) {
29  // Determine default and user-specified characteristics
30
31  if (CPUString.empty())
32    CPUString = "generic";
33
34  ParseSubtargetFeatures(CPUString, FS);
35  return *this;
36}
37
38WebAssemblySubtarget::WebAssemblySubtarget(const Triple &TT,
39                                           const std::string &CPU,
40                                           const std::string &FS,
41                                           const TargetMachine &TM)
42    : WebAssemblyGenSubtargetInfo(TT, CPU, FS), CPUString(CPU),
43      TargetTriple(TT), FrameLowering(),
44      InstrInfo(initializeSubtargetDependencies(FS)), TSInfo(),
45      TLInfo(TM, *this) {}
46
47bool WebAssemblySubtarget::enableAtomicExpand() const {
48  // If atomics are disabled, atomic ops are lowered instead of expanded
49  return hasAtomics();
50}
51
52bool WebAssemblySubtarget::enableMachineScheduler() const {
53  // Disable the MachineScheduler for now. Even with ShouldTrackPressure set and
54  // enableMachineSchedDefaultSched overridden, it appears to have an overall
55  // negative effect for the kinds of register optimizations we're doing.
56  return false;
57}
58
59bool WebAssemblySubtarget::useAA() const { return true; }
60