1import("//llvm/utils/TableGen/tablegen.gni")
2
3tablegen("Attributes") {
4  visibility = [ ":public_tablegen" ]
5  args = [ "-gen-attrs" ]
6}
7
8tablegen("IntrinsicImpl") {
9  visibility = [ "//llvm/lib/IR" ]
10  args = [ "-gen-intrinsic-impl" ]
11  td_file = "Intrinsics.td"
12}
13
14tablegen("IntrinsicEnums") {
15  visibility = [ ":public_tablegen" ]
16  args = [ "-gen-intrinsic-enums" ]
17  td_file = "Intrinsics.td"
18}
19
20template("gen_arch_intrinsics") {
21  tablegen(target_name) {
22    visibility = [ ":public_tablegen" ]
23    output_name = "$target_name.h"
24    args = [
25      "-gen-intrinsic-enums",
26      "-intrinsic-prefix=${invoker.intrinsic_prefix}",
27    ]
28    td_file = "Intrinsics.td"
29  }
30}
31
32gen_arch_intrinsics("IntrinsicsAArch64") {
33  intrinsic_prefix = "aarch64"
34}
35
36gen_arch_intrinsics("IntrinsicsAMDGPU") {
37  intrinsic_prefix = "amdgcn"
38}
39
40gen_arch_intrinsics("IntrinsicsARM") {
41  intrinsic_prefix = "arm"
42}
43
44gen_arch_intrinsics("IntrinsicsBPF") {
45  intrinsic_prefix = "bpf"
46}
47
48gen_arch_intrinsics("IntrinsicsDirectX") {
49  intrinsic_prefix = "dx"
50}
51
52gen_arch_intrinsics("IntrinsicsHexagon") {
53  intrinsic_prefix = "hexagon"
54}
55
56gen_arch_intrinsics("IntrinsicsLoongArch") {
57  intrinsic_prefix = "loongarch"
58}
59
60gen_arch_intrinsics("IntrinsicsMips") {
61  intrinsic_prefix = "mips"
62}
63
64gen_arch_intrinsics("IntrinsicsNVPTX") {
65  intrinsic_prefix = "nvvm"
66}
67
68gen_arch_intrinsics("IntrinsicsPowerPC") {
69  intrinsic_prefix = "ppc"
70}
71
72gen_arch_intrinsics("IntrinsicsR600") {
73  intrinsic_prefix = "r600"
74}
75
76gen_arch_intrinsics("IntrinsicsRISCV") {
77  intrinsic_prefix = "riscv"
78}
79
80gen_arch_intrinsics("IntrinsicsS390") {
81  intrinsic_prefix = "s390"
82}
83
84gen_arch_intrinsics("IntrinsicsVE") {
85  intrinsic_prefix = "ve"
86}
87
88gen_arch_intrinsics("IntrinsicsWebAssembly") {
89  intrinsic_prefix = "wasm"
90}
91
92gen_arch_intrinsics("IntrinsicsX86") {
93  intrinsic_prefix = "x86"
94}
95
96gen_arch_intrinsics("IntrinsicsXCore") {
97  intrinsic_prefix = "xcore"
98}
99
100# Groups all tablegen() calls that create .inc files that are included in
101# IR's public headers.  //llvm/lib/IR has this as a public_dep, so targets
102# depending on //llvm/lib/IR don't need to depend on this.  This exists
103# solely for targets that use IR's public headers but don't link against IR.
104group("public_tablegen") {
105  public_deps = [
106    # IR's public headers include Attributes.inc.
107    ":Attributes",
108
109    # IR's public headers include IntrinsicEnums.inc.
110    ":IntrinsicEnums",
111
112    # FIXME: These are only included from .cpp files at first glance.
113    # Try removing them from the public_tablegen target.
114    ":IntrinsicsAArch64",
115    ":IntrinsicsAMDGPU",
116    ":IntrinsicsARM",
117    ":IntrinsicsBPF",
118    ":IntrinsicsDirectX",
119    ":IntrinsicsHexagon",
120    ":IntrinsicsLoongArch",
121    ":IntrinsicsMips",
122    ":IntrinsicsNVPTX",
123    ":IntrinsicsPowerPC",
124    ":IntrinsicsR600",
125    ":IntrinsicsRISCV",
126    ":IntrinsicsS390",
127    ":IntrinsicsVE",
128    ":IntrinsicsWebAssembly",
129    ":IntrinsicsX86",
130    ":IntrinsicsXCore",
131  ]
132}
133