[MCA] Add support for printing immedate values as hex. Also enable lexing of masm binary and hex literals.

This patch adds a new llvm-mca flag named -print-imm-hex.

By default, the instruction printer prints immediate operands as decimals. Flag
-print-imm-hex enables the instruction printer to print those operands in hex.

This patch also adds support for MASM binary and hex literal numbers (example
0FFh, 101b).
Added tests to verify the behavior of the new flag. Tests also verify that masm
numeric literal operands are now recognized.

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

llvm-svn: 367671
This commit is contained in:
Andrea Di Biagio 2019-08-02 10:38:25 +00:00
parent 4b7239ebac
commit 207e3af501
5 changed files with 83 additions and 0 deletions

View File

@ -92,6 +92,11 @@ option specifies "``-``", then the output will also be sent to standard output.
the AT&T (vic. Intel) assembly format for the code printed out by the tool in
the analysis report.
.. option:: -print-imm-hex
Prefer hex format for numeric literals in the output assembly printed as part
of the report.
.. option:: -dispatch=<width>
Specify a different dispatch width for the processor. The dispatch width

View File

@ -0,0 +1,30 @@
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info < %s | FileCheck %s --check-prefixes=ALL,DEFAULT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info -print-imm-hex=false < %s | FileCheck %s --check-prefixes=ALL,DEFAULT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info -print-imm-hex < %s | FileCheck %s --check-prefixes=ALL,HEX
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info -print-imm-hex=true < %s | FileCheck %s --check-prefixes=ALL,HEX
shl $5, %eax
shl $0x5, %eax
shl $5h, %eax
shl $101b, %eax
# ALL: Instruction Info:
# ALL-NEXT: [1]: #uOps
# ALL-NEXT: [2]: Latency
# ALL-NEXT: [3]: RThroughput
# ALL-NEXT: [4]: MayLoad
# ALL-NEXT: [5]: MayStore
# ALL-NEXT: [6]: HasSideEffects (U)
# ALL: [1] [2] [3] [4] [5] [6] Instructions:
# DEFAULT-NEXT: 1 1 0.50 shll $5, %eax
# DEFAULT-NEXT: 1 1 0.50 shll $5, %eax
# DEFAULT-NEXT: 1 1 0.50 shll $5, %eax
# DEFAULT-NEXT: 1 1 0.50 shll $5, %eax
# HEX-NEXT: 1 1 0.50 shll $0x5, %eax
# HEX-NEXT: 1 1 0.50 shll $0x5, %eax
# HEX-NEXT: 1 1 0.50 shll $0x5, %eax
# HEX-NEXT: 1 1 0.50 shll $0x5, %eax

View File

@ -0,0 +1,39 @@
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info < %s | FileCheck %s --check-prefix=DEFAULT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info -print-imm-hex=false < %s | FileCheck %s --check-prefix=DEFAULT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info -print-imm-hex < %s | FileCheck %s --check-prefix=HEX
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false -instruction-info -print-imm-hex=true < %s | FileCheck %s --check-prefix=HEX
.intel_syntax noprefix
shl eax, 8
shl eax, 0x8
shl eax, 8h
shl eax, 1000b
# DEFAULT: Instruction Info:
# DEFAULT-NEXT: [1]: #uOps
# DEFAULT-NEXT: [2]: Latency
# DEFAULT-NEXT: [3]: RThroughput
# DEFAULT-NEXT: [4]: MayLoad
# DEFAULT-NEXT: [5]: MayStore
# DEFAULT-NEXT: [6]: HasSideEffects (U)
# HEX: Instruction Info:
# HEX-NEXT: [1]: #uOps
# HEX-NEXT: [2]: Latency
# HEX-NEXT: [3]: RThroughput
# HEX-NEXT: [4]: MayLoad
# HEX-NEXT: [5]: MayStore
# HEX-NEXT: [6]: HasSideEffects (U)
# DEFAULT: [1] [2] [3] [4] [5] [6] Instructions:
# DEFAULT-NEXT: 1 1 0.50 shl eax, 8
# DEFAULT-NEXT: 1 1 0.50 shl eax, 8
# DEFAULT-NEXT: 1 1 0.50 shl eax, 8
# DEFAULT-NEXT: 1 1 0.50 shl eax, 8
# HEX: [1] [2] [3] [4] [5] [6] Instructions:
# HEX-NEXT: 1 1 0.50 shl eax, 0x8
# HEX-NEXT: 1 1 0.50 shl eax, 0x8
# HEX-NEXT: 1 1 0.50 shl eax, 0x8
# HEX-NEXT: 1 1 0.50 shl eax, 0x8

View File

@ -118,6 +118,8 @@ Expected<const CodeRegions &> AsmCodeRegionGenerator::parseCodeRegions() {
MCAsmLexer &Lexer = Parser->getLexer();
MCACommentConsumer CC(Regions);
Lexer.setCommentConsumer(&CC);
// Enable support for MASM literal numbers (example: 05h, 101b).
Lexer.setLexMasmIntegers(true);
std::unique_ptr<MCTargetAsmParser> TAP(
TheTarget.createMCAsmParser(STI, *Parser, MCII, Opts));

View File

@ -88,6 +88,10 @@ static cl::opt<int>
cl::desc("Syntax variant to use for output printing"),
cl::cat(ToolOptions), cl::init(-1));
static cl::opt<bool>
PrintImmHex("print-imm-hex", cl::cat(ToolOptions), cl::init(false),
cl::desc("Prefer hex format when printing immediate values"));
static cl::opt<unsigned> Iterations("iterations",
cl::desc("Number of iterations to run"),
cl::cat(ToolOptions), cl::init(0));
@ -396,6 +400,9 @@ int main(int argc, char **argv) {
return 1;
}
// Set the display preference for hex vs. decimal immediates.
IP->setPrintImmHex(PrintImmHex);
std::unique_ptr<ToolOutputFile> TOF = std::move(*OF);
const MCSchedModel &SM = STI->getSchedModel();