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

Andrea Di Biagio via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 2 03:38:25 PDT 2019


Author: adibiagio
Date: Fri Aug  2 03:38:25 2019
New Revision: 367671

URL: http://llvm.org/viewvc/llvm-project?rev=367671&view=rev
Log:
[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

Added:
    llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-1.s
    llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-2.s
Modified:
    llvm/trunk/docs/CommandGuide/llvm-mca.rst
    llvm/trunk/tools/llvm-mca/CodeRegionGenerator.cpp
    llvm/trunk/tools/llvm-mca/llvm-mca.cpp

Modified: llvm/trunk/docs/CommandGuide/llvm-mca.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CommandGuide/llvm-mca.rst?rev=367671&r1=367670&r2=367671&view=diff
==============================================================================
--- llvm/trunk/docs/CommandGuide/llvm-mca.rst (original)
+++ llvm/trunk/docs/CommandGuide/llvm-mca.rst Fri Aug  2 03:38:25 2019
@@ -92,6 +92,11 @@ option specifies "``-``", then the outpu
  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

Added: llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-1.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-1.s?rev=367671&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-1.s (added)
+++ llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-1.s Fri Aug  2 03:38:25 2019
@@ -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

Added: llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-2.s?rev=367671&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-2.s (added)
+++ llvm/trunk/test/tools/llvm-mca/X86/print-imm-hex-2.s Fri Aug  2 03:38:25 2019
@@ -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

Modified: llvm/trunk/tools/llvm-mca/CodeRegionGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/CodeRegionGenerator.cpp?rev=367671&r1=367670&r2=367671&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/CodeRegionGenerator.cpp (original)
+++ llvm/trunk/tools/llvm-mca/CodeRegionGenerator.cpp Fri Aug  2 03:38:25 2019
@@ -118,6 +118,8 @@ Expected<const CodeRegions &> AsmCodeReg
   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));

Modified: llvm/trunk/tools/llvm-mca/llvm-mca.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/llvm-mca.cpp?rev=367671&r1=367670&r2=367671&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/llvm-mca.cpp (original)
+++ llvm/trunk/tools/llvm-mca/llvm-mca.cpp Fri Aug  2 03:38:25 2019
@@ -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();




More information about the llvm-commits mailing list