Author: Aiden Grossman Date: 2023-11-16T14:03:07-08:00 New Revision: add20537cc764b8afb97df85acba7c21d6537ae3
URL: https://github.com/llvm/llvm-project/commit/add20537cc764b8afb97df85acba7c21d6537ae3 DIFF: https://github.com/llvm/llvm-project/commit/add20537cc764b8afb97df85acba7c21d6537ae3.diff LOG: Reland "[llvm-exegesis] Fix preservation of RDI in subprocess mode (#72458)" This reverts commit 186db1bcb0096a6af348d7e17866c68fa2004068. This relands commit 0718c1a8405ac130d72cd3525befed2911618cc7. The REQUIRES flag in the test that was added only specified that the machine needed to have the capability to execute the snippet rather than actually run it with performance counters. This would work with --dummy-perf-counters, but that is not currently supported in the subprocess execution mode. So for now, we require the ability to actually perform measurements to prevent test failures in configurations that don't have libpfm or access to performance counters. Added: llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s Modified: llvm/tools/llvm-exegesis/lib/X86/Target.cpp Removed: ################################################################################ diff --git a/llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s b/llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s new file mode 100644 index 000000000000000..320d1d7db38f422 --- /dev/null +++ b/llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s @@ -0,0 +1,30 @@ +# REQUIRES: exegesis-can-measure-latency, x86_64-linux + +# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mode=latency -snippets-file=%s -execution-mode=subprocess | FileCheck %s + +# See comment in ./subprocess-abnormal-exit-code.s on the transient +# PTRACE_ATTACH failure. +# ALLOW_RETRIES: 2 + +# Check that the value of the registers preserved in subprocess mode while +# making the ioctl system call are actually preserved correctly. + +# LLVM-EXEGESIS-DEFREG RAX 11 +# LLVM-EXEGESIS-DEFREG RDI 13 +# LLVM-EXEGESIS-DEFREG RSI 17 +# LLVM-EXEGESIS-DEFREG R13 0 +# LLVM-EXEGESIS-DEFREG R12 127 + +cmpq $0x11, %rax +cmovneq %r12, %r13 +cmpq $0x13, %rdi +cmovneq %r12, %r13 +cmpq $0x17, %rsi +cmovneq %r12, %r13 + +movq $60, %rax +movq %r13, %rdi +syscall + +# CHECK-NOT: error: 'Child benchmarking process exited with non-zero exit code: Child process returned with unknown exit code' + diff --git a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp index ac99e98cc851f34..bf8fd9ec7066478 100644 --- a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp +++ b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp @@ -1205,7 +1205,7 @@ ExegesisX86Target::configurePerfCounter(long Request, bool SaveRegisters) const if(SaveRegisters) { // Restore RAX, RDI, and RSI, in reverse order. generateRegisterStackPop(X86::RSI, ConfigurePerfCounterCode); - generateRegisterStackPop(X86::RIP, ConfigurePerfCounterCode); + generateRegisterStackPop(X86::RDI, ConfigurePerfCounterCode); generateRegisterStackPop(X86::RAX, ConfigurePerfCounterCode); } return ConfigurePerfCounterCode; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits