Skip to content

Commit

Permalink
[RISCV] Add Option for Printing Architectural Register Names
Browse files Browse the repository at this point in the history
Summary:
This is an option primarily to use during testing. Instead of always
printing registers using their ABI names, this allows a user to request they
are printed with their architectural name.

This is then used in the register constraint tests to ensure the mapping
between architectural and abi names is correct.

Reviewers: asb, luismarques

Reviewed By: asb

Subscribers: pzheng, hiraditya, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, MaskRay, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, Jim, s.egerton, llvm-commits

Tags: #llvm

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

llvm-svn: 371531
  • Loading branch information
lenary committed Sep 10, 2019
1 parent f987f56 commit 6b877f6
Show file tree
Hide file tree
Showing 5 changed files with 510 additions and 2 deletions.
11 changes: 11 additions & 0 deletions llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
Expand Up @@ -39,6 +39,12 @@ static cl::opt<bool>
cl::desc("Disable the emission of assembler pseudo instructions"),
cl::init(false), cl::Hidden);

static cl::opt<bool>
ArchRegNames("riscv-arch-reg-names",
cl::desc("Print architectural register names rather than the "
"ABI names (such as x2 instead of sp)"),
cl::init(false), cl::Hidden);

void RISCVInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
StringRef Annot, const MCSubtargetInfo &STI) {
bool Res = false;
Expand Down Expand Up @@ -124,3 +130,8 @@ void RISCVInstPrinter::printAtomicMemOp(const MCInst *MI, unsigned OpNo,
O << ")";
return;
}

const char *RISCVInstPrinter::getRegisterName(unsigned RegNo) {
return getRegisterName(RegNo, ArchRegNames ? RISCV::NoRegAltName
: RISCV::ABIRegAltName);
}
4 changes: 2 additions & 2 deletions llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.h
Expand Up @@ -48,8 +48,8 @@ class RISCVInstPrinter : public MCInstPrinter {
void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
unsigned PrintMethodIdx,
const MCSubtargetInfo &STI, raw_ostream &O);
static const char *getRegisterName(unsigned RegNo,
unsigned AltIdx = RISCV::ABIRegAltName);
static const char *getRegisterName(unsigned RegNo);
static const char *getRegisterName(unsigned RegNo, unsigned AltIdx);
};
} // namespace llvm

Expand Down
165 changes: 165 additions & 0 deletions llvm/test/MC/RISCV/numeric-reg-names-d.s
@@ -0,0 +1,165 @@
# RUN: llvm-mc -triple riscv32 -mattr=+f,+d < %s -riscv-arch-reg-names \
# RUN: | FileCheck -check-prefix=CHECK-NUMERIC %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+f,+d < %s \
# RUN: | llvm-objdump -mattr=+f,+d -d -riscv-arch-reg-names - \
# RUN: | FileCheck -check-prefix=CHECK-NUMERIC %s

# CHECK-NUMERIC: fsqrt.d f10, f0
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f0
fsqrt.d fa0, f0
fsqrt.d fa0, ft0

# CHECK-NUMERIC: fsqrt.d f10, f1
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f1
fsqrt.d fa0, f1
fsqrt.d fa0, ft1

# CHECK-NUMERIC: fsqrt.d f10, f2
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f2
fsqrt.d fa0, f2
fsqrt.d fa0, ft2

# CHECK-NUMERIC: fsqrt.d f10, f3
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f3
fsqrt.d fa0, f3
fsqrt.d fa0, ft3

# CHECK-NUMERIC: fsqrt.d f10, f4
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f4
fsqrt.d fa0, f4
fsqrt.d fa0, ft4

# CHECK-NUMERIC: fsqrt.d f10, f5
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f5
fsqrt.d fa0, f5
fsqrt.d fa0, ft5

# CHECK-NUMERIC: fsqrt.d f10, f6
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f6
fsqrt.d fa0, f6
fsqrt.d fa0, ft6

# CHECK-NUMERIC: fsqrt.d f10, f7
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f7
fsqrt.d fa0, f7
fsqrt.d fa0, ft7

# CHECK-NUMERIC: fsqrt.d f10, f8
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f8
fsqrt.d fa0, f8
fsqrt.d fa0, fs0

# CHECK-NUMERIC: fsqrt.d f10, f9
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f9
fsqrt.d fa0, f9
fsqrt.d fa0, fs1

# CHECK-NUMERIC: fsqrt.d f10, f10
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f10
fsqrt.d fa0, f10
fsqrt.d fa0, fa0

# CHECK-NUMERIC: fsqrt.d f10, f11
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f11
fsqrt.d fa0, f11
fsqrt.d fa0, fa1

# CHECK-NUMERIC: fsqrt.d f10, f12
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f12
fsqrt.d fa0, f12
fsqrt.d fa0, fa2

# CHECK-NUMERIC: fsqrt.d f10, f13
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f13
fsqrt.d fa0, f13
fsqrt.d fa0, fa3

# CHECK-NUMERIC: fsqrt.d f10, f14
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f14
fsqrt.d fa0, f14
fsqrt.d fa0, fa4

# CHECK-NUMERIC: fsqrt.d f10, f15
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f15
fsqrt.d fa0, f15
fsqrt.d fa0, fa5

# CHECK-NUMERIC: fsqrt.d f10, f16
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f16
fsqrt.d fa0, f16
fsqrt.d fa0, fa6

# CHECK-NUMERIC: fsqrt.d f10, f17
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f17
fsqrt.d fa0, f17
fsqrt.d fa0, fa7

# CHECK-NUMERIC: fsqrt.d f10, f18
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f18
fsqrt.d fa0, f18
fsqrt.d fa0, fs2

# CHECK-NUMERIC: fsqrt.d f10, f19
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f19
fsqrt.d fa0, f19
fsqrt.d fa0, fs3

# CHECK-NUMERIC: fsqrt.d f10, f20
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f20
fsqrt.d fa0, f20
fsqrt.d fa0, fs4

# CHECK-NUMERIC: fsqrt.d f10, f21
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f21
fsqrt.d fa0, f21
fsqrt.d fa0, fs5

# CHECK-NUMERIC: fsqrt.d f10, f22
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f22
fsqrt.d fa0, f22
fsqrt.d fa0, fs6

# CHECK-NUMERIC: fsqrt.d f10, f23
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f23
fsqrt.d fa0, f23
fsqrt.d fa0, fs7

# CHECK-NUMERIC: fsqrt.d f10, f24
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f24
fsqrt.d fa0, f24
fsqrt.d fa0, fs8

# CHECK-NUMERIC: fsqrt.d f10, f25
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f25
fsqrt.d fa0, f25
fsqrt.d fa0, fs9

# CHECK-NUMERIC: fsqrt.d f10, f26
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f26
fsqrt.d fa0, f26
fsqrt.d fa0, fs10

# CHECK-NUMERIC: fsqrt.d f10, f27
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f27
fsqrt.d fa0, f27
fsqrt.d fa0, fs11

# CHECK-NUMERIC: fsqrt.d f10, f28
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f28
fsqrt.d fa0, f28
fsqrt.d fa0, ft8

# CHECK-NUMERIC: fsqrt.d f10, f29
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f29
fsqrt.d fa0, f29
fsqrt.d fa0, ft9

# CHECK-NUMERIC: fsqrt.d f10, f30
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f30
fsqrt.d fa0, f30
fsqrt.d fa0, ft10

# CHECK-NUMERIC: fsqrt.d f10, f31
# CHECK-NUMERIC-NEXT: fsqrt.d f10, f31
fsqrt.d fa0, f31
fsqrt.d fa0, ft11
165 changes: 165 additions & 0 deletions llvm/test/MC/RISCV/numeric-reg-names-f.s
@@ -0,0 +1,165 @@
# RUN: llvm-mc -triple riscv32 -mattr=+f < %s -riscv-arch-reg-names \
# RUN: | FileCheck -check-prefix=CHECK-NUMERIC %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+f < %s \
# RUN: | llvm-objdump -mattr=+f -d -riscv-arch-reg-names - \
# RUN: | FileCheck -check-prefix=CHECK-NUMERIC %s

# CHECK-NUMERIC: fsqrt.s f10, f0
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f0
fsqrt.s fa0, f0
fsqrt.s fa0, ft0

# CHECK-NUMERIC: fsqrt.s f10, f1
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f1
fsqrt.s fa0, f1
fsqrt.s fa0, ft1

# CHECK-NUMERIC: fsqrt.s f10, f2
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f2
fsqrt.s fa0, f2
fsqrt.s fa0, ft2

