[llvm] TwoAddressInstruction: Fix assert on undef operand with -early-live-intervals (PR #125518)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 3 07:44:04 PST 2025
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/125518
None
>From f173ea6e5377b7ddbf0a27adbd98e574254e92b1 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Mon, 3 Feb 2025 22:24:09 +0700
Subject: [PATCH] TwoAddressInstruction: Fix assert on undef operand with
-early-live-intervals
---
.../lib/CodeGen/TwoAddressInstructionPass.cpp | 3 +++
.../twoaddress-asserts-liveints-undef-use.mir | 24 +++++++++++++++++++
2 files changed, 27 insertions(+)
create mode 100644 llvm/test/CodeGen/ARM/twoaddress-asserts-liveints-undef-use.mir
diff --git a/llvm/lib/CodeGen/TwoAddressInstructionPass.cpp b/llvm/lib/CodeGen/TwoAddressInstructionPass.cpp
index fb6274b09919ba..6236268f77ab16 100644
--- a/llvm/lib/CodeGen/TwoAddressInstructionPass.cpp
+++ b/llvm/lib/CodeGen/TwoAddressInstructionPass.cpp
@@ -489,6 +489,9 @@ MachineInstr *TwoAddressInstructionImpl::findOnlyInterestingUse(
bool &IsDstPhys) const {
MachineOperand *UseOp = nullptr;
for (MachineOperand &MO : MRI->use_nodbg_operands(Reg)) {
+ if (MO.isUndef())
+ continue;
+
MachineInstr *MI = MO.getParent();
if (MI->getParent() != MBB)
return nullptr;
diff --git a/llvm/test/CodeGen/ARM/twoaddress-asserts-liveints-undef-use.mir b/llvm/test/CodeGen/ARM/twoaddress-asserts-liveints-undef-use.mir
new file mode 100644
index 00000000000000..6e33d4be9345da
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/twoaddress-asserts-liveints-undef-use.mir
@@ -0,0 +1,24 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
+# RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs -run-pass=liveintervals,twoaddressinstruction -o - %s | FileCheck %s
+
+---
+name: undef_use_asserts_lr
+tracksRegLiveness: true
+noPhis: true
+body: |
+ bb.0:
+ liveins: $q0
+
+ ; CHECK-LABEL: name: undef_use_asserts_lr
+ ; CHECK: liveins: $q0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:mqpr = COPY $q0
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:spr = IMPLICIT_DEF
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:mqpr = COPY [[COPY]]
+ ; CHECK-NEXT: dead [[COPY1:%[0-9]+]].ssub_2:mqpr = COPY [[DEF]]
+ ; CHECK-NEXT: dead [[COPY2:%[0-9]+]]:spr = COPY undef [[COPY1]].ssub_3
+ %0:mqpr = COPY $q0
+ %1:spr = IMPLICIT_DEF
+ %2:mqpr = INSERT_SUBREG %0, %1, %subreg.ssub_2
+ dead %4:spr = COPY undef %2.ssub_3
+...
More information about the llvm-commits
mailing list