LLVM: include/llvm/TargetParser/ARMTargetParser.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef LLVM_TARGETPARSER_ARMTARGETPARSER_H

15#define LLVM_TARGETPARSER_ARMTARGETPARSER_H

16

22#include

23

24namespace llvm {

25

27

28namespace ARM {

29

36

37

38

80

81

88

90#define ARM_ARCH_EXT_NAME(NAME, ID, FEATURE, NEGFEATURE) \

91 {NAME, ID, FEATURE, NEGFEATURE},

92#include "ARMTargetParser.def"

93};

94

95

96

97constexpr struct {

101#define ARM_HW_DIV_NAME(NAME, ID) {NAME, ID},

102#include "ARMTargetParser.def"

104

105

107#define ARM_ARCH(NAME, ID, CPU_ATTR, ARCH_FEATURE, ARCH_ATTR, ARCH_FPU, \

108 ARCH_BASE_EXT) \

109 ID,

110#include "ARMTargetParser.def"

111};

112

113

114

115

116

123

125#define ARM_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT) \

126 {NAME, ARM::ArchKind::ID, IS_DEFAULT, DEFAULT_EXT},

127#include "ARMTargetParser.def"

129

130

132#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) KIND,

133#include "ARMTargetParser.def"

134 FK_LAST

135};

136

137

147

148

154

158

162

163

169

170

172

173

174

175

176

184

186#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) \

187 {NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION},

188#include "llvm/TargetParser/ARMTargetParser.def"

189};

190

191

192

193

194

195

196

197

210

212#define ARM_ARCH(NAME, ID, CPU_ATTR, ARCH_FEATURE, ARCH_ATTR, ARCH_FPU, \

213 ARCH_BASE_EXT) \

214 {NAME, CPU_ATTR, ARCH_FEATURE, ARCH_FPU, \

215 ARCH_BASE_EXT, ArchKind::ID, ARCH_ATTR},

216#include "llvm/TargetParser/ARMTargetParser.def"

217};

218

220 assert((Kind >= ArchKind::ARMV8A && Kind <= ArchKind::ARMV9_3A) &&

221 "We only expect operator-- to be called with ARMV8/V9");

222 if (Kind == ArchKind::INVALID || Kind == ArchKind::ARMV8A ||

223 Kind == ArchKind::ARMV8_1A || Kind == ArchKind::ARMV9A ||

224 Kind == ArchKind::ARMV8R)

225 Kind = ArchKind::INVALID;

226 else {

227 unsigned KindAsInteger = static_cast<unsigned>(Kind);

228 Kind = static_cast<ArchKind>(--KindAsInteger);

229 }

230 return Kind;

231}

232

233

238

241 std::vector &Features);

243 std::vector &Features);

244

253 std::vector &Features,

254 FPUKind &ArgFPUKind);

256

257

262

263

271

276

277

278

279

280

283

285

286}

287}

288

289#endif

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

This file defines the StringMap class.

static cl::opt< std::set< SPIRV::Extension::Extension >, false, SPIRVExtensionsParser > Extensions("spirv-ext", cl::desc("Specify list of enabled SPIR-V extensions"))

This class consists of common code factored out of the SmallVector class to reduce code duplication b...

StringRef - Represent a constant reference to a string, i.e.

Triple - Helper class for working with autoconf configuration names.

Define some predicates that are used for node matching.

constexpr struct llvm::ARM::@324103115345140202011004052154345301224214323271 HWDivNames[]

LLVM_ABI StringRef getArchExtName(uint64_t ArchExtKind)

LLVM_ABI StringRef getFPUSynonym(StringRef FPU)

LLVM_ABI bool getFPUFeatures(FPUKind FPUKind, std::vector< StringRef > &Features)

LLVM_ABI uint64_t parseHWDiv(StringRef HWDiv)

LLVM_ABI StringRef getCPUAttr(ArchKind AK)

LLVM_ABI StringRef getArchName(ArchKind AK)

LLVM_ABI void fillValidCPUArchList(SmallVectorImpl< StringRef > &Values)

ArchKind

Definition ARMTargetParser.h:106

LLVM_ABI LLVM_READONLY ARMABI computeTargetABI(const Triple &TT, StringRef ABIName="")

FPUVersion

Definition ARMTargetParser.h:138

@ VFPV3_FP16

Definition ARMTargetParser.h:142

@ VFPV5_FULLFP16

Definition ARMTargetParser.h:145

@ VFPV5

Definition ARMTargetParser.h:144

@ VFPV2

Definition ARMTargetParser.h:140

@ VFPV3

Definition ARMTargetParser.h:141

@ VFPV4

Definition ARMTargetParser.h:143

@ NONE

Definition ARMTargetParser.h:139

LLVM_ABI uint64_t parseArchExt(StringRef ArchExt)

LLVM_ABI ArchKind convertV9toV8(ArchKind AK)

LLVM_ABI LLVM_READONLY StringRef computeDefaultTargetABI(const Triple &TT)

NeonSupportLevel

Definition ARMTargetParser.h:164

@ Crypto

Neon with Crypto.

Definition ARMTargetParser.h:167

@ Neon

Neon.

Definition ARMTargetParser.h:166

ARMABI

Definition ARMTargetParser.h:30

@ ARM_ABI_AAPCS

Definition ARMTargetParser.h:33

@ ARM_ABI_APCS

Definition ARMTargetParser.h:32

@ ARM_ABI_UNKNOWN

Definition ARMTargetParser.h:31

@ ARM_ABI_AAPCS16

Definition ARMTargetParser.h:34

LLVM_ABI ArchKind parseArch(StringRef Arch)

LLVM_ABI FPURestriction getFPURestriction(FPUKind FPUKind)

LLVM_ABI bool appendArchExtFeatures(StringRef CPU, ARM::ArchKind AK, StringRef ArchExt, std::vector< StringRef > &Features, FPUKind &ArgFPUKind)

FPUKind

Definition ARMTargetParser.h:131

static constexpr FPUName FPUNames[]

Definition ARMTargetParser.h:185

LLVM_ABI StringRef getDefaultCPU(StringRef Arch)

LLVM_ABI StringRef getArchExtFeature(StringRef ArchExt)

LLVM_ABI ProfileKind parseArchProfile(StringRef Arch)

LLVM_ABI FPUKind parseFPU(StringRef FPU)

LLVM_ABI StringRef getSubArch(ArchKind AK)

uint64_t ID

Definition ARMTargetParser.h:99

LLVM_ABI StringRef getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch={})

Get the (LLVM) name of the minimum ARM CPU for the arch we are targeting.

LLVM_ABI unsigned parseArchVersion(StringRef Arch)

bool has32Regs(const FPURestriction restriction)

Definition ARMTargetParser.h:159

LLVM_ABI NeonSupportLevel getFPUNeonSupportLevel(FPUKind FPUKind)

LLVM_ABI ArchKind parseCPUArch(StringRef CPU)

bool isDoublePrecision(const FPURestriction restriction)

Definition ARMTargetParser.h:155

StringRef Name

Definition ARMTargetParser.h:98

ProfileKind

Definition ARMTargetParser.h:171

@ M

Definition ARMTargetParser.h:171

@ A

Definition ARMTargetParser.h:171

@ INVALID

Definition ARMTargetParser.h:171

@ R

Definition ARMTargetParser.h:171

constexpr ExtName ARCHExtNames[]

Definition ARMTargetParser.h:89

LLVM_ABI unsigned getArchAttr(ArchKind AK)

LLVM_ABI StringRef getFPUName(FPUKind FPUKind)

LLVM_ABI FPUVersion getFPUVersion(FPUKind FPUKind)

ArchKind & operator--(ArchKind &Kind)

Definition ARMTargetParser.h:219

LLVM_ABI bool getHWDivFeatures(uint64_t HWDivKind, std::vector< StringRef > &Features)

FPURestriction

Definition ARMTargetParser.h:149

@ SP_D16

Only single-precision instructions, with 16 D registers.

Definition ARMTargetParser.h:152

@ None

No restriction.

Definition ARMTargetParser.h:150

@ D16

Only 16 D registers.

Definition ARMTargetParser.h:151

LLVM_ABI uint64_t getDefaultExtensions(StringRef CPU, ArchKind AK)

ArchExtKind

Definition ARMTargetParser.h:39

@ AEK_AES

Definition ARMTargetParser.h:56

@ AEK_HWDIVTHUMB

Definition ARMTargetParser.h:45

@ AEK_VIRT

Definition ARMTargetParser.h:50

@ AEK_CDECP6

Definition ARMTargetParser.h:69

@ AEK_SIMD

Definition ARMTargetParser.h:48

