]> granicus.if.org Git - llvm/commitdiff
[Hexagon] Solo instructions cannot be used with new value jumps
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>
Thu, 30 Nov 2017 20:32:54 +0000 (20:32 +0000)
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>
Thu, 30 Nov 2017 20:32:54 +0000 (20:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319470 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Hexagon/HexagonNewValueJump.cpp
test/CodeGen/Hexagon/newvaluejump-solo.mir [new file with mode: 0644]

index 51cf6bbd8a241615bd34b942d0d4e79da6a7c639..8f177d9a4ee0a69e3c0ab3d3c2bf5fe79a4d59d3 100644 (file)
@@ -139,6 +139,9 @@ static bool canBeFeederToNewValueJump(const HexagonInstrInfo *QII,
   if (II->isImplicitDef())
     return false;
 
+  if (QII->isSolo(*II))
+    return false;
+
   // Make sure there there is no 'def' or 'use' of any of the uses of
   // feeder insn between it's definition, this MI and jump, jmpInst
   // skipping compare, cmpInst.
diff --git a/test/CodeGen/Hexagon/newvaluejump-solo.mir b/test/CodeGen/Hexagon/newvaluejump-solo.mir
new file mode 100644 (file)
index 0000000..b6bb238
--- /dev/null
@@ -0,0 +1,19 @@
+# RUN: llc -march=hexagon -run-pass hexagon-packetizer %s -o - | FileCheck %s
+
+# Check that there is no new-value jump:
+# CHECK-LABEL: name: fred
+# CHECK-NOT: if{{.*}}cmp
+---
+name: fred
+tracksRegLiveness: true
+
+body: |
+  bb.0:
+    successors: %bb.1
+      %r0 = A2_tfrsi 0
+      %r0 = V6_extractw killed undef %v0, %r0
+      %p0 = C2_cmpeqi killed %r0, 1
+      J2_jumpf killed %p0, %bb.1, implicit-def %pc
+
+  bb.1:
+...