Skip to content

Commit a8d4a02

Browse files
committed
[Clang][RISCV] Refactor builtins to TableGen
This mechanism is introduced by #68324. This refactor makes the prototype and attributes clear. Reviewers: asb, kito-cheng, philnik777, topperc, preames Reviewed By: topperc Pull Request: #80280
1 parent eb9cd80 commit a8d4a02

File tree

6 files changed

+154
-96
lines changed

6 files changed

+154
-96
lines changed

clang/include/clang/Basic/BuiltinsRISCV.def

Lines changed: 0 additions & 93 deletions
This file was deleted.
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
//==- BuiltinsRISCV.td - RISC-V Builtin function database ---*- tablegen -*-==//
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+
// This file defines the RISC-V-specific builtin function database.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
include "clang/Basic/BuiltinsBase.td"
14+
15+
class RISCVBuiltin<string prototype, string features = ""> : TargetBuiltin {
16+
let Spellings = ["__builtin_riscv_" # NAME];
17+
let Prototype = prototype;
18+
let Features = features;
19+
}
20+
21+
let Attributes = [NoThrow, Const] in {
22+
//===----------------------------------------------------------------------===//
23+
// Zbb extension.
24+
//===----------------------------------------------------------------------===//
25+
def orc_b_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbb">;
26+
def orc_b_64 : RISCVBuiltin<"uint64_t(uint64_t)", "zbb,64bit">;
27+
def clz_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbb|xtheadbb">;
28+
def clz_64 : RISCVBuiltin<"unsigned int(uint64_t)", "zbb|xtheadbb,64bit">;
29+
def ctz_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbb">;
30+
def ctz_64 : RISCVBuiltin<"unsigned int(uint64_t)", "zbb,64bit">;
31+
32+
//===----------------------------------------------------------------------===//
33+
// Zbc or Zbkc extension.
34+
//===----------------------------------------------------------------------===//
35+
def clmul_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)", "zbc|zbkc">;
36+
def clmul_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)", "zbc|zbkc,64bit">;
37+
def clmulh_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)", "zbc|zbkc,32bit">;
38+
def clmulh_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)", "zbc|zbkc,64bit">;
39+
def clmulr_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)", "zbc,32bit">;
40+
def clmulr_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)", "zbc,64bit">;
41+
42+
//===----------------------------------------------------------------------===//
43+
// Zbkx extension.
44+
//===----------------------------------------------------------------------===//
45+
let Features = "zbkx,32bit" in {
46+
def xperm4_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
47+
def xperm8_32 : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
48+
} // Features = "zbkx,32bit"
49+
50+
let Features = "zbkx,64bit" in {
51+
def xperm4_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
52+
def xperm8_64 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
53+
} // Features = "zbkx,64bit"
54+
55+
//===----------------------------------------------------------------------===//
56+
// Zbkb extension.
57+
//===----------------------------------------------------------------------===//
58+
def brev8_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbkb">;
59+
def brev8_64 : RISCVBuiltin<"uint64_t(uint64_t)", "zbkb,64bit">;
60+
def zip_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbkb,32bit">;
61+
def unzip_32 : RISCVBuiltin<"unsigned int(unsigned int)", "zbkb,32bit">;
62+
63+
//===----------------------------------------------------------------------===//
64+
// Zknd extension.
65+
//===----------------------------------------------------------------------===//
66+
let Features = "zknd,32bit" in {
67+
def aes32dsi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
68+
def aes32dsmi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
69+
} // Features = "zknd,32bit"
70+
71+
let Features = "zknd,64bit" in {
72+
def aes64ds : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
73+
def aes64dsm : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
74+
def aes64im : RISCVBuiltin<"uint64_t(uint64_t)">;
75+
} // Features = "zknd,64bit"
76+
77+
//===----------------------------------------------------------------------===//
78+
// Zknd & Zkne extension.
79+
//===----------------------------------------------------------------------===//
80+
let Features = "zknd|zkne,64bit" in {
81+
def aes64ks1i : RISCVBuiltin<"uint64_t(uint64_t, _Constant unsigned int)">;
82+
def aes64ks2 : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
83+
} // Features = "zknd|zkne,64bit"
84+
85+
//===----------------------------------------------------------------------===//
86+
// Zkne extension.
87+
//===----------------------------------------------------------------------===//
88+
let Features = "zkne,32bit" in {
89+
def aes32esi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
90+
def aes32esmi : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
91+
} // Features = "zkne,32bit"
92+
93+
let Features = "zkne,64bit" in {
94+
def aes64es : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
95+
def aes64esm : RISCVBuiltin<"uint64_t(uint64_t, uint64_t)">;
96+
} // Features = "zkne,64bit"
97+
98+
//===----------------------------------------------------------------------===//
99+
// Zknh extension.
100+
//===----------------------------------------------------------------------===//
101+
let Features = "zknh" in {
102+
def sha256sig0 : RISCVBuiltin<"unsigned int(unsigned int)">;
103+
def sha256sig1 : RISCVBuiltin<"unsigned int(unsigned int)">;
104+
def sha256sum0 : RISCVBuiltin<"unsigned int(unsigned int)">;
105+
def sha256sum1 : RISCVBuiltin<"unsigned int(unsigned int)">;
106+
} // Features = "zknh"
107+
108+
let Features = "zknh,32bit" in {
109+
def sha512sig0h : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
110+
def sha512sig0l : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
111+
def sha512sig1h : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
112+
def sha512sig1l : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
113+
def sha512sum0r : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
114+
def sha512sum1r : RISCVBuiltin<"unsigned int(unsigned int, unsigned int)">;
115+
} // Features = "zknh,32bit"
116+
117+
let Features = "zknh,64bit" in {
118+
def sha512sig0 : RISCVBuiltin<"uint64_t(uint64_t)">;
119+
def sha512sig1 : RISCVBuiltin<"uint64_t(uint64_t)">;
120+
def sha512sum0 : RISCVBuiltin<"uint64_t(uint64_t)">;
121+
def sha512sum1 : RISCVBuiltin<"uint64_t(uint64_t)">;
122+
} // Features = "zknh,64bit"
123+
124+
//===----------------------------------------------------------------------===//
125+
// Zksed extension.
126+
//===----------------------------------------------------------------------===//
127+
let Features = "zksed" in {
128+
def sm4ed : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int )">;
129+
def sm4ks : RISCVBuiltin<"unsigned int(unsigned int, unsigned int, _Constant unsigned int)">;
130+
} // Features = "zksed"
131+
132+
//===----------------------------------------------------------------------===//
133+
// Zksh extension.
134+
//===----------------------------------------------------------------------===//
135+
let Features = "zksh" in {
136+
def sm3p0 : RISCVBuiltin<"unsigned int(unsigned int)">;
137+
def sm3p1 : RISCVBuiltin<"unsigned int(unsigned int)">;
138+
} // Features = "zksh"
139+
140+
} // Attributes = [Const, NoThrow]
141+
142+
//===----------------------------------------------------------------------===//
143+
// Zihintntl extension.
144+
//===----------------------------------------------------------------------===//
145+
let Features = "zihintntl", Attributes = [CustomTypeChecking] in {
146+
def ntl_load : RISCVBuiltin<"void(...)">;
147+
def ntl_store : RISCVBuiltin<"void(...)">;
148+
} // Features = "zihintntl", Attributes = [CustomTypeChecking]

