[llvm] 2cc77b2 - [LiveVariables] Don't set undef reg PHI used as live for FromMBB
Kang Zhang via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 3 08:26:10 PDT 2020
Author: Kang Zhang
Date: 2020-06-03T15:25:30Z
New Revision: 2cc77b2b8a022c0f6c7c60bf3eda157f62007d88
URL: https://github.com/llvm/llvm-project/commit/2cc77b2b8a022c0f6c7c60bf3eda157f62007d88
DIFF: https://github.com/llvm/llvm-project/commit/2cc77b2b8a022c0f6c7c60bf3eda157f62007d88.diff
LOG: [LiveVariables] Don't set undef reg PHI used as live for FromMBB
Summary:
In the patch D73152, it adds a new function LiveVariables::addNewBlock.
This new function will add the reg which PHI used to the MBB which reg
is from.
But the new function may cause LiveVariable Verification failed when the
Src reg in PHI is undef.
Reviewed By: bjope
Differential Revision: https://reviews.llvm.org/D80077
Added:
llvm/test/CodeGen/AArch64/PHIElimination-crash.mir
Modified:
llvm/lib/CodeGen/LiveVariables.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/LiveVariables.cpp b/llvm/lib/CodeGen/LiveVariables.cpp
index 7e894717e079..6610491dd111 100644
--- a/llvm/lib/CodeGen/LiveVariables.cpp
+++ b/llvm/lib/CodeGen/LiveVariables.cpp
@@ -828,7 +828,8 @@ void LiveVariables::addNewBlock(MachineBasicBlock *BB,
BBE = SuccBB->end();
BBI != BBE && BBI->isPHI(); ++BBI) {
for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2)
- if (BBI->getOperand(i + 1).getMBB() == BB)
+ if (BBI->getOperand(i + 1).getMBB() == BB &&
+ BBI->getOperand(i).readsReg())
getVarInfo(BBI->getOperand(i).getReg())
.AliveBlocks.set(NumNew);
}
diff --git a/llvm/test/CodeGen/AArch64/PHIElimination-crash.mir b/llvm/test/CodeGen/AArch64/PHIElimination-crash.mir
new file mode 100644
index 000000000000..1a1ba154062b
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/PHIElimination-crash.mir
@@ -0,0 +1,25 @@
+# RUN: llc -mtriple=aarch64-linux-gnu -verify-machineinstrs -o /dev/null %s \
+# RUN: -run-pass=livevars,phi-node-elimination,twoaddressinstruction \
+# RUN: -no-phi-elim-live-out-early-exit=1 -phi-elim-split-all-critical-edges=1
+
+# Used to result in
+#
+# *** Bad machine code: LiveVariables: Block should not be in AliveBlocks ***
+#
+# Just verify that we do not crash (or get verifier error).
+
+---
+name: test
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $nzcv, $wzr
+ Bcc 8, %bb.2, implicit $nzcv
+
+ bb.1:
+ %x:gpr32 = COPY $wzr
+
+ bb.2:
+ %y:gpr32 = PHI %x:gpr32, %bb.1, undef %undef:gpr32, %bb.0
+ $wzr = COPY %y:gpr32
+...
More information about the llvm-commits
mailing list