[ARC] Do not emit ZOL in the presence of text jump tables.
authorClaudiu Zissulescu <claziss@synopsys.com>
Tue, 13 Nov 2018 12:51:30 +0000 (13:51 +0100)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Tue, 13 Nov 2018 12:51:30 +0000 (13:51 +0100)
Avoid emitting lp instruction when in its ZOL body we find a jump
table data in text section. One of the reason is the jump tables size
can be changed latter on, hence the total ZOL length may be wrongly
computed.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (hwloop_optimize): Bailout when detecting a
jump table data in the text section.

From-SVN: r266067

gcc/ChangeLog
gcc/config/arc/arc.c

index 5683289a8d88f086d55af95ac5b6b1791156bda3..7ba3fd3f359e063da20e78ecac36cf1c1daa28ca 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-13  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       * config/arc/arc.c (hwloop_optimize): Bailout when detecting a
+       jump table data in the text section.
+
 2018-11-13  Claudiu Zissulescu  <claziss@synopsys.com>
 
        * config/arc/arc.c (arc_eh_return_address_location): Repurpose it
index dbe6ff51637eb125afae7ae21e2b1046ab4207d0..6bf8e8522359928af3a005700dce2cd846bc265b 100644 (file)
@@ -7861,7 +7861,17 @@ hwloop_optimize (hwloop_info loop)
   for (insn = loop->start_label;
        insn && insn != loop->loop_end;
        insn = NEXT_INSN (insn))
-    length += NONDEBUG_INSN_P (insn) ? get_attr_length (insn) : 0;
+    {
+      length += NONDEBUG_INSN_P (insn) ? get_attr_length (insn) : 0;
+      if (JUMP_TABLES_IN_TEXT_SECTION
+         && JUMP_TABLE_DATA_P (insn))
+       {
+         if (dump_file)
+           fprintf (dump_file, ";; loop %d has a jump table\n",
+                    loop->loop_no);
+         return false;
+       }
+    }
 
   if (!insn)
     {