clang/include/clang/Basic/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ clang_tablegen(BuiltinsBPF.inc -gen-clang-builtins
6565
SOURCE BuiltinsBPF.td
6666
TARGET ClangBuiltinsBPF)
6767

68+
clang_tablegen(BuiltinsRISCV.inc -gen-clang-builtins
69+
SOURCE BuiltinsRISCV.td
70+
TARGET ClangBuiltinsRISCV)
71+
6872
# ARM NEON and MVE
6973
clang_tablegen(arm_neon.inc -gen-arm-neon-sema
7074
SOURCE arm_neon.td

clang/include/clang/Basic/TargetBuiltins.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ namespace clang {
159159
FirstRVVBuiltin = clang::Builtin::FirstTSBuiltin,
160160
LastRVVBuiltin = RISCVVector::FirstTSBuiltin - 1,
161161
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
162-
#include "clang/Basic/BuiltinsRISCV.def"
162+
#include "clang/Basic/BuiltinsRISCV.inc"
163163
LastTSBuiltin
164164
};
165165
} // namespace RISCV

clang/include/module.modulemap

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ module Clang_Basic {
5454
textual header "clang/Basic/BuiltinsNEON.def"
5555
textual header "clang/Basic/BuiltinsNVPTX.def"
5656
textual header "clang/Basic/BuiltinsPPC.def"
57-
textual header "clang/Basic/BuiltinsRISCV.def"
5857
textual header "clang/Basic/BuiltinsRISCVVector.def"
5958
textual header "clang/Basic/BuiltinsSME.def"
6059
textual header "clang/Basic/BuiltinsSVE.def"

clang/lib/Basic/Targets/RISCV.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ static constexpr Builtin::Info BuiltinInfo[] = {
234234
{#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
235235
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \
236236
{#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
237-
#include "clang/Basic/BuiltinsRISCV.def"
237+
#include "clang/Basic/BuiltinsRISCV.inc"
238238
};
239239

240240
ArrayRef<Builtin::Info> RISCVTargetInfo::getTargetBuiltins() const {

0 commit comments

Comments
 (0)