[ARC] Update uses for hw-loop labels.
authorClaudiu Zissulescu <claziss@synopsys.com>
Thu, 30 Nov 2017 14:42:01 +0000 (15:42 +0100)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Thu, 30 Nov 2017 14:42:01 +0000 (15:42 +0100)
Make sure we mark the hw-loop labels as beeing used.

gcc/
2017-09-19  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (hwloop_optimize): Update hw-loop's end/start
labels number of usages.

gcc/testsuite
2017-09-19  Claudiu Zissulescu  <claziss@synopsys.com>

* gcc.target/arc/loop-2.cpp: New test.

From-SVN: r255274

gcc/ChangeLog
gcc/config/arc/arc.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arc/loop-2.cpp [new file with mode: 0644]

index ddcd983..9454909 100644 (file)
@@ -1,5 +1,10 @@
 2017-11-30  Claudiu Zissulescu  <claziss@synopsys.com>
 
+       * config/arc/arc.c (hwloop_optimize): Update hw-loop's end/start
+       labels number of usages.
+
+2017-11-30  Claudiu Zissulescu  <claziss@synopsys.com>
+
        * config/arc/arc.c (arc_cannot_substitue_mem_equiv_p): New
        function.
        (TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P): Define.
index e739d60..57ea502 100644 (file)
@@ -7501,6 +7501,9 @@ hwloop_optimize (hwloop_info loop)
   /* Insert the loop end label before the last instruction of the
      loop.  */
   emit_label_after (end_label, loop->last_insn);
+  /* Make sure we mark the begining and end label as used.  */
+  LABEL_NUSES (loop->end_label)++;
+  LABEL_NUSES (loop->start_label)++;
 
   return true;
 }
index f12d075..1b5359d 100644 (file)
@@ -1,5 +1,9 @@
 2017-11-30  Claudiu Zissulescu  <claziss@synopsys.com>
 
+       * gcc.target/arc/loop-2.cpp: New test.
+
+2017-11-30  Claudiu Zissulescu  <claziss@synopsys.com>
+
        * gcc.target/arc/lra-1.c: New test.
 
 2017-11-30  Will Schmidt  <will_schmidt@vnet.ibm.com>
diff --git a/gcc/testsuite/gcc.target/arc/loop-2.cpp b/gcc/testsuite/gcc.target/arc/loop-2.cpp
new file mode 100644 (file)
index 0000000..d1dc917
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-options "-O2" } *
+/* { dg-do assemble } */
+
+/* This file fails to assemble if we forgot to increase the number of
+   uses for loop's start and end labels.  */
+int a, c, d;
+int *b;
+void fn1(int p1) {
+  if (d == 5)
+    for (int i; i < p1; ++i)
+      if (c)
+        b[i] = c;
+      else
+        int t = a = t;
+  else
+    for (int i; i < p1; ++i)
+      b[i] = 0;
+}