forked from OSchip/llvm-project
[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:
parent
4b7239ebac
commit
207e3af501
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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));
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue