Hello,
Recent changes to dwarf information adds call_arg_location notes just after the call instruction. They need to follow the call instruction strictly. But, this means that they could occur in the middle of a VLIW instruction. Our assembler currently can not handle labels in the middle of a VLIW. We are working towards a port of GNU assembler which should make this easy in the future. Committed to mainline as r174322

Thanks
Hari

ChangeLog:
        * config/picochip/picochip.c (reorder_var_tracking_notes): Drop
        call_arg_location instructions down the floor.

Patch:

Index: gcc/config/picochip/picochip.c
===================================================================
--- gcc/config/picochip/picochip.c      (revision 174269)
+++ gcc/config/picochip/picochip.c      (working copy)
@@ -3243,13 +3243,20 @@
                     }
                 }
             }
- else if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION)
+          else if (NOTE_P (insn))
             {
                rtx prev = PREV_INSN (insn);
                PREV_INSN (next) = prev;
                NEXT_INSN (prev) = next;
-               PREV_INSN (insn) = queue;
-               queue = insn;
+ /* Ignore call_arg notes. They are expected to be just after the + call insn. If the call is start of a long VLIW, labels are + emitted in the middle of a VLIW, which our assembler can not
+                  handle. */
+               if (NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION)
+                 {
+                   PREV_INSN (insn) = queue;
+                   queue = insn;
+                 }
             }
         }
         /* Make sure we are not dropping debug instructions.*/


Reply via email to