Skip to content

Commit 9339601

Browse files
[AArch64] support .arch_extension for features that the CLI also accepts (#169999)
fixes #146866 The CLI and `.arch_extension` use a different list of features, and some features that the CLI supports cannot currently be toggled using `.arch_extension`. This PR fixes that, adding support for `.arch_extension` for the following features: - `dit` - `brbe` - `bti` - `fcma` - `jscvt` - `pauth` - `ssve` - `wfxt` The issue discusses that it is unfortunate that command line flag parsing and assembly parsing don't share the infrastructure for recognizing features, which can lead to inconsistencies like here. I don't really see how I can combine them though, so for now this change will fix the immediate problem. --------- Co-authored-by: David Spickett <[email protected]>
1 parent 16aa79d commit 9339601

File tree

4 files changed

+67
-26
lines changed

4 files changed

+67
-26
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def HasJS : Predicate<"Subtarget->hasJS()">,
6767
def HasCCIDX : Predicate<"Subtarget->hasCCIDX()">,
6868
AssemblerPredicateWithAll<(all_of FeatureCCIDX), "ccidx">;
6969
def HasComplxNum : Predicate<"Subtarget->hasComplxNum()">,
70-
AssemblerPredicateWithAll<(all_of FeatureComplxNum), "complxnum">;
70+
AssemblerPredicateWithAll<(all_of FeatureComplxNum), "fcma">;
7171
def HasNV : Predicate<"Subtarget->hasNV()">,
7272
AssemblerPredicateWithAll<(all_of FeatureNV), "nv">;
7373
def HasMPAM : Predicate<"Subtarget->hasMPAM()">,

llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3954,6 +3954,14 @@ static const struct Extension {
39543954
{"poe2", {AArch64::FeatureS1POE2}},
39553955
{"tev", {AArch64::FeatureTEV}},
39563956
{"btie", {AArch64::FeatureBTIE}},
3957+
{"dit", {AArch64::FeatureDIT}},
3958+
{"brbe", {AArch64::FeatureBRBE}},
3959+
{"bti", {AArch64::FeatureBranchTargetId}},
3960+
{"fcma", {AArch64::FeatureComplxNum}},
3961+
{"jscvt", {AArch64::FeatureJS}},
3962+
{"pauth-lr", {AArch64::FeaturePAuthLR}},
3963+
{"ssve-fexpa", {AArch64::FeatureSSVE_FEXPA}},
3964+
{"wfxt", {AArch64::FeatureWFxT}},
39573965
};
39583966

39593967
static void setRequiredFeatureString(FeatureBitset FBS, std::string &Str) {

llvm/test/MC/AArch64/armv8.3a-complex_missing.s

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,79 +25,79 @@ fcmla v0.4s, v1.4s, v2.s[0], #270
2525
fcmla v0.4h, v1.4h, v2.h[1], #0
2626
fcmla v0.8h, v1.8h, v2.h[3], #0
2727
fcmla v0.4s, v1.4s, v2.s[1], #0
28-
//CHECK: {{.*}} error: instruction requires: complxnum
28+
//CHECK: {{.*}} error: instruction requires: fcma
2929
//CHECK-NEXT: fcmla v0.4h, v1.4h, v2.4h, #0
3030
//CHECK-NEXT: ^
31-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
31+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
3232
//CHECK-NEXT: fcmla v0.8h, v1.8h, v2.8h, #0
3333
//CHECK-NEXT: ^
34-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
34+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
3535
//CHECK-NEXT: fcmla v0.2s, v1.2s, v2.2s, #0
3636
//CHECK-NEXT: ^
37-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
37+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
3838
//CHECK-NEXT: fcmla v0.4s, v1.4s, v2.4s, #0
3939
//CHECK-NEXT: ^
40-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
40+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
4141
//CHECK-NEXT: fcmla v0.2d, v1.2d, v2.2d, #0
4242
//CHECK-NEXT: ^
43-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
43+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
4444
//CHECK-NEXT: fcmla v0.2s, v1.2s, v2.2s, #0
4545
//CHECK-NEXT: ^
46-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
46+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
4747
//CHECK-NEXT: fcmla v0.2s, v1.2s, v2.2s, #90
4848
//CHECK-NEXT: ^
49-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
49+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
5050
//CHECK-NEXT: fcmla v0.2s, v1.2s, v2.2s, #180
5151
//CHECK-NEXT: ^
52-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
52+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
5353
//CHECK-NEXT: fcmla v0.2s, v1.2s, v2.2s, #270
5454
//CHECK-NEXT: ^
55-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
55+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
5656
//CHECK-NEXT: fcadd v0.4h, v1.4h, v2.4h, #90
5757
//CHECK-NEXT: ^
58-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
58+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
5959
//CHECK-NEXT: fcadd v0.8h, v1.8h, v2.8h, #90
6060
//CHECK-NEXT: ^
61-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
61+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
6262
//CHECK-NEXT: fcadd v0.2s, v1.2s, v2.2s, #90
6363
//CHECK-NEXT: ^
64-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
64+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
6565
//CHECK-NEXT: fcadd v0.4s, v1.4s, v2.4s, #90
6666
//CHECK-NEXT: ^
67-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
67+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
6868
//CHECK-NEXT: fcadd v0.2d, v1.2d, v2.2d, #90
6969
//CHECK-NEXT: ^
70-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
70+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
7171
//CHECK-NEXT: fcadd v0.2s, v1.2s, v2.2s, #90
7272
//CHECK-NEXT: ^
73-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
73+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
7474
//CHECK-NEXT: fcadd v0.2s, v1.2s, v2.2s, #270
7575
//CHECK-NEXT: ^
76-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
76+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
7777
//CHECK-NEXT: fcmla v0.4h, v1.4h, v2.h[0], #0
7878
//CHECK-NEXT: ^
79-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
79+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
8080
//CHECK-NEXT: fcmla v0.8h, v1.8h, v2.h[0], #0
8181
//CHECK-NEXT: ^
82-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
82+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
8383
//CHECK-NEXT: fcmla v0.4s, v1.4s, v2.s[0], #0
8484
//CHECK-NEXT: ^
85-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
85+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
8686
//CHECK-NEXT: fcmla v0.4s, v1.4s, v2.s[0], #90
8787
//CHECK-NEXT: ^
88-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
88+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
8989
//CHECK-NEXT: fcmla v0.4s, v1.4s, v2.s[0], #180
9090
//CHECK-NEXT: ^
91-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
91+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
9292
//CHECK-NEXT: fcmla v0.4s, v1.4s, v2.s[0], #270
9393
//CHECK-NEXT: ^
94-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
94+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
9595
//CHECK-NEXT: fcmla v0.4h, v1.4h, v2.h[1], #0
9696
//CHECK-NEXT: ^
97-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
97+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
9898
//CHECK-NEXT: fcmla v0.8h, v1.8h, v2.h[3], #0
9999
//CHECK-NEXT: ^
100-
//CHECK-NEXT: {{.*}} error: instruction requires: complxnum
100+
//CHECK-NEXT: {{.*}} error: instruction requires: fcma
101101
//CHECK-NEXT: fcmla v0.4s, v1.4s, v2.s[1], #0
102102
//CHECK-NEXT: ^
103103

llvm/test/MC/AArch64/directive-arch_extension.s

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,3 +197,36 @@ fmmla v1.8h, v2.16b, v3.16b
197197
.arch_extension f8f32mm
198198
fmmla v1.4s, v2.16b, v3.16b
199199
// CHECK: fmmla v1.4s, v2.16b, v3.16b
200+
201+
.arch_extension dit
202+
msr DIT, #1
203+
// CHECK: msr DIT, #1
204+
205+
.arch_extension brbe
206+
brb iall
207+
// CHECK: brb iall
208+
209+
.arch_extension pauth-lr
210+
autiasppc #0
211+
// CHECK: autiasppc #0
212+
213+
.arch_extension wfxt
214+
wfit x0
215+
// CHECK: wfit x0
216+
217+
.arch armv8-a
218+
.arch_extension ssve-fexpa
219+
fexpa z0.s, z31.s
220+
// CHECK: fexpa z0.s, z31.s
221+
222+
.arch_extension jscvt
223+
fjcvtzs w0, d0
224+
// CHECK: fjcvtzs w0, d0
225+
226+
.arch_extension fcma
227+
fcmla v0.4s, v1.4s, v2.4s, #0
228+
// CHECK: fcmla v0.4s, v1.4s, v2.4s, #0
229+
230+
.arch_extension bti
231+
bti c
232+
// CHECK: bti c

0 commit comments

Comments
 (0)