-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[llvm-exegesis] Fix preservation of RDI in subprocess mode #72458
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
I made a typo at some point while doing the subprocess implementation, trying to pop RIP from the stack. For whatever reason, this ends up as popq %rax after being JITed, which means we aren't properly preserving the value of %rdi. Regression test added.
@llvm/pr-subscribers-tools-llvm-exegesis Author: Aiden Grossman (boomanaiden154) ChangesI made a typo at some point while doing the subprocess implementation, trying to pop RIP from the stack. For whatever reason, this ends up as popq %rax after being JITed, which means we aren't properly preserving the value of %rdi. Regression test added. This fixes #72188. Full diff: https://github.com/llvm/llvm-project/pull/72458.diff 2 Files Affected:
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..1e67006b635c750
--- /dev/null
+++ b/llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s
@@ -0,0 +1,30 @@
+# REQUIRES: exegesis-can-execute-x86_64
+
+# 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;
|
@ondrasej ping since you're not in the LLVM org and I can't add you as a reviewer. This is the first of probably a couple fixes related to register preservation in |
…72458)" This reverts commit 186db1b. This relands commit 0718c1a. 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.
I made a typo at some point while doing the subprocess implementation, trying to pop RIP from the stack. For whatever reason, this ends up as popq %rax after being JITed, which means we aren't properly preserving the value of %rdi. Regression test added. This fixes llvm#72188.
…lvm#72458)" This reverts commit 0718c1a. The test doesn't have the correct requires string apparently because it attempts to run on all the buildbots. Reverting until I have time to fix the test and reland it.
…lvm#72458)" This reverts commit 186db1b. This relands commit 0718c1a. 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.
I made a typo at some point while doing the subprocess implementation, trying to pop RIP from the stack. For whatever reason, this ends up as popq %rax after being JITed, which means we aren't properly preserving the value of %rdi. Regression test added. This fixes llvm#72188.
…lvm#72458)" This reverts commit 0718c1a. The test doesn't have the correct requires string apparently because it attempts to run on all the buildbots. Reverting until I have time to fix the test and reland it.
…lvm#72458)" This reverts commit 186db1b. This relands commit 0718c1a. 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.
I made a typo at some point while doing the subprocess implementation, trying to pop RIP from the stack. For whatever reason, this ends up as popq %rax after being JITed, which means we aren't properly preserving the value of %rdi.
Regression test added.
This fixes #72188.