Skip to content

Commit e90ea09

Browse files
[AArch64][AsmParser] Support SVE conditions even without +sve. (#141585)
They're just aliases.
1 parent 42b1df4 commit e90ea09

File tree

2 files changed

+37
-60
lines changed

2 files changed

+37
-60
lines changed

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

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3499,43 +3499,40 @@ AArch64AsmParser::tryParseImmWithOptionalShift(OperandVector &Operands) {
34993499
AArch64CC::CondCode
35003500
AArch64AsmParser::parseCondCodeString(StringRef Cond, std::string &Suggestion) {
35013501
AArch64CC::CondCode CC = StringSwitch<AArch64CC::CondCode>(Cond.lower())
3502-
.Case("eq", AArch64CC::EQ)
3503-
.Case("ne", AArch64CC::NE)
3504-
.Case("cs", AArch64CC::HS)
3505-
.Case("hs", AArch64CC::HS)
3506-
.Case("cc", AArch64CC::LO)
3507-
.Case("lo", AArch64CC::LO)
3508-
.Case("mi", AArch64CC::MI)
3509-
.Case("pl", AArch64CC::PL)
3510-
.Case("vs", AArch64CC::VS)
3511-
.Case("vc", AArch64CC::VC)
3512-
.Case("hi", AArch64CC::HI)
3513-
.Case("ls", AArch64CC::LS)
3514-
.Case("ge", AArch64CC::GE)
3515-
.Case("lt", AArch64CC::LT)
3516-
.Case("gt", AArch64CC::GT)
3517-
.Case("le", AArch64CC::LE)
3518-
.Case("al", AArch64CC::AL)
3519-
.Case("nv", AArch64CC::NV)
3520-
.Default(AArch64CC::Invalid);
3521-
3522-
if (CC == AArch64CC::Invalid && getSTI().hasFeature(AArch64::FeatureSVE)) {
3523-
CC = StringSwitch<AArch64CC::CondCode>(Cond.lower())
3524-
.Case("none", AArch64CC::EQ)
3525-
.Case("any", AArch64CC::NE)
3526-
.Case("nlast", AArch64CC::HS)
3527-
.Case("last", AArch64CC::LO)
3528-
.Case("first", AArch64CC::MI)
3529-
.Case("nfrst", AArch64CC::PL)
3530-
.Case("pmore", AArch64CC::HI)
3531-
.Case("plast", AArch64CC::LS)
3532-
.Case("tcont", AArch64CC::GE)
3533-
.Case("tstop", AArch64CC::LT)
3534-
.Default(AArch64CC::Invalid);
3535-
3536-
if (CC == AArch64CC::Invalid && Cond.lower() == "nfirst")
3537-
Suggestion = "nfrst";
3538-
}
3502+
.Case("eq", AArch64CC::EQ)
3503+
.Case("ne", AArch64CC::NE)
3504+
.Case("cs", AArch64CC::HS)
3505+
.Case("hs", AArch64CC::HS)
3506+
.Case("cc", AArch64CC::LO)
3507+
.Case("lo", AArch64CC::LO)
3508+
.Case("mi", AArch64CC::MI)
3509+
.Case("pl", AArch64CC::PL)
3510+
.Case("vs", AArch64CC::VS)
3511+
.Case("vc", AArch64CC::VC)
3512+
.Case("hi", AArch64CC::HI)
3513+
.Case("ls", AArch64CC::LS)
3514+
.Case("ge", AArch64CC::GE)
3515+
.Case("lt", AArch64CC::LT)
3516+
.Case("gt", AArch64CC::GT)
3517+
.Case("le", AArch64CC::LE)
3518+
.Case("al", AArch64CC::AL)
3519+
.Case("nv", AArch64CC::NV)
3520+
// SVE condition code aliases:
3521+
.Case("none", AArch64CC::EQ)
3522+
.Case("any", AArch64CC::NE)
3523+
.Case("nlast", AArch64CC::HS)
3524+
.Case("last", AArch64CC::LO)
3525+
.Case("first", AArch64CC::MI)
3526+
.Case("nfrst", AArch64CC::PL)
3527+
.Case("pmore", AArch64CC::HI)
3528+
.Case("plast", AArch64CC::LS)
3529+
.Case("tcont", AArch64CC::GE)
3530+
.Case("tstop", AArch64CC::LT)
3531+
.Default(AArch64CC::Invalid);
3532+
3533+
if (CC == AArch64CC::Invalid && Cond.lower() == "nfirst")
3534+
Suggestion = "nfrst";
3535+
35393536
return CC;
35403537
}
35413538

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,46 @@
1-
// RUN: llvm-mc -triple aarch64 -show-encoding -mattr=+sve < %s | FileCheck %s
2-
// RUN: not llvm-mc -triple aarch64 -show-encoding -mattr=-sve < %s 2>&1 | FileCheck %s --check-prefix=CHECK-DIAG
1+
// RUN: llvm-mc -triple aarch64 -show-encoding < %s | FileCheck %s
32

43
//------------------------------------------------------------------------------
5-
// Condition code aliases for SVE
4+
// Condition code aliases for SVE.
5+
// They don't actually require +sve since they're just aliases.
66
//------------------------------------------------------------------------------
77

88
b.none lbl
99
// CHECK: b.eq lbl // encoding: [0bAAA00000,A,A,0x54]
1010
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
11-
// CHECK-DIAG: invalid condition code
12-
// CHECK-DIAG-NEXT: b.none lbl
1311

1412
b.any lbl
1513
// CHECK: b.ne lbl // encoding: [0bAAA00001,A,A,0x54]
1614
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
17-
// CHECK-DIAG: invalid condition code
18-
// CHECK-DIAG-NEXT: b.any lbl
1915

2016
b.nlast lbl
2117
// CHECK: b.hs lbl // encoding: [0bAAA00010,A,A,0x54]
2218
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
23-
// CHECK-DIAG: invalid condition code
24-
// CHECK-DIAG-NEXT: b.nlast lbl
2519

2620
b.last lbl
2721
// CHECK: b.lo lbl // encoding: [0bAAA00011,A,A,0x54]
2822
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
29-
// CHECK-DIAG: invalid condition code
30-
// CHECK-DIAG-NEXT: b.last lbl
3123

3224
b.first lbl
3325
// CHECK: b.mi lbl // encoding: [0bAAA00100,A,A,0x54]
3426
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
35-
// CHECK-DIAG: invalid condition code
36-
// CHECK-DIAG-NEXT: b.first lbl
3727

3828
b.nfrst lbl
3929
// CHECK: b.pl lbl // encoding: [0bAAA00101,A,A,0x54]
4030
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
41-
// CHECK-DIAG: invalid condition code
42-
// CHECK-DIAG-NEXT: b.nfrst lbl
4331

4432
b.pmore lbl
4533
// CHECK: b.hi lbl // encoding: [0bAAA01000,A,A,0x54]
4634
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
47-
// CHECK-DIAG: invalid condition code
48-
// CHECK-DIAG-NEXT: b.pmore lbl
4935

5036
b.plast lbl
5137
// CHECK: b.ls lbl // encoding: [0bAAA01001,A,A,0x54]
5238
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
53-
// CHECK-DIAG: invalid condition code
54-
// CHECK-DIAG-NEXT: b.plast lbl
5539

5640
b.tcont lbl
5741
// CHECK: b.ge lbl // encoding: [0bAAA01010,A,A,0x54]
5842
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
59-
// CHECK-DIAG: invalid condition code
60-
// CHECK-DIAG-NEXT: b.tcont lbl
6143

6244
b.tstop lbl
6345
// CHECK: b.lt lbl // encoding: [0bAAA01011,A,A,0x54]
6446
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
65-
// CHECK-DIAG: invalid condition code
66-
// CHECK-DIAG-NEXT: b.tstop lbl

0 commit comments

Comments
 (0)