[llvm] af20597 - Reapply "[llvm-exegesis] Exclude loads/stores from aliasing instruction set" (#156735) (#159366)

via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 6 01:49:19 PDT 2025


Author: Sjoerd Meijer
Date: 2025-10-06T09:49:15+01:00
New Revision: af2059791e5f37822cc2984c102d7a0358d58243

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

LOG: Reapply "[llvm-exegesis] Exclude loads/stores from aliasing instruction set" (#156735) (#159366)

Move the mayLoad/mayStore checks out of hasMemoryOperands; there are
instructions with these properties that don't have operands.

This is relanding 899ee375e99c04ef2c4a67dc70b266c929ad43f4 with a 
minor tweak.

Added: 
    llvm/test/tools/llvm-exegesis/AArch64/no-aliasing-ld-str.s

Modified: 
    llvm/tools/llvm-exegesis/lib/SerialSnippetGenerator.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-exegesis/AArch64/no-aliasing-ld-str.s b/llvm/test/tools/llvm-exegesis/AArch64/no-aliasing-ld-str.s
new file mode 100644
index 0000000000000..65e1203bb275d
--- /dev/null
+++ b/llvm/test/tools/llvm-exegesis/AArch64/no-aliasing-ld-str.s
@@ -0,0 +1,8 @@
+REQUIRES: aarch64-registered-target
+
+RUN: llvm-exegesis -mtriple=aarch64 -mcpu=neoverse-v2 -mode=latency --dump-object-to-disk=%d --opcode-name=FMOVWSr --benchmark-phase=assemble-measured-code 2>&1
+RUN: llvm-objdump -d %d > %t.s
+RUN: FileCheck %s < %t.s
+
+CHECK-NOT: ld{{[1-4]}}
+CHECK-NOT: st{{[1-4]}}

diff  --git a/llvm/tools/llvm-exegesis/lib/SerialSnippetGenerator.cpp b/llvm/tools/llvm-exegesis/lib/SerialSnippetGenerator.cpp
index bdfc93e22273b..707e6ee2d434b 100644
--- a/llvm/tools/llvm-exegesis/lib/SerialSnippetGenerator.cpp
+++ b/llvm/tools/llvm-exegesis/lib/SerialSnippetGenerator.cpp
@@ -57,6 +57,12 @@ computeAliasingInstructions(const LLVMState &State, const Instruction *Instr,
       continue;
     if (OtherInstr.hasMemoryOperands())
       continue;
+    // Filtering out loads/stores might belong in hasMemoryOperands(), but that
+    // complicates things as there are instructions with may load/store that
+    // don't have operands (e.g. X86's CLUI instruction). So, it's easier to
+    // filter them out here.
+    if (OtherInstr.Description.mayLoad() || OtherInstr.Description.mayStore())
+      continue;
     if (!ET.allowAsBackToBack(OtherInstr))
       continue;
     if (Instr->hasAliasingRegistersThrough(OtherInstr, ForbiddenRegisters))


        


More information about the llvm-commits mailing list