Skip to content

Commit f86d264

Browse files
authored
[RISCV] Add subtarget features for profiles
This may simplify the usage of tools like `opt`, `llc`, etc. Reviewers: michaelmaitland, 4vtomat, preames, asb Reviewed By: michaelmaitland, preames, 4vtomat Pull Request: #84877
1 parent 7037878 commit f86d264

File tree

3 files changed

+235
-0
lines changed

3 files changed

+235
-0
lines changed

llvm/lib/Target/RISCV/RISCV.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ include "llvm/Target/Target.td"
1414

1515
include "RISCVFeatures.td"
1616

17+
//===----------------------------------------------------------------------===//
18+
// RISC-V profiles supported.
19+
//===----------------------------------------------------------------------===//
20+
21+
include "RISCVProfiles.td"
22+
1723
//===----------------------------------------------------------------------===//
1824
// Named operands for CSR instructions.
1925
//===----------------------------------------------------------------------===//
Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
//===------ RISCVProfiles.td - RISC-V Profiles -------------*- 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+
class RISCVProfile<string name, list<SubtargetFeature> features>
10+
: SubtargetFeature<name, "Is" # NAME, "true",
11+
"RISC-V " # name # " profile", features>;
12+
13+
defvar RVI20U32Features = [Feature32Bit, FeatureStdExtI];
14+
defvar RVI20U64Features = [Feature64Bit, FeatureStdExtI];
15+
16+
defvar RVA20U64Features = [Feature64Bit,
17+
FeatureStdExtI,
18+
FeatureStdExtM,
19+
FeatureStdExtA,
20+
FeatureStdExtF,
21+
FeatureStdExtD,
22+
FeatureStdExtC,
23+
FeatureStdExtZicntr,
24+
FeatureStdExtZiccif,
25+
FeatureStdExtZiccrse,
26+
FeatureStdExtZiccamoa,
27+
FeatureStdExtZa128rs,
28+
FeatureStdExtZicclsm];
29+
30+
defvar RVA20S64Features = !listconcat(RVA20U64Features,
31+
[FeatureStdExtZifencei,
32+
FeatureStdExtSvbare,
33+
FeatureStdExtSvade,
34+
FeatureStdExtSsccptr,
35+
FeatureStdExtSstvecd,
36+
FeatureStdExtSstvala]);
37+
38+
defvar RVA22U64Features = [Feature64Bit,
39+
FeatureStdExtI,
40+
FeatureStdExtM,
41+
FeatureStdExtA,
42+
FeatureStdExtF,
43+
FeatureStdExtD,
44+
FeatureStdExtC,
45+
FeatureStdExtZicntr,
46+
FeatureStdExtZiccif,
47+
FeatureStdExtZiccrse,
48+
FeatureStdExtZiccamoa,
49+
FeatureStdExtZicclsm,
50+
FeatureStdExtZa64rs,
51+
FeatureStdExtZihpm,
52+
FeatureStdExtZihintpause,
53+
FeatureStdExtZba,
54+
FeatureStdExtZbb,
55+
FeatureStdExtZbs,
56+
FeatureStdExtZic64b,
57+
FeatureStdExtZicbom,
58+
FeatureStdExtZicbop,
59+
FeatureStdExtZicboz,
60+
FeatureStdExtZfhmin,
61+
FeatureStdExtZkt];
62+
63+
defvar RVA22S64Features = !listconcat(RVA22U64Features,
64+
[FeatureStdExtZifencei,
65+
FeatureStdExtSvbare,
66+
FeatureStdExtSvade,
67+
FeatureStdExtSsccptr,
68+
FeatureStdExtSstvecd,
69+
FeatureStdExtSstvala,
70+
FeatureStdExtSscounterenw,
71+
FeatureStdExtSvpbmt,
72+
FeatureStdExtSvinval]);
73+
74+
defvar RVA23U64Features = [Feature64Bit,
75+
FeatureStdExtI,
76+
FeatureStdExtM,
77+
FeatureStdExtA,
78+
FeatureStdExtF,
79+
FeatureStdExtD,
80+
FeatureStdExtC,
81+
FeatureStdExtZicntr,
82+
FeatureStdExtZihpm,
83+
FeatureStdExtZiccif,
84+
FeatureStdExtZiccrse,
85+
FeatureStdExtZiccamoa,
86+
FeatureStdExtZicclsm,
87+
FeatureStdExtZa64rs,
88+
FeatureStdExtZihintpause,
89+
FeatureStdExtZba,
90+
FeatureStdExtZbb,
91+
FeatureStdExtZbs,
92+
FeatureStdExtZic64b,
93+
FeatureStdExtZicbom,
94+
FeatureStdExtZicbop,
95+
FeatureStdExtZicboz,
96+
FeatureStdExtZfhmin,
97+
FeatureStdExtZkt,
98+
FeatureStdExtV,
99+
FeatureStdExtZvfhmin,
100+
FeatureStdExtZvbb,
101+
FeatureStdExtZvkt,
102+
FeatureStdExtZihintntl,
103+
FeatureStdExtZicond,
104+
FeatureStdExtZimop,
105+
FeatureStdExtZcmop,
106+
FeatureStdExtZcb,
107+
FeatureStdExtZfa,
108+
FeatureStdExtZawrs];
109+
110+
defvar RVA23S64Features = !listconcat(RVA23U64Features,
111+
[FeatureStdExtZifencei,
112+
FeatureStdExtSvbare,
113+
FeatureStdExtSvade,
114+
FeatureStdExtSsccptr,
115+
FeatureStdExtSstvecd,
116+
FeatureStdExtSstvala,
117+
FeatureStdExtSscounterenw,
118+
FeatureStdExtSvpbmt,
119+
FeatureStdExtSvinval,
120+
FeatureStdExtSvnapot,
121+
FeatureStdExtSstc,
122+
FeatureStdExtSscofpmf,
123+
FeatureStdExtSsnpm,
124+
FeatureStdExtSsu64xl,
125+
FeatureStdExtH,
126+
FeatureStdExtSsstateen,
127+
FeatureStdExtShcounterenw,
128+
FeatureStdExtShvstvala,
129+
FeatureStdExtShtvala,
130+
FeatureStdExtShvstvecd,
131+
FeatureStdExtShvsatpa,
132+
FeatureStdExtShgatpa]);
133+
134+
defvar RVB23U64Features = [Feature64Bit,
135+
FeatureStdExtI,
136+
FeatureStdExtM,
137+
FeatureStdExtA,
138+
FeatureStdExtF,
139+
FeatureStdExtD,
140+
FeatureStdExtC,
141+
FeatureStdExtZicntr,
142+
FeatureStdExtZihpm,
143+
FeatureStdExtZiccif,
144+
FeatureStdExtZiccrse,
145+
FeatureStdExtZiccamoa,
146+
FeatureStdExtZicclsm,
147+
FeatureStdExtZa64rs,
148+
FeatureStdExtZihintpause,
149+
FeatureStdExtZba,
150+
FeatureStdExtZbb,
151+
FeatureStdExtZbs,
152+
FeatureStdExtZic64b,
153+
FeatureStdExtZicbom,
154+
FeatureStdExtZicbop,
155+
FeatureStdExtZicboz,
156+
FeatureStdExtZkt,
157+
FeatureStdExtZihintntl,
158+
FeatureStdExtZicond,
159+
FeatureStdExtZimop,
160+
FeatureStdExtZcmop,
161+
FeatureStdExtZcb,
162+
FeatureStdExtZfa,
163+
FeatureStdExtZawrs];
164+
165+
defvar RVB23S64Features = !listconcat(RVB23U64Features,
166+
[FeatureStdExtZifencei,
167+
FeatureStdExtSvnapot,
168+
FeatureStdExtSvbare,
169+
FeatureStdExtSvade,
170+
FeatureStdExtSsccptr,
171+
FeatureStdExtSstvecd,
172+
FeatureStdExtSstvala,
173+
FeatureStdExtSscounterenw,
174+
FeatureStdExtSvpbmt,
175+
FeatureStdExtSvinval,
176+
FeatureStdExtSstc,
177+
FeatureStdExtSscofpmf,
178+
FeatureStdExtSsu64xl]);
179+
180+
defvar RVM23U32Features = [Feature32Bit,
181+
FeatureStdExtI,
182+
FeatureStdExtM,
183+
FeatureStdExtZba,
184+
FeatureStdExtZbb,
185+
FeatureStdExtZbs,
186+
FeatureStdExtZicond,
187+
FeatureStdExtZihintpause,
188+
FeatureStdExtZihintntl,
189+
FeatureStdExtZce,
190+
FeatureStdExtZicbop,
191+
FeatureStdExtZimop,
192+
FeatureStdExtZcmop];
193+
194+
def RVI20U32 : RISCVProfile<"rvi20u32", RVI20U32Features>;
195+
def RVI20U64 : RISCVProfile<"rvi20u64", RVI20U64Features>;
196+
def RVA20U64 : RISCVProfile<"rva20u64", RVA20U64Features>;
197+
def RVA20S64 : RISCVProfile<"rva20s64", RVA20S64Features>;
198+
def RVA22U64 : RISCVProfile<"rva22u64", RVA22U64Features>;
199+
def RVA22S64 : RISCVProfile<"rva22s64", RVA22S64Features>;
200+
def RVA23U64 : RISCVProfile<"rva23u64", RVA23U64Features>;
201+
def RVA23S64 : RISCVProfile<"rva23s64", RVA23S64Features>;
202+
def RVB23U64 : RISCVProfile<"rvb23u64", RVB23U64Features>;
203+
def RVB23S64 : RISCVProfile<"rvb23s64", RVB23S64Features>;
204+
def RVM23U32 : RISCVProfile<"rvm23u32", RVM23U32Features>;

