clang: include/clang/Basic/TargetBuiltins.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15#ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H

16#define LLVM_CLANG_BASIC_TARGETBUILTINS_H

17

18#include

21#include "llvm/Support/MathExtras.h"

22#undef PPC

23

25

26 namespace NEON {

27 enum {

29#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

30#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,

31#include "clang/Basic/BuiltinsNEON.def"

34 }

35

36

37 namespace ARM {

38 enum {

41#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

42#include "clang/Basic/BuiltinsARM.def"

45 }

46

47 namespace SVE {

48 enum {

50#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

51#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,

52#include "clang/Basic/BuiltinsSVE.def"

54 };

55 }

56

57 namespace SME {

58 enum {

60#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

61#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,

62#include "clang/Basic/BuiltinsSME.def"

64 };

65 }

66

67

68 namespace AArch64 {

69 enum {

76 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,

77 #include "clang/Basic/BuiltinsAArch64.def"

80 }

81

82

83 namespace BPF {

84 enum {

86 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,

87 #include "clang/Basic/BuiltinsBPF.inc"

90 }

91

92

93 namespace PPC {

94 enum {

96#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

97#include "clang/Basic/BuiltinsPPC.def"

100 }

101

102

103 namespace NVPTX {

104 enum {

106#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

107#include "clang/Basic/BuiltinsNVPTX.def"

110 }

111

112

113 namespace AMDGPU {

114 enum {

116 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,

117 #include "clang/Basic/BuiltinsAMDGPU.def"

120 }

121

122

123 namespace SPIRV {

124 enum {

126#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

127#include "clang/Basic/BuiltinsSPIRV.inc"

130 }

131

132

133 namespace X86 {

134 enum {

136#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

137#include "clang/Basic/BuiltinsX86.inc"

140#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

141#include "clang/Basic/BuiltinsX86_64.inc"

144 }

145

146

147 namespace VE {

148 enum {

150#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

151#include "clang/Basic/BuiltinsVE.def"

154 }

155

156 namespace RISCVVector {

157 enum {

159#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

160#include "clang/Basic/BuiltinsRISCVVector.def"

162 };

163 }

164

165

166 namespace RISCV {

167 enum {

171#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

172#include "clang/Basic/BuiltinsRISCV.inc"

175 }

176

177

178 namespace LoongArch {

179 enum {

181#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

182#include "clang/Basic/BuiltinsLoongArch.def"

185 }

186

187

188

189

191 enum {

192 EltTypeMask = 0xf,

193 UnsignedFlag = 0x10,

194 QuadFlag = 0x20

195 };

196 uint32_t Flags;

197

198 public:

213

216 if (IsUnsigned)

217 Flags |= UnsignedFlag;

218 if (IsQuad)

219 Flags |= QuadFlag;

220 }

221

226 }

227 bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; }

228 bool isQuad() const { return (Flags & QuadFlag) != 0; }

233 return 8;

238 return 16;

241 return 32;

245 return 64;

247 return 128;

248 }

249 llvm_unreachable("Invalid NeonTypeFlag!");

250 }

251 };

252

253

255#define LLVM_GET_ARM_INTRIN_IMMCHECKTYPES

256#include "clang/Basic/arm_immcheck_types.inc"

257#undef LLVM_GET_ARM_INTRIN_IMMCHECKTYPES

258 };

259

260

262 uint64_t Flags;

263 unsigned EltTypeShift;

264 unsigned MemEltTypeShift;

265 unsigned MergeTypeShift;

266 unsigned SplatOperandMaskShift;

267

268 public:

269#define LLVM_GET_SVE_TYPEFLAGS

270#include "clang/Basic/arm_sve_typeflags.inc"

271#undef LLVM_GET_SVE_TYPEFLAGS

272

274#define LLVM_GET_SVE_ELTTYPES

275#include "clang/Basic/arm_sve_typeflags.inc"

276#undef LLVM_GET_SVE_ELTTYPES

277 };

278

280#define LLVM_GET_SVE_MEMELTTYPES

281#include "clang/Basic/arm_sve_typeflags.inc"

282#undef LLVM_GET_SVE_MEMELTTYPES

283 };

284

286#define LLVM_GET_SVE_MERGETYPES

287#include "clang/Basic/arm_sve_typeflags.inc"

288#undef LLVM_GET_SVE_MERGETYPES

289 };

290

292 EltTypeShift = llvm::countr_zero(EltTypeMask);

293 MemEltTypeShift = llvm::countr_zero(MemEltTypeMask);

294 MergeTypeShift = llvm::countr_zero(MergeTypeMask);

295 SplatOperandMaskShift = llvm::countr_zero(SplatOperandMask);

296 }

297

299 return (EltType)((Flags & EltTypeMask) >> EltTypeShift);

300 }

301

303 return (MemEltType)((Flags & MemEltTypeMask) >> MemEltTypeShift);

304 }

305

307 return (MergeType)((Flags & MergeTypeMask) >> MergeTypeShift);

308 }

309

311 return ((Flags & SplatOperandMask) >> SplatOperandMaskShift) - 1;

312 }

313

315 return Flags & SplatOperandMask;

316 }

317

318 bool isLoad() const { return Flags & IsLoad; }

319 bool isStore() const { return Flags & IsStore; }

320 bool isGatherLoad() const { return Flags & IsGatherLoad; }

322 bool isStructLoad() const { return Flags & IsStructLoad; }

324 bool isZExtReturn() const { return Flags & IsZExtReturn; }

328 return Flags & IsOverloadWhileOrMultiVecCvt;

329 }

333 bool isPrefetch() const { return Flags & IsPrefetch; }

341 bool isUndef() const { return Flags & IsUndef; }

343 bool isTupleGet() const { return Flags & IsTupleGet; }

344 bool isTupleSet() const { return Flags & IsTupleSet; }

345 bool isReadZA() const { return Flags & IsReadZA; }

346 bool isWriteZA() const { return Flags & IsWriteZA; }

347 bool setsFPMR() const { return Flags & SetsFPMR; }

349 uint64_t getBits() const { return Flags; }

350 bool isFlagSet(uint64_t Flag) const { return Flags & Flag; }

351 };

352

353

354 namespace Hexagon {

355 enum {

357#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

358#include "clang/Basic/BuiltinsHexagon.def"

361 }

362

363

364 namespace Mips {

365 enum {

367#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

368#include "clang/Basic/BuiltinsMips.def"

371 }

372

373

374 namespace XCore {

375 enum {

377#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

378#include "clang/Basic/BuiltinsXCore.def"

381 }

382

383

384 namespace SystemZ {

385 enum {

387#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

388#include "clang/Basic/BuiltinsSystemZ.def"

391 }

392

393

394 namespace WebAssembly {

395 enum {

397#define BUILTIN(ID, TYPE, ATTRS) BI##ID,

398#include "clang/Basic/BuiltinsWebAssembly.def"

401 }

402

409

410}

411

412#endif

Defines enum values for all the target-independent builtin functions.

Flags to identify the types for overloaded Neon builtins.

NeonTypeFlags(unsigned F)

unsigned getEltSizeInBits() const

EltType getEltType() const

NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad)

Flags to identify the types for overloaded SVE builtins.

bool isZExtReturn() const

bool isReverseUSDOT() const

bool isOverloadNone() const

MemEltType getMemEltType() const

bool isGatherLoad() const

bool isOverloadCvt() const

EltType getEltType() const

bool isOverloadDefault() const

bool isOverloadWhileRW() const

bool isReverseMergeAnyAccOp() const

bool isReductionQV() const

bool isFlagSet(uint64_t Flag) const

bool isInsertOp1SVALL() const

bool isAppendSVALL() const

bool isReverseMergeAnyBinOp() const

bool isStructStore() const

bool isTupleCreate() const

bool isGatherPrefetch() const

bool hasSplatOperand() const

MergeType getMergeType() const

bool isByteIndexed() const

bool isStructLoad() const

bool isOverloadWhileOrMultiVecCvt() const

unsigned getSplatOperand() const

bool isScatterStore() const

bool isReverseCompare() const

The JSON file list parser is used to communicate input to InstallAPI.

static constexpr uint64_t LargestBuiltinID