[llvm] 28963d8 - [GlobalISel] Don't DCE LIFETIME_START/LIFETIME_END markers.
Amara Emerson via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 17 18:21:10 PDT 2021
Author: Amara Emerson
Date: 2021-03-17T18:02:08-07:00
New Revision: 28963d895b529e90b8b99716516ae4e422592797
URL: https://github.com/llvm/llvm-project/commit/28963d895b529e90b8b99716516ae4e422592797
DIFF: https://github.com/llvm/llvm-project/commit/28963d895b529e90b8b99716516ae4e422592797.diff
LOG: [GlobalISel] Don't DCE LIFETIME_START/LIFETIME_END markers.
These are pseudos without any users, so DCE was killing them in the combiner.
Marking them as having side effects doesn't seem quite right since they don't.
Gives a nice 0.3% geomean size win on CTMark -Os.
Differential Revision: https://reviews.llvm.org/D98811
Added:
llvm/test/CodeGen/AArch64/GlobalISel/lifetime-marker-no-dce.mir
Modified:
llvm/lib/CodeGen/GlobalISel/Utils.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/llvm/lib/CodeGen/GlobalISel/Utils.cpp
index c24ebcf38c5f..5d062820a49f 100644
--- a/llvm/lib/CodeGen/GlobalISel/Utils.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/Utils.cpp
@@ -200,6 +200,10 @@ bool llvm::isTriviallyDead(const MachineInstr &MI,
// Don't delete frame allocation labels.
if (MI.getOpcode() == TargetOpcode::LOCAL_ESCAPE)
return false;
+ // LIFETIME markers should be preserved even if they seem dead.
+ if (MI.getOpcode() == TargetOpcode::LIFETIME_START ||
+ MI.getOpcode() == TargetOpcode::LIFETIME_END)
+ return false;
// If we can move an instruction, we can remove it. Otherwise, it has
// a side-effect of some sort.
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/lifetime-marker-no-dce.mir b/llvm/test/CodeGen/AArch64/GlobalISel/lifetime-marker-no-dce.mir
new file mode 100644
index 000000000000..16f2d70cd604
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/lifetime-marker-no-dce.mir
@@ -0,0 +1,24 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -global-isel -verify-machineinstrs %s -o - | FileCheck %s
+# Check that we don't DCE the lifetime markers even though they don't have any users.
+---
+name: test_lifetime_no_dce
+alignment: 4
+tracksRegLiveness: true
+frameInfo:
+ maxAlignment: 4
+stack:
+ - { id: 0, size: 4, alignment: 4 }
+machineFunctionInfo: {}
+body: |
+ bb.1:
+ ;%0:_(p0) = G_FRAME_INDEX %stack.0.slot
+ ; CHECK-LABEL: name: test_lifetime_no_dce
+ ; CHECK: LIFETIME_START %stack.0
+ ; CHECK: LIFETIME_END %stack.0
+ ; CHECK: RET_ReallyLR
+ LIFETIME_START %stack.0
+ LIFETIME_END %stack.0
+ RET_ReallyLR
+
+...
More information about the llvm-commits
mailing list