@ AEK_SB

Definition ARMTargetParser.h:58

@ AEK_DSP

Definition ARMTargetParser.h:51

@ AEK_IWMMXT2

Definition ARMTargetParser.h:76

@ AEK_CRYPTO

Definition ARMTargetParser.h:43

@ AEK_CDECP5

Definition ARMTargetParser.h:68

@ AEK_FP16FML

Definition ARMTargetParser.h:57

@ AEK_LOB

Definition ARMTargetParser.h:60

@ AEK_I8MM

Definition ARMTargetParser.h:62

@ AEK_SHA2

Definition ARMTargetParser.h:55

@ AEK_BF16

Definition ARMTargetParser.h:61

@ AEK_OS

Definition ARMTargetParser.h:74

@ AEK_FP

Definition ARMTargetParser.h:44

@ AEK_MVE

Definition ARMTargetParser.h:72

@ AEK_IWMMXT

Definition ARMTargetParser.h:75

@ AEK_HWDIVARM

Definition ARMTargetParser.h:46

@ AEK_CDECP7

Definition ARMTargetParser.h:70

@ AEK_NONE

Definition ARMTargetParser.h:41

@ AEK_CRC

Definition ARMTargetParser.h:42

@ AEK_INVALID

Definition ARMTargetParser.h:40

@ AEK_MAVERICK

Definition ARMTargetParser.h:77

@ AEK_XSCALE

Definition ARMTargetParser.h:78

@ AEK_CDECP1

Definition ARMTargetParser.h:64

@ AEK_CDECP3

Definition ARMTargetParser.h:66

@ AEK_RAS

Definition ARMTargetParser.h:53

@ AEK_FP16

Definition ARMTargetParser.h:52

@ AEK_CDECP4

Definition ARMTargetParser.h:67

@ AEK_PACBTI

Definition ARMTargetParser.h:71

@ AEK_FP_DP

Definition ARMTargetParser.h:59

@ AEK_CDECP0

Definition ARMTargetParser.h:63

@ AEK_DOTPROD

Definition ARMTargetParser.h:54

@ AEK_SEC

Definition ARMTargetParser.h:49

@ AEK_MP

Definition ARMTargetParser.h:47

@ AEK_CDECP2

Definition ARMTargetParser.h:65

LLVM_ABI FPUKind getDefaultFPU(StringRef CPU, ArchKind AK)

LLVM_ABI bool getExtensionFeatures(uint64_t Extensions, std::vector< StringRef > &Features)

static constexpr ArchNames ARMArchNames[]

Definition ARMTargetParser.h:211

constexpr CpuNames CPUNames[]

Definition ARMTargetParser.h:124

LLVM_ABI void PrintSupportedExtensions(StringMap< StringRef > DescMap)

This is an optimization pass for GlobalISel generic memory operations.

Definition ARMTargetParser.h:198

StringRef getSubArch() const

Definition ARMTargetParser.h:208

StringRef Name

Definition ARMTargetParser.h:199

uint64_t ArchBaseExtensions

Definition ARMTargetParser.h:203

StringRef ArchFeature

Definition ARMTargetParser.h:201

FPUKind DefaultFPU

Definition ARMTargetParser.h:202

StringRef CPUAttr

Definition ARMTargetParser.h:200

ArchKind ID

Definition ARMTargetParser.h:204

ARMBuildAttrs::CPUArch ArchAttr

Definition ARMTargetParser.h:205

Definition ARMTargetParser.h:117

ArchKind ArchID

Definition ARMTargetParser.h:119

StringRef Name

Definition ARMTargetParser.h:118

uint64_t DefaultExtensions

Definition ARMTargetParser.h:121

bool Default

Definition ARMTargetParser.h:120

Definition ARMTargetParser.h:82

StringRef Feature

Definition ARMTargetParser.h:85

uint64_t ID

Definition ARMTargetParser.h:84

StringRef NegFeature

Definition ARMTargetParser.h:86

StringRef Name

Definition ARMTargetParser.h:83

Definition ARMTargetParser.h:177

FPUKind ID

Definition ARMTargetParser.h:179

FPURestriction Restriction

Definition ARMTargetParser.h:182

FPUVersion FPUVer

Definition ARMTargetParser.h:180

StringRef Name

Definition ARMTargetParser.h:178

NeonSupportLevel NeonSupport

Definition ARMTargetParser.h:181