llvm/test/CodeGen/RISCV/attributes.ll

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,19 @@
256256
; RUN: llc -mtriple=riscv64 -mattr=+experimental-supm %s -o - | FileCheck --check-prefix=RV64SUPM %s
257257
; RUN: llc -mtriple=riscv64 -mattr=+experimental-ssqosid %s -o - | FileCheck --check-prefix=RV64SSQOSID %s
258258

259+
; Tests for profile features.
260+
; RUN: llc -mtriple=riscv32 -mattr=+rvi20u32 %s -o - | FileCheck --check-prefix=RVI20U32 %s
261+
; RUN: llc -mtriple=riscv64 -mattr=+rvi20u64 %s -o - | FileCheck --check-prefix=RVI20U64 %s
262+
; RUN: llc -mtriple=riscv64 -mattr=+rva20u64 %s -o - | FileCheck --check-prefix=RVA20U64 %s
263+
; RUN: llc -mtriple=riscv64 -mattr=+rva20s64 %s -o - | FileCheck --check-prefix=RVA20S64 %s
264+
; RUN: llc -mtriple=riscv64 -mattr=+rva22u64 %s -o - | FileCheck --check-prefix=RVA22U64 %s
265+
; RUN: llc -mtriple=riscv64 -mattr=+rva22s64 %s -o - | FileCheck --check-prefix=RVA22S64 %s
266+
; RUN: llc -mtriple=riscv64 -mattr=+rva23u64 %s -o - | FileCheck --check-prefix=RVA23U64 %s
267+
; RUN: llc -mtriple=riscv64 -mattr=+rva23s64 %s -o - | FileCheck --check-prefix=RVA23S64 %s
268+
; RUN: llc -mtriple=riscv64 -mattr=+rvb23u64 %s -o - | FileCheck --check-prefix=RVB23U64 %s
269+
; RUN: llc -mtriple=riscv64 -mattr=+rvb23s64 %s -o - | FileCheck --check-prefix=RVB23S64 %s
270+
; RUN: llc -mtriple=riscv32 -mattr=+rvm23u32 %s -o - | FileCheck --check-prefix=RVM23U32 %s
271+
259272
; CHECK: .attribute 4, 16
260273

