[llvm] r330733 - [llvm-mca] Default the output asm dialect used by the instruction printer to the input asm dialect.

Andrea Di Biagio via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 24 09:19:08 PDT 2018


Author: adibiagio
Date: Tue Apr 24 09:19:08 2018
New Revision: 330733

URL: http://llvm.org/viewvc/llvm-project?rev=330733&view=rev
Log:
[llvm-mca] Default the output asm dialect used by the instruction printer to the input asm dialect.

The instruction printer used by llvm-mca to generate the performance report now
defaults the output assembly format to the format used for the input assembly
file.

On x86, the asm format can be either AT&T or Intel, depending on the
presence/absence of directive `.intel_syntax`.

Users can still specify a different assembly dialect with the command line flag
-output-asm-variant=<uint>.


Added:
    llvm/trunk/test/tools/llvm-mca/X86/intel-syntax.s
Modified:
    llvm/trunk/tools/llvm-mca/llvm-mca.cpp

Added: llvm/trunk/test/tools/llvm-mca/X86/intel-syntax.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/intel-syntax.s?rev=330733&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/intel-syntax.s (added)
+++ llvm/trunk/test/tools/llvm-mca/X86/intel-syntax.s Tue Apr 24 09:19:08 2018
@@ -0,0 +1,37 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -resource-pressure=false                       < %s | FileCheck %s -check-prefixes=ALL,INTEL
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -resource-pressure=false -output-asm-variant=0 < %s | FileCheck %s -check-prefixes=ALL,ATT
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -resource-pressure=false -output-asm-variant=1 < %s | FileCheck %s -check-prefixes=ALL,INTEL
+
+  .intel_syntax noprefix
+  mov	eax, 1
+  mov	ebx, 0ffh
+  imul	esi, edi
+  lea	eax, [rsi + rdi]
+
+# ALL:      Iterations:     100
+# ALL-NEXT: Instructions:   400
+# ALL-NEXT: Total Cycles:   305
+# ALL-NEXT: Dispatch Width: 2
+# ALL-NEXT: IPC:            1.31
+
+# 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
+
+# INTEL:      [1]    [2]    [3]    [4]    [5]    [6]	Instructions:
+# INTEL-NEXT:  1      1     0.50                    	mov	eax, 1
+# INTEL-NEXT:  1      1     0.50                    	mov	ebx, 255
+# INTEL-NEXT:  2      3     1.00                    	imul	esi, edi
+# INTEL-NEXT:  1      1     0.50                    	lea	eax, [rsi + rdi]
+
+# ATT:      [1]    [2]    [3]    [4]    [5]    [6]	Instructions:
+# ATT-NEXT:  1      1     0.50                    	movl	$1, %eax
+# ATT-NEXT:  1      1     0.50                    	movl	$255, %ebx
+# ATT-NEXT:  2      3     1.00                    	imull	%edi, %esi
+# ATT-NEXT:  1      1     0.50                    	leal	(%rsi,%rdi), %eax
+

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=330733&r1=330732&r2=330733&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/llvm-mca.cpp (original)
+++ llvm/trunk/tools/llvm-mca/llvm-mca.cpp Tue Apr 24 09:19:08 2018
@@ -71,9 +71,10 @@ static cl::opt<std::string>
          cl::desc("Target a specific cpu type (-mcpu=help for details)"),
          cl::value_desc("cpu-name"), cl::init("generic"));
 
-static cl::opt<unsigned>
+static cl::opt<int>
     OutputAsmVariant("output-asm-variant",
-                     cl::desc("Syntax variant to use for output printing"));
+                     cl::desc("Syntax variant to use for output printing"),
+                     cl::init(-1));
 
 static cl::opt<unsigned> Iterations("iterations",
                                     cl::desc("Number of iterations to run"),
@@ -356,16 +357,6 @@ int main(int argc, char **argv) {
     return 1;
   }
 
-  std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
-      Triple(TripleName), OutputAsmVariant, *MAI, *MCII, *MRI));
-  if (!IP) {
-    WithColor::error()
-        << "unable to create instruction printer for target triple '"
-        << TheTriple.normalize() << "' with assembly variant "
-        << OutputAsmVariant << ".\n";
-    return 1;
-  }
-
   std::unique_ptr<MCAsmParser> P(createMCAsmParser(SrcMgr, Ctx, Str, *MAI));
   MCAsmLexer &Lexer = P->getLexer();
   MCACommentConsumer CC(Regions);
@@ -386,6 +377,19 @@ int main(int argc, char **argv) {
     return 1;
   }
 
+  unsigned AssemblerDialect = P->getAssemblerDialect();
+  if (OutputAsmVariant >= 0)
+    AssemblerDialect = static_cast<unsigned>(OutputAsmVariant);
+  std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
+      Triple(TripleName), AssemblerDialect, *MAI, *MCII, *MRI));
+  if (!IP) {
+    WithColor::error()
+        << "unable to create instruction printer for target triple '"
+        << TheTriple.normalize() << "' with assembly variant "
+        << AssemblerDialect << ".\n";
+    return 1;
+  }
+
   std::unique_ptr<llvm::ToolOutputFile> TOF = std::move(*OF);
 
   const MCSchedModel &SM = STI->getSchedModel();




More information about the llvm-commits mailing list