[llvm] recalculate the live interval of the defined register of xvmaddmdp in the VSX FMA mutation pass. (PR #116071)
zhijian lin via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 13 08:01:33 PST 2024
https://github.com/diggerlin updated https://github.com/llvm/llvm-project/pull/116071
>From c1a8a3179b07854e58c45e5e6e0a42448c4e5347 Mon Sep 17 00:00:00 2001
From: zhijian <zhijian at ca.ibm.com>
Date: Wed, 13 Nov 2024 16:09:31 +0000
Subject: [PATCH 1/2] recalculate the live interval of the defined register of
xvmaddmdp in the VSX FMA mutation
---
llvm/lib/Target/PowerPC/PPCVSXFMAMutate.cpp | 18 ++++----------
llvm/test/CodeGen/PowerPC/issue116061.ll | 26 +++++++++++++++++++++
2 files changed, 30 insertions(+), 14 deletions(-)
create mode 100644 llvm/test/CodeGen/PowerPC/issue116061.ll
diff --git a/llvm/lib/Target/PowerPC/PPCVSXFMAMutate.cpp b/llvm/lib/Target/PowerPC/PPCVSXFMAMutate.cpp
index 4b4e47e9532a87..c1f4069e7ac829 100644
--- a/llvm/lib/Target/PowerPC/PPCVSXFMAMutate.cpp
+++ b/llvm/lib/Target/PowerPC/PPCVSXFMAMutate.cpp
@@ -293,21 +293,11 @@ namespace {
UseMO.substVirtReg(KilledProdReg, KilledProdSubReg, *TRI);
}
- // Extend the live intervals of the killed product operand to hold the
- // fma result.
+ // Recalculate the live intervals of the killed product operand.
+ LIS->removeInterval(KilledProdReg);
+ LiveInterval &NewFMAInt =
+ LIS->createAndComputeVirtRegInterval(KilledProdReg);
- LiveInterval &NewFMAInt = LIS->getInterval(KilledProdReg);
- for (auto &AI : FMAInt) {
- // Don't add the segment that corresponds to the original copy.
- if (AI.valno == AddendValNo)
- continue;
-
- VNInfo *NewFMAValNo =
- NewFMAInt.getNextValue(AI.start, LIS->getVNInfoAllocator());
-
- NewFMAInt.addSegment(
- LiveInterval::Segment(AI.start, AI.end, NewFMAValNo));
- }
LLVM_DEBUG(dbgs() << " extended: " << NewFMAInt << '\n');
// Extend the live interval of the addend source (it might end at the
diff --git a/llvm/test/CodeGen/PowerPC/issue116061.ll b/llvm/test/CodeGen/PowerPC/issue116061.ll
new file mode 100644
index 00000000000000..29f11fc1d3a630
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/issue116061.ll
@@ -0,0 +1,26 @@
+; RUN: llc -disable-ppc-vsx-fma-mutation=false -mcpu=pwr10 -verify-machineinstrs \
+; RUN: -ppc-asm-full-reg-names -mtriple powerpc64-ibm-aix7.2.0.0 < %s | FileCheck %s
+
+target datalayout = "E-m:a-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512"
+
+define void @initial(<2 x double> %0){
+entry:
+ %1 = fmul <2 x double> %0, zeroinitializer
+ br label %for.cond251.preheader.lr.ph
+
+for.cond251.preheader.lr.ph: ; preds = %for.cond251.preheader.lr.ph, %entry
+ %2 = phi double [ %3, %for.cond251.preheader.lr.ph ], [ 0.000000e+00, %entry ]
+ %3 = phi double [ %7, %for.cond251.preheader.lr.ph ], [ 0.000000e+00, %entry ]
+ %add737 = fadd double %3, %2
+ %4 = insertelement <2 x double> zeroinitializer, double %add737, i64 0
+ %5 = fmul contract <2 x double> %4, zeroinitializer
+ %6 = fadd contract <2 x double> %1, %5
+ %7 = extractelement <2 x double> %6, i64 0
+ br label %for.cond251.preheader.lr.ph
+}
+
+; CHECK: xsadddp f4, f3, f4
+; CHECK-NEXT: xxmrghd vs5, vs4, vs2
+; CHECK-NEXT: fmr f4, f3
+; CHECK-NEXT: xvmaddmdp vs5, vs0, vs1
+; CHECK-NEXT: fmr f3, f5
>From 6f1428d97c4a7beacda8f0aa240d19ff821174af Mon Sep 17 00:00:00 2001
From: zhijian <zhijian at ca.ibm.com>
Date: Wed, 13 Nov 2024 16:14:36 +0000
Subject: [PATCH 2/2] change test case name
---
llvm/test/CodeGen/PowerPC/{issue116061.ll => pr116071.ll} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename llvm/test/CodeGen/PowerPC/{issue116061.ll => pr116071.ll} (100%)
diff --git a/llvm/test/CodeGen/PowerPC/issue116061.ll b/llvm/test/CodeGen/PowerPC/pr116071.ll
similarity index 100%
rename from llvm/test/CodeGen/PowerPC/issue116061.ll
rename to llvm/test/CodeGen/PowerPC/pr116071.ll
More information about the llvm-commits
mailing list