aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Luo <lkail@cn.ibm.com>2024-06-20 12:06:47 +0800
committerGitHub <noreply@github.com>2024-06-20 12:06:47 +0800
commit480a788e4946ac7b313291f26bca19aa65d649f1 (patch)
tree1aa4d2785dfc128ba8fe8cfd2ede722d656a2138
parentfa0666876cdf11162af341911b99311a56be2274 (diff)
downloadllvm-480a788e4946ac7b313291f26bca19aa65d649f1.zip
llvm-480a788e4946ac7b313291f26bca19aa65d649f1.tar.gz
llvm-480a788e4946ac7b313291f26bca19aa65d649f1.tar.bz2
[PowerPC] Make verifier happy after peephole on MMA COPYs (#94321)
-rw-r--r--llvm/lib/Target/PowerPC/PPCMIPeephole.cpp3
-rw-r--r--llvm/test/CodeGen/PowerPC/peephole-mma-phi-liveness.ll43
2 files changed, 39 insertions, 7 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
index c5684c7..0b515c9 100644
--- a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+++ b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
@@ -448,6 +448,9 @@ void PPCMIPeephole::convertUnprimedAccPHIs(
if (MRI->isSSA())
addRegToUpdate(RegMBB.first.getReg());
}
+ // The liveness of old PHI and new PHI have to be updated.
+ addRegToUpdate(PHI->getOperand(0).getReg());
+ addRegToUpdate(AccReg);
ChangedPHIMap[PHI] = NewPHI.getInstr();
LLVM_DEBUG(dbgs() << "Converting PHI: ");
LLVM_DEBUG(PHI->dump());
diff --git a/llvm/test/CodeGen/PowerPC/peephole-mma-phi-liveness.ll b/llvm/test/CodeGen/PowerPC/peephole-mma-phi-liveness.ll
index 7ce5240..37df4d6 100644
--- a/llvm/test/CodeGen/PowerPC/peephole-mma-phi-liveness.ll
+++ b/llvm/test/CodeGen/PowerPC/peephole-mma-phi-liveness.ll
@@ -1,14 +1,43 @@
-;REQUIRES: asserts
-;RUN: not --crash llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix < %s 2>&1 | FileCheck %s
-
-;CHECK: %[[PHI1:[0-9]+]]:accrc = PHI
-;CHECK: %[[PHI0:[0-9]+]]:uaccrc = PHI
-;CHECK: Virtual register %[[PHI0]] is not needed live through the block.
-;CHECK: Virtual register %[[PHI1]] must be live through the block.
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix < %s | FileCheck %s
target datalayout = "E-m:a-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512"
define void @baz(i64 %arg) local_unnamed_addr #0 {
+; CHECK-LABEL: baz:
+; CHECK: # %bb.0: # %bb
+; CHECK-NEXT: xxmfacc 0
+; CHECK-NEXT: xxmrgld 0, 0, 2
+; CHECK-NEXT: xxlxor 1, 1, 1
+; CHECK-NEXT: xvnegdp 2, 0
+; CHECK-NEXT: xvnegdp 0, 0
+; CHECK-NEXT: xvsubdp 2, 2, 1
+; CHECK-NEXT: xvsubdp 0, 0, 3
+; CHECK-NEXT: xvmuldp 2, 2, 1
+; CHECK-NEXT: xvmuldp 0, 0, 1
+; CHECK-NEXT: xvmaddadp 2, 1, 1
+; CHECK-NEXT: xvmaddadp 0, 1, 1
+; CHECK-NEXT: stxv 2, 0(3)
+; CHECK-NEXT: stxv 0, 0(3)
+; CHECK-NEXT: # implicit-def: $acc0
+; CHECK-NEXT: bc 12, 20, L..BB0_2
+; CHECK-NEXT: # %bb.1: # %bb10
+; CHECK-NEXT: xvf64gerpp 0, 34, 0
+; CHECK-NEXT: L..BB0_2: # %bb12
+; CHECK-NEXT: cmpdi 3, 0
+; CHECK-NEXT: L..BB0_3: # %bb13
+; CHECK-NEXT: #
+; CHECK-NEXT: bc 4, 2, L..BB0_3
+; CHECK-NEXT: # %bb.4: # %bb14
+; CHECK-NEXT: xxmfacc 0
+; CHECK-NEXT: xxlxor 0, 0, 0
+; CHECK-NEXT: xxlxor 2, 2, 2
+; CHECK-NEXT: xvsubdp 1, 0, 1
+; CHECK-NEXT: xvmaddadp 2, 1, 2
+; CHECK-NEXT: xvadddp 0, 2, 0
+; CHECK-NEXT: xxswapd 0, 0
+; CHECK-NEXT: stxv 0, 0(3)
+; CHECK-NEXT: blr
bb:
%call = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.ppc.mma.disassemble.acc(<512 x i1> poison)
%extractvalue = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %call, 0