[llvm] fcf4bb1 - [AArch64] Relax SDep requirement for AppleSMECompute clustering (#212603)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 30 04:32:58 PDT 2026
Author: Tomer Shafir
Date: 2026-07-30T14:32:53+03:00
New Revision: fcf4bb1af7450f618504201610ef8c3ef52844d7
URL: https://github.com/llvm/llvm-project/commit/fcf4bb1af7450f618504201610ef8c3ef52844d7
DIFF: https://github.com/llvm/llvm-project/commit/fcf4bb1af7450f618504201610ef8c3ef52844d7.diff
LOG: [AArch64] Relax SDep requirement for AppleSMECompute clustering (#212603)
Do not require RAW dependency for FuseAppleSMECompute.
Added:
Modified:
llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
llvm/test/CodeGen/AArch64/misched-fusion-apple-sme-compute.mir
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp b/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
index aa742793a0f1a..c367b65cd28f9 100644
--- a/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
+++ b/llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
@@ -674,12 +674,23 @@ static bool shouldScheduleAdjacent(const TargetInstrInfo &TII,
const MachineInstr *FirstMI,
const MachineInstr &SecondMI,
const SDep *Dep) {
- if (isNonDataDep(Dep))
- return false;
const AArch64Subtarget &ST = static_cast<const AArch64Subtarget&>(TSI);
+ const TargetRegisterInfo *TRI = TSI.getRegisterInfo();
// All checking functions assume that the 1st instr is a wildcard if it is
// unspecified.
+
+ // FuseAppleSMECompute does not require a specific dependency kind
+ if (ST.hasFuseAppleSMECompute() &&
+ isAppleSMEComputePair(FirstMI, SecondMI, TII, TRI)) {
+ ++NumFusedAppleSMECompute;
+ return true;
+ }
+
+ // All the other fusions require RAW dependency
+ if (isNonDataDep(Dep))
+ return false;
+
if (ST.hasCmpBccFusion() || ST.hasArithmeticBccFusion()) {
bool CmpOnly = !ST.hasArithmeticBccFusion();
if (isArithmeticBccPair(FirstMI, SecondMI, CmpOnly)) {
@@ -732,12 +743,6 @@ static bool shouldScheduleAdjacent(const TargetInstrInfo &TII,
++NumFusedAddSub2RegAndConstOne;
return true;
}
- const TargetRegisterInfo *TRI = TSI.getRegisterInfo();
- if (ST.hasFuseAppleSMECompute() &&
- isAppleSMEComputePair(FirstMI, SecondMI, TII, TRI)) {
- ++NumFusedAppleSMECompute;
- return true;
- }
if (ST.hasFuseFMinFMax() && isFMinFMaxPair(FirstMI, SecondMI)) {
++NumFusedFMinFMax;
return true;
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-apple-sme-compute.mir b/llvm/test/CodeGen/AArch64/misched-fusion-apple-sme-compute.mir
index 72e5087c71519..15f166eddeebf 100644
--- a/llvm/test/CodeGen/AArch64/misched-fusion-apple-sme-compute.mir
+++ b/llvm/test/CodeGen/AArch64/misched-fusion-apple-sme-compute.mir
@@ -179,3 +179,23 @@ body: |
$za = FMLA_VG2_M2ZZ_S $za, $w8, 0, $z0_z1, $z2
RET undef $lr
...
+
+## SME fusion doesnt require RAW dependency. This is a representative test case for Z write
+
+# CHECK-LABEL: fuse_non_raw
+# CHECK: SU({{[0-9]+}}): $z0 = ADD_ZZZ_S $z1, $z2
+# CHECK: Successors:
+# FUSE: SU({{[0-9]+}}): Ord Latency={{[0-9]+}} Cluster
+# NOFUSE-NOT: SU({{[0-9]+}}): Ord Latency={{[0-9]+}} Cluster
+# CHECK: SU({{[0-9]+}}): $z0 = ADD_ZZZ_S $z3, $z4
+---
+name: fuse_non_raw
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $z1, $z2, $z3, $z4, $w2
+ $z0 = ADD_ZZZ_S $z1, $z2
+ $w3 = ORRWri $w2, 4096
+ $z0 = ADD_ZZZ_S $z3, $z4
+ RET undef $lr
+...
More information about the llvm-commits
mailing list