]> granicus.if.org Git - llvm/commitdiff
[Hexagon] Make sure that RDF does not remove EH_LABELs
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>
Tue, 21 Nov 2017 21:05:51 +0000 (21:05 +0000)
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>
Tue, 21 Nov 2017 21:05:51 +0000 (21:05 +0000)
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
test/CodeGen/Hexagon/rdf-ehlabel-live.mir [new file with mode: 0644]

index 60a12dcf2f03d0ce0caede414c3eeb2c08a7118c..240d7c355bc72cdd29e700c5fa1fa11ef073569a 100644 (file)
@@ -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 (file)
index 0000000..860240e
--- /dev/null
@@ -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
+...
+