LLVM 23.0.0git
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
28#include <string>
29
30#define GET_SUBTARGETINFO_HEADER
31#include "WebAssemblyGenSubtargetInfo.inc"
32
33namespace llvm {
34
35// Defined in WebAssemblyGenSubtargetInfo.inc.
36extern const SubtargetFeatureKV
37 WebAssemblyFeatureKV[WebAssembly::NumSubtargetFeatures];
38
40 enum SIMDEnum {
41 NoSIMD,
42 SIMD128,
43 RelaxedSIMD,
44 } SIMDLevel = NoSIMD;
45
46 bool HasAtomics = false;
47 bool HasBulkMemory = false;
48 bool HasBulkMemoryOpt = false;
49 bool HasCallIndirectOverlong = false;
50 bool HasCompactImports = false;
51 bool HasExceptionHandling = false;
52 bool HasExtendedConst = false;
53 bool HasFP16 = false;
54 bool HasGC = false;
55 bool HasCooperativeMultithreading = false;
56 bool HasLibcallThreadContext = false;
57 bool HasMultiMemory = false;
58 bool HasMultivalue = false;
59 bool HasMutableGlobals = false;
60 bool HasNontrappingFPToInt = false;
61 bool HasReferenceTypes = false;
62 bool HasRelaxedAtomics = false;
63 bool HasSignExt = false;
64 bool HasTailCall = false;
65 bool HasWideArithmetic = false;
66
67 /// What processor and OS we're targeting.
68 Triple TargetTriple;
69
70 WebAssemblyFrameLowering FrameLowering;
71 WebAssemblyInstrInfo InstrInfo;
74
75 std::unique_ptr<CallLowering> CallLoweringInfo;
76 std::unique_ptr<InstructionSelector> InstSelector;
77 std::unique_ptr<LegalizerInfo> Legalizer;
78 std::unique_ptr<RegisterBankInfo> RegBankInfo;
79
80 WebAssemblySubtarget &initializeSubtargetDependencies(StringRef CPU,
81 StringRef FS);
82
83public:
84 /// This constructor initializes the data members to match that
85 /// of the specified triple.
86 WebAssemblySubtarget(const Triple &TT, const std::string &CPU,
87 const std::string &FS, const TargetMachine &TM);
88
90 return &TSInfo;
91 }
93 return &FrameLowering;
94 }
96 return &TLInfo;
97 }
98 const WebAssemblyInstrInfo *getInstrInfo() const override {
99 return &InstrInfo;
100 }
101 const WebAssemblyRegisterInfo *getRegisterInfo() const override {
102 return &getInstrInfo()->getRegisterInfo();
103 }
104 const Triple &getTargetTriple() const { return TargetTriple; }
105 bool enableAtomicExpand() const override;
106 bool enableIndirectBrExpand() const override { return true; }
107 bool enableMachineScheduler() const override;
108 bool useAA() const override;
109
110 // Predicates used by WebAssemblyInstrInfo.td.
111 bool hasAddr64() const { return TargetTriple.isArch64Bit(); }
112 bool hasAtomics() const { return HasAtomics; }
113 bool hasBulkMemory() const { return HasBulkMemory; }
114 bool hasBulkMemoryOpt() const { return HasBulkMemoryOpt; }
115 bool hasCallIndirectOverlong() const { return HasCallIndirectOverlong; }
116 bool hasCompactImports() const { return HasCompactImports; }
117 bool hasExceptionHandling() const { return HasExceptionHandling; }
118 bool hasExtendedConst() const { return HasExtendedConst; }
119 bool hasFP16() const { return HasFP16; }
120 bool hasGC() const { return HasGC; }
122 return HasCooperativeMultithreading;
123 }
124 bool hasLibcallThreadContext() const { return HasLibcallThreadContext; }
125 bool hasMultiMemory() const { return HasMultiMemory; }
126 bool hasMultivalue() const { return HasMultivalue; }
127 bool hasMutableGlobals() const { return HasMutableGlobals; }
128 bool hasNontrappingFPToInt() const { return HasNontrappingFPToInt; }
129 bool hasReferenceTypes() const { return HasReferenceTypes; }
130 bool hasRelaxedAtomics() const { return HasRelaxedAtomics; }
131 bool hasRelaxedSIMD() const { return SIMDLevel >= RelaxedSIMD; }
132 bool hasSignExt() const { return HasSignExt; }
133 bool hasSIMD128() const { return SIMDLevel >= SIMD128; }
134 bool hasTailCall() const { return HasTailCall; }
135 bool hasWideArithmetic() const { return HasWideArithmetic; }
136
137 /// Parses features string setting specified subtarget options. Definition of
138 /// function is auto generated by tblgen.
140
141 const CallLowering *getCallLowering() const override;
143 const LegalizerInfo *getLegalizerInfo() const override;
144 const RegisterBankInfo *getRegBankInfo() const override;
145};
146
147} // end namespace llvm
148
149#endif
This file describes how to lower LLVM calls to machine code calls.
Interface for Targets to specify which operations they can successfully select and how the others sho...
This class implements WebAssembly-specific bits of TargetFrameLowering class.
This file defines the interfaces that WebAssembly uses to lower LLVM code into a selection DAG.
This file contains the WebAssembly implementation of the TargetInstrInfo class.
This file provides WebAssembly-specific target descriptions.
This file defines the WebAssembly subclass for SelectionDAGTargetInfo.
Holds all the information related to register banks.
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
Primary interface to the complete machine description for the target machine.
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:47
const WebAssemblyRegisterInfo & getRegisterInfo() const
bool enableAtomicExpand() const override
const WebAssemblySelectionDAGInfo * getSelectionDAGInfo() const override
const Triple & getTargetTriple() const
bool enableIndirectBrExpand() const override
const CallLowering * getCallLowering() const override
const WebAssemblyTargetLowering * getTargetLowering() const override
const WebAssemblyInstrInfo * getInstrInfo() const override
const WebAssemblyRegisterInfo * getRegisterInfo() const override
const RegisterBankInfo * getRegBankInfo() const override
bool enableMachineScheduler() const override
InstructionSelector * getInstructionSelector() const override
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.
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
Parses features string setting specified subtarget options.
const WebAssemblyFrameLowering * getFrameLowering() const override
const LegalizerInfo * getLegalizerInfo() const override
This is an optimization pass for GlobalISel generic memory operations.
const SubtargetFeatureKV WebAssemblyFeatureKV[WebAssembly::NumSubtargetFeatures]