261274
; RV32M: .attribute 5, "rv32i2p1_m2p0"
@@ -512,6 +525,18 @@
512525
; RV64SUPM: .attribute 5, "rv64i2p1_supm0p8"
513526
; RV64SSQOSID: .attribute 5, "rv64i2p1_ssqosid1p0"
514527

528+
; RVI20U32: .attribute 5, "rv32i2p1"
529+
; RVI20U64: .attribute 5, "rv64i2p1"
530+
; RVA20U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_za128rs1p0"
531+
; RVA20S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zifencei2p0_za128rs1p0_ssccptr1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0"
532+
; RVA22U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"
533+
; RVA22S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zifencei2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscounterenw1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0_svinval1p0_svpbmt1p0"
534+
; RVA23U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
535+
; RVA23S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_h1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0_shcounterenw1p0_shgatpa1p0_shtvala1p0_shvsatpa1p0_shvstvala1p0_shvstvecd1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_ssnpm0p8_ssstateen1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"
536+
; RVB23U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"
537+
; RVB23S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"
538+
; RVM23U32: .attribute 5, "rv32i2p1_m2p0_zicbop1p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zimop1p0_zca1p0_zcb1p0_zce1p0_zcmop1p0_zcmp1p0_zcmt1p0_zba1p0_zbb1p0_zbs1p0"
539+
515540
define i32 @addi(i32 %a) {
516541
%1 = add i32 %a, 1
517542
ret i32 %1

0 commit comments

Comments
 (0)