[llvm] 63c3148 - [llvm-exegesis] Fix stack pointer register restoration

Aiden Grossman via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 22 17:58:30 PST 2023


Author: Aiden Grossman
Date: 2023-12-22T17:55:26-08:00
New Revision: 63c314835458211b165e48b2278800ea6d52620a

URL: https://github.com/llvm/llvm-project/commit/63c314835458211b165e48b2278800ea6d52620a
DIFF: https://github.com/llvm/llvm-project/commit/63c314835458211b165e48b2278800ea6d52620a.diff

LOG: [llvm-exegesis] Fix stack pointer register restoration

9eb80ab3787e1851be8c686651688e870b93506b changed the method for stack
pointer restoration to fix segmentation faults. However, I made a
mistake in the patch and swapped a != for a ==, which caused an
arbitrary register (the first one specified) to get restored rather than
the stack pointer specifically. This patch fixes that issue and adds
test coverage to prevent regression.

Added: 
    

Modified: 
    llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s
    llvm/tools/llvm-exegesis/lib/Assembler.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
index 1c680b7c66d276..e46da53a212c54 100644
--- a/llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s
+++ b/llvm/test/tools/llvm-exegesis/X86/latency/subprocess-preserved-registers.s
@@ -7,9 +7,18 @@
 
 # LLVM-EXEGESIS-DEFREG RAX 3
 # LLVM-EXEGESIS-DEFREG RCX 5
-# LLVM-EXEGESIS-DEFREG RDI 7
-# LLVM-EXEGESIS-DEFREG RSI B
-# LLVM-EXEGESIS-DEFREG R11 D
+# LLVM-EXEGESIS-DEFREG RDX 7
+# LLVM-EXEGESIS-DEFREG RBX B
+# LLVM-EXEGESIS-DEFREG RSI D
+# LLVM-EXEGESIS-DEFREG RDI 11
+# LLVM-EXEGESIS-DEFREG RSP 13
+# LLVM-EXEGESIS-DEFREG RBP 17
+# LLVM-EXEGESIS-DEFREG R8 1D
+# LLVM-EXEGESIS-DEFREG R9 1F
+# LLVM-EXEGESIS-DEFREG R10 29
+# LLVM-EXEGESIS-DEFREG R11 2B
+# LLVM-EXEGESIS-DEFREG R12 2F
+# LLVM-EXEGESIS-DEFREG R13 35
 # LLVM-EXEGESIS-DEFREG R14 127
 # LLVM-EXEGESIS-DEFREG R15 0
 
@@ -17,11 +26,29 @@ cmpq $0x3, %rax
 cmovneq %r14, %r15
 cmpq $0x5, %rcx
 cmovneq %r14, %r15
-cmpq $0x7, %rdi
+cmpq $0x7, %rdx
 cmovneq %r14, %r15
-cmpq $0xB, %rsi
+cmpq $0xB, %rbx
 cmovneq %r14, %r15
-cmpq $0xD, %r11
+cmpq $0xD, %rsi
+cmovneq %r14, %r15
+cmpq $0x11, %rdi
+cmovneq %r14, %r15
+cmpq $0x13, %rsp
+cmovneq %r14, %r15
+cmpq $0x17, %rbp
+cmovneq %r14, %r15
+cmpq $0x1d, %r8
+cmovneq %r14, %r15
+cmpq $0x1f, %r9
+cmovneq %r14, %r15
+cmpq $0x29, %r10
+cmovneq %r14, %r15
+cmpq $0x2b, %r11
+cmovneq %r14, %r15
+cmpq $0x2f, %r12
+cmovneq %r14, %r15
+cmpq $0x35, %r13
 cmovneq %r14, %r15
 
 movq $60, %rax

diff  --git a/llvm/tools/llvm-exegesis/lib/Assembler.cpp b/llvm/tools/llvm-exegesis/lib/Assembler.cpp
index c2fad7c731a7d2..96b5a068ff21f6 100644
--- a/llvm/tools/llvm-exegesis/lib/Assembler.cpp
+++ b/llvm/tools/llvm-exegesis/lib/Assembler.cpp
@@ -97,7 +97,7 @@ static bool generateSnippetSetupCode(
       // Load in the stack register now as we're done using it elsewhere
       // and need to set the value in preparation for executing the
       // snippet.
-      if (RV.Register == StackPointerRegister)
+      if (RV.Register != StackPointerRegister)
         continue;
       const auto SetRegisterCode = ET.setRegTo(*MSI, RV.Register, RV.Value);
       if (SetRegisterCode.empty())


        


More information about the llvm-commits mailing list