# CHECK-NUMERIC: fsqrt.s f10, f3
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f3
fsqrt.s fa0, f3
fsqrt.s fa0, ft3

# CHECK-NUMERIC: fsqrt.s f10, f4
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f4
fsqrt.s fa0, f4
fsqrt.s fa0, ft4

# CHECK-NUMERIC: fsqrt.s f10, f5
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f5
fsqrt.s fa0, f5
fsqrt.s fa0, ft5

# CHECK-NUMERIC: fsqrt.s f10, f6
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f6
fsqrt.s fa0, f6
fsqrt.s fa0, ft6

# CHECK-NUMERIC: fsqrt.s f10, f7
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f7
fsqrt.s fa0, f7
fsqrt.s fa0, ft7

# CHECK-NUMERIC: fsqrt.s f10, f8
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f8
fsqrt.s fa0, f8
fsqrt.s fa0, fs0

# CHECK-NUMERIC: fsqrt.s f10, f9
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f9
fsqrt.s fa0, f9
fsqrt.s fa0, fs1

# CHECK-NUMERIC: fsqrt.s f10, f10
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f10
fsqrt.s fa0, f10
fsqrt.s fa0, fa0

# CHECK-NUMERIC: fsqrt.s f10, f11
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f11
fsqrt.s fa0, f11
fsqrt.s fa0, fa1

# CHECK-NUMERIC: fsqrt.s f10, f12
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f12
fsqrt.s fa0, f12
fsqrt.s fa0, fa2

# CHECK-NUMERIC: fsqrt.s f10, f13
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f13
fsqrt.s fa0, f13
fsqrt.s fa0, fa3

# CHECK-NUMERIC: fsqrt.s f10, f14
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f14
fsqrt.s fa0, f14
fsqrt.s fa0, fa4

# CHECK-NUMERIC: fsqrt.s f10, f15
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f15
fsqrt.s fa0, f15
fsqrt.s fa0, fa5

# CHECK-NUMERIC: fsqrt.s f10, f16
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f16
fsqrt.s fa0, f16
fsqrt.s fa0, fa6

# CHECK-NUMERIC: fsqrt.s f10, f17
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f17
fsqrt.s fa0, f17
fsqrt.s fa0, fa7

# CHECK-NUMERIC: fsqrt.s f10, f18
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f18
fsqrt.s fa0, f18
fsqrt.s fa0, fs2

# CHECK-NUMERIC: fsqrt.s f10, f19
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f19
fsqrt.s fa0, f19
fsqrt.s fa0, fs3

# CHECK-NUMERIC: fsqrt.s f10, f20
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f20
fsqrt.s fa0, f20
fsqrt.s fa0, fs4

# CHECK-NUMERIC: fsqrt.s f10, f21
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f21
fsqrt.s fa0, f21
fsqrt.s fa0, fs5

# CHECK-NUMERIC: fsqrt.s f10, f22
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f22
fsqrt.s fa0, f22
fsqrt.s fa0, fs6

# CHECK-NUMERIC: fsqrt.s f10, f23
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f23
fsqrt.s fa0, f23
fsqrt.s fa0, fs7

# CHECK-NUMERIC: fsqrt.s f10, f24
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f24
fsqrt.s fa0, f24
fsqrt.s fa0, fs8

# CHECK-NUMERIC: fsqrt.s f10, f25
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f25
fsqrt.s fa0, f25
fsqrt.s fa0, fs9

# CHECK-NUMERIC: fsqrt.s f10, f26
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f26
fsqrt.s fa0, f26
fsqrt.s fa0, fs10

# CHECK-NUMERIC: fsqrt.s f10, f27
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f27
fsqrt.s fa0, f27
fsqrt.s fa0, fs11

# CHECK-NUMERIC: fsqrt.s f10, f28
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f28
fsqrt.s fa0, f28
fsqrt.s fa0, ft8

# CHECK-NUMERIC: fsqrt.s f10, f29
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f29
fsqrt.s fa0, f29
fsqrt.s fa0, ft9

# CHECK-NUMERIC: fsqrt.s f10, f30
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f30
fsqrt.s fa0, f30
fsqrt.s fa0, ft10

# CHECK-NUMERIC: fsqrt.s f10, f31
# CHECK-NUMERIC-NEXT: fsqrt.s f10, f31
fsqrt.s fa0, f31
fsqrt.s fa0, ft11

0 comments on commit 6b877f6

Please sign in to comment.