LLVM  9.0.0svn
WebAssemblySubtarget.h
Go to the documentation of this file.
1 //=- WebAssemblySubtarget.h - Define Subtarget for the WebAssembly -*- C++ -*-//
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 declares the WebAssembly-specific subclass of
11 /// TargetSubtarget.
12 ///
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYSUBTARGET_H
16 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYSUBTARGET_H
17 
20 #include "WebAssemblyInstrInfo.h"
23 #include <string>
24 
25 #define GET_SUBTARGETINFO_ENUM
26 #define GET_SUBTARGETINFO_HEADER
27 #include "WebAssemblyGenSubtargetInfo.inc"
28 
29 namespace llvm {
30 
31 // Defined in WebAssemblyGenSubtargetInfo.inc.
32 extern const SubtargetFeatureKV
33  WebAssemblyFeatureKV[WebAssembly::NumSubtargetFeatures];
34 
36  enum SIMDEnum {
37  NoSIMD,
38  SIMD128,
39  UnimplementedSIMD128,
40  } SIMDLevel = NoSIMD;
41 
42  bool HasAtomics = false;
43  bool HasNontrappingFPToInt = false;
44  bool HasSignExt = false;
45  bool HasExceptionHandling = false;
46  bool HasBulkMemory = false;
47  bool HasMultivalue = false;
48  bool HasMutableGlobals = false;
49  bool HasTailCall = false;
50 
51  /// String name of used CPU.
52  std::string CPUString;
53 
54  /// What processor and OS we're targeting.
55  Triple TargetTriple;
56 
57  WebAssemblyFrameLowering FrameLowering;
58  WebAssemblyInstrInfo InstrInfo;
61 
62  /// Initializes using CPUString and the passed in feature string so that we
63  /// can use initializer lists for subtarget initialization.
64  WebAssemblySubtarget &initializeSubtargetDependencies(StringRef FS);
65 
66 public:
67  /// This constructor initializes the data members to match that
68  /// of the specified triple.
69  WebAssemblySubtarget(const Triple &TT, const std::string &CPU,
70  const std::string &FS, const TargetMachine &TM);
71 
73  return &TSInfo;
74  }
75  const WebAssemblyFrameLowering *getFrameLowering() const override {
76  return &FrameLowering;
77  }
78  const WebAssemblyTargetLowering *getTargetLowering() const override {
79  return &TLInfo;
80  }
81  const WebAssemblyInstrInfo *getInstrInfo() const override {
82  return &InstrInfo;
83  }
84  const WebAssemblyRegisterInfo *getRegisterInfo() const override {
85  return &getInstrInfo()->getRegisterInfo();
86  }
87  const Triple &getTargetTriple() const { return TargetTriple; }
88  bool enableAtomicExpand() const override;
89  bool enableIndirectBrExpand() const override { return true; }
90  bool enableMachineScheduler() const override;
91  bool useAA() const override;
92 
93  // Predicates used by WebAssemblyInstrInfo.td.
94  bool hasAddr64() const { return TargetTriple.isArch64Bit(); }
95  bool hasSIMD128() const { return SIMDLevel >= SIMD128; }
96  bool hasUnimplementedSIMD128() const {
97  return SIMDLevel >= UnimplementedSIMD128;
98  }
99  bool hasAtomics() const { return HasAtomics; }
100  bool hasNontrappingFPToInt() const { return HasNontrappingFPToInt; }
101  bool hasSignExt() const { return HasSignExt; }
102  bool hasExceptionHandling() const { return HasExceptionHandling; }
103  bool hasBulkMemory() const { return HasBulkMemory; }
104  bool hasMultivalue() const { return HasMultivalue; }
105  bool hasMutableGlobals() const { return HasMutableGlobals; }
106  bool hasTailCall() const { return HasTailCall; }
107 
108  /// Parses features string setting specified subtarget options. Definition of
109  /// function is auto generated by tblgen.
111 };
112 
113 } // end namespace llvm
114 
115 #endif
This file defines the interfaces that WebAssembly uses to lower LLVM code into a selection DAG...
bool enableMachineScheduler() const override
This class represents lattice values for constants.
Definition: AllocatorList.h:23
const WebAssemblyRegisterInfo & getRegisterInfo() const
const WebAssemblyFrameLowering * getFrameLowering() const override
const SubtargetFeatureKV WebAssemblyFeatureKV[WebAssembly::NumSubtargetFeatures]
void ParseSubtargetFeatures(StringRef CPU, StringRef FS)
Parses features string setting specified subtarget options.
const Triple & getTargetTriple() const
const WebAssemblySelectionDAGInfo * getSelectionDAGInfo() const override
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:43
const WebAssemblyTargetLowering * getTargetLowering() const override
This file contains the WebAssembly implementation of the TargetInstrInfo class.
This file defines the WebAssembly subclass for SelectionDAGTargetInfo.
const WebAssemblyRegisterInfo * getRegisterInfo() const override
This class implements WebAssembly-specific bits of TargetFrameLowering class.
bool isArch64Bit() const
Test whether the architecture is 64-bit.
Definition: Triple.cpp:1292
WebAssemblySubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const TargetMachine &TM)
This constructor initializes the data members to match that of the specified triple.
bool enableAtomicExpand() const override
bool enableIndirectBrExpand() const override
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:65
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
const WebAssemblyInstrInfo * getInstrInfo() const override