From c3a6d30355b8642313f1088c69aa48d67f13b9dc Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Tue, 21 Nov 2017 21:05:51 +0000 Subject: [PATCH] [Hexagon] Make sure that RDF does not remove EH_LABELs Since EH_LABELs (and other labels) no longer have "side-effects", they should be checked for separately. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318801 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Hexagon/RDFDeadCode.cpp | 3 ++- test/CodeGen/Hexagon/rdf-ehlabel-live.mir | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/Hexagon/rdf-ehlabel-live.mir diff --git a/lib/Target/Hexagon/RDFDeadCode.cpp b/lib/Target/Hexagon/RDFDeadCode.cpp index 60a12dcf2f0..240d7c355bc 100644 --- a/lib/Target/Hexagon/RDFDeadCode.cpp +++ b/lib/Target/Hexagon/RDFDeadCode.cpp @@ -58,7 +58,8 @@ private: bool DeadCodeElimination::isLiveInstr(const MachineInstr *MI) const { if (MI->mayStore() || MI->isBranch() || MI->isCall() || MI->isReturn()) return true; - if (MI->hasOrderedMemoryRef() || MI->hasUnmodeledSideEffects()) + if (MI->hasOrderedMemoryRef() || MI->hasUnmodeledSideEffects() || + MI->isPosition()) return true; if (MI->isPHI()) return false; diff --git a/test/CodeGen/Hexagon/rdf-ehlabel-live.mir b/test/CodeGen/Hexagon/rdf-ehlabel-live.mir new file mode 100644 index 00000000000..860240e0817 --- /dev/null +++ b/test/CodeGen/Hexagon/rdf-ehlabel-live.mir @@ -0,0 +1,17 @@ +# RUN: llc -march=hexagon -run-pass hexagon-rdf-opt -o - %s | FileCheck %s + +# Check that EH_LABELs are not removed as dead (since they are no longer +# marked as having side-effects): +# CHECK-LABEL: fred +# CHECK: EH_LABEL + +--- +name: fred +tracksRegLiveness: true + +body: | + bb.0: + %r0 = A2_tfrsi 0 + EH_LABEL 0 +... + -- 2.50.1