[AArch64][SVE] Asm: Support for SVE condition code aliases

SVE overloads the AArch64 PSTATE condition flags and introduces
a set of condition code aliases for the assembler. The 
details are described in section 2.2 of the architecture
reference manual supplement for SVE.

In short:

  SVE alias =>  AArch64 name
  --------------------------
  NONE      => EQ
  ANY       => NE
  NLAST     => HS
  LAST      => LO
  FIRST     => MI
  NFRST     => PL
  PMORE     => HI
  PLAST     => LS
  TCONT     => GE
  TSTOP     => LT

Reviewers: rengolin, fhahn, SjoerdMeijer, samparker, javed.absar

Reviewed By: fhahn

Differential Revision: https://reviews.llvm.org/D48869

llvm-svn: 336245
This commit is contained in:
Sander de Smalen 2018-07-04 08:50:49 +00:00
parent a2d582563d
commit e31e6d46dd
2 changed files with 82 additions and 0 deletions

View File

@ -2523,6 +2523,22 @@ AArch64CC::CondCode AArch64AsmParser::parseCondCodeString(StringRef Cond) {
.Case("al", AArch64CC::AL)
.Case("nv", AArch64CC::NV)
.Default(AArch64CC::Invalid);
if (CC == AArch64CC::Invalid &&
getSTI().getFeatureBits()[AArch64::FeatureSVE])
CC = StringSwitch<AArch64CC::CondCode>(Cond.lower())
.Case("none", AArch64CC::EQ)
.Case("any", AArch64CC::NE)
.Case("nlast", AArch64CC::HS)
.Case("last", AArch64CC::LO)
.Case("first", AArch64CC::MI)
.Case("nfrst", AArch64CC::PL)
.Case("pmore", AArch64CC::HI)
.Case("plast", AArch64CC::LS)
.Case("tcont", AArch64CC::GE)
.Case("tstop", AArch64CC::LT)
.Default(AArch64CC::Invalid);
return CC;
}

View File

@ -0,0 +1,66 @@
// RUN: llvm-mc -triple aarch64 -show-encoding -mattr=+sve < %s | FileCheck %s
// RUN: not llvm-mc -triple aarch64 -show-encoding -mattr=-sve < %s 2>&1 | FileCheck %s --check-prefix=CHECK-DIAG
//------------------------------------------------------------------------------
// Condition code aliases for SVE
//------------------------------------------------------------------------------
b.none lbl
// CHECK: b.eq lbl // encoding: [0bAAA00000,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.none lbl
b.any lbl
// CHECK: b.ne lbl // encoding: [0bAAA00001,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.any lbl
b.nlast lbl
// CHECK: b.hs lbl // encoding: [0bAAA00010,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.nlast lbl
b.last lbl
// CHECK: b.lo lbl // encoding: [0bAAA00011,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.last lbl
b.first lbl
// CHECK: b.mi lbl // encoding: [0bAAA00100,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.first lbl
b.nfrst lbl
// CHECK: b.pl lbl // encoding: [0bAAA00101,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.nfrst lbl
b.pmore lbl
// CHECK: b.hi lbl // encoding: [0bAAA01000,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.pmore lbl
b.plast lbl
// CHECK: b.ls lbl // encoding: [0bAAA01001,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.plast lbl
b.tcont lbl
// CHECK: b.ge lbl // encoding: [0bAAA01010,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.tcont lbl
b.tstop lbl
// CHECK: b.lt lbl // encoding: [0bAAA01011,A,A,0x54]
// CHECK-NEXT: // fixup A - offset: 0, value: lbl, kind: fixup_aarch64_pcrel_branch19
// CHECK-DIAG: invalid condition code
// CHECK-DIAG-NEXT: b.tstop lbl