[llvm] r344139 - [llvm-exegesis] Fix function return generation so it doesn't return register 0

John Brawn via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 10 06:03:23 PDT 2018


Author: john.brawn
Date: Wed Oct 10 06:03:23 2018
New Revision: 344139

URL: http://llvm.org/viewvc/llvm-project?rev=344139&view=rev
Log:
[llvm-exegesis] Fix function return generation so it doesn't return register 0

When fillMachineFunction generates a return on targets without a return opcode
(such as AArch64) it should pass an empty set of registers as the return
registers, not 0 which means register number zero.

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

Added:
    llvm/trunk/test/tools/llvm-exegesis/AArch64/
    llvm/trunk/test/tools/llvm-exegesis/AArch64/latency-by-opcode-name.s
    llvm/trunk/test/tools/llvm-exegesis/AArch64/lit.local.cfg
Modified:
    llvm/trunk/tools/llvm-exegesis/lib/Assembler.cpp

Added: llvm/trunk/test/tools/llvm-exegesis/AArch64/latency-by-opcode-name.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-exegesis/AArch64/latency-by-opcode-name.s?rev=344139&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-exegesis/AArch64/latency-by-opcode-name.s (added)
+++ llvm/trunk/test/tools/llvm-exegesis/AArch64/latency-by-opcode-name.s Wed Oct 10 06:03:23 2018
@@ -0,0 +1,12 @@
+# RUN: llvm-exegesis -mode=latency -opcode-name=ADDXrr | FileCheck %s
+
+CHECK:      ---
+CHECK-NEXT: mode: latency
+CHECK-NEXT: key:
+CHECK-NEXT:   instructions:
+CHECK-NEXT:     ADDXrr [[REG1:X[0-9]+|LR]] [[REG2:X[0-9]+|LR]] [[REG3:X[0-9]+|LR]]
+CHECK-NEXT: config: ''
+CHECK-NEXT: register_initial_values:
+CHECK-DAG: - '[[REG2]]=0x0'
+# We don't check REG3 because in the case that REG2=REG3 the check would fail
+CHECK-LAST: ...

Added: llvm/trunk/test/tools/llvm-exegesis/AArch64/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-exegesis/AArch64/lit.local.cfg?rev=344139&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-exegesis/AArch64/lit.local.cfg (added)
+++ llvm/trunk/test/tools/llvm-exegesis/AArch64/lit.local.cfg Wed Oct 10 06:03:23 2018
@@ -0,0 +1,29 @@
+import subprocess
+import lit.util
+
+if not ('AArch64' in config.root.targets):
+    # We need support for AArch64.
+    config.unsupported = True
+
+elif not ('aarch64' in config.root.host_triple):
+    # We need to be running on an AArch64 host.
+    config.unsupported = True
+
+else:
+    # We need libpfm to be installed and allow reading perf counters. We can
+    # only know that at runtime, so we try to measure the latency of an empty
+    # code snippet and bail out on error.
+    llvm_exegesis_exe = lit.util.which('llvm-exegesis', config.llvm_tools_dir)
+    if not llvm_exegesis_exe:
+        print('llvm-exegesis not found')
+        config.unsupported = True
+    else:
+      try:
+          with open(os.devnull, 'w') as quiet:
+              check_llvm_exegesis_result = subprocess.call(
+                [llvm_exegesis_exe, '-mode', 'latency', '-snippets-file', '/dev/null'], stdout=quiet, stderr=quiet)
+      except OSError:
+          print('could not exec llvm-exegesis')
+          config.unsupported = True
+      if not check_llvm_exegesis_result == 0:
+        config.unsupported = True

Modified: llvm/trunk/tools/llvm-exegesis/lib/Assembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/Assembler.cpp?rev=344139&r1=344138&r2=344139&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/Assembler.cpp (original)
+++ llvm/trunk/tools/llvm-exegesis/lib/Assembler.cpp Wed Oct 10 06:03:23 2018
@@ -121,7 +121,7 @@ static void fillMachineFunction(llvm::Ma
   } else {
     llvm::MachineIRBuilder MIB(MF);
     MIB.setMBB(*MBB);
-    MF.getSubtarget().getCallLowering()->lowerReturn(MIB, nullptr, 0);
+    MF.getSubtarget().getCallLowering()->lowerReturn(MIB, nullptr, {});
   }
 }
 




More information about the llvm-commits mailing list