--- gcc/reg-notes.def.jj	2018-01-03 10:19:55.239533971 +0100
+++ gcc/reg-notes.def	2018-02-07 16:40:03.800915206 +0100
@@ -239,3 +239,6 @@ REG_NOTE (CALL_DECL)
    when a called function has a 'notrack' attribute.  This note is used by the
    compiler when the option -fcf-protection=branch is specified.  */
 REG_NOTE (CALL_NOCF_CHECK)
+
+/* The values passed to callee, for debuginfo purposes.  */
+REG_NOTE (CALL_ARG_LOCATION)
--- gcc/insn-notes.def.jj	2018-01-03 10:19:55.669534040 +0100
+++ gcc/insn-notes.def	2018-02-07 16:40:03.800915206 +0100
@@ -65,9 +65,6 @@ INSN_NOTE (EH_REGION_END)
 /* The location of a variable.  */
 INSN_NOTE (VAR_LOCATION)
 
-/* The values passed to callee.  */
-INSN_NOTE (CALL_ARG_LOCATION)
-
 /* The beginning of a statement.  */
 INSN_NOTE (BEGIN_STMT)
 
--- gcc/var-tracking.c.jj	2018-02-07 13:11:26.950985542 +0100
+++ gcc/var-tracking.c	2018-02-07 16:44:10.810478942 +0100
@@ -8860,14 +8860,12 @@ emit_note_insn_var_location (variable **
       /* Make sure that the call related notes come first.  */
       while (NEXT_INSN (insn)
 	     && NOTE_P (insn)
-	     && ((NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION
-		  && NOTE_DURING_CALL_P (insn))
-		 || NOTE_KIND (insn) == NOTE_INSN_CALL_ARG_LOCATION))
+	     && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION
+	     && NOTE_DURING_CALL_P (insn))
 	insn = NEXT_INSN (insn);
       if (NOTE_P (insn)
-	  && ((NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION
-	       && NOTE_DURING_CALL_P (insn))
-	      || NOTE_KIND (insn) == NOTE_INSN_CALL_ARG_LOCATION))
+	  && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION
+	  && NOTE_DURING_CALL_P (insn))
 	note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn);
       else
 	note = emit_note_before (NOTE_INSN_VAR_LOCATION, insn);
@@ -9210,7 +9208,6 @@ emit_notes_in_bb (basic_block bb, datafl
 	    emit_notes_for_changes (insn, EMIT_NOTE_AFTER_CALL_INSN, set->vars);
 	    {
 	      rtx arguments = mo->u.loc, *p = &arguments;
-	      rtx_note *note;
 	      while (*p)
 		{
 		  XEXP (XEXP (*p, 0), 1)
@@ -9218,7 +9215,11 @@ emit_notes_in_bb (basic_block bb, datafl
 				     shared_hash_htab (set->vars));
 		  /* If expansion is successful, keep it in the list.  */
 		  if (XEXP (XEXP (*p, 0), 1))
-		    p = &XEXP (*p, 1);
+		    {
+		      XEXP (XEXP (*p, 0), 1)
+			= copy_rtx_if_shared (XEXP (XEXP (*p, 0), 1));
+		      p = &XEXP (*p, 1);
+		    }
 		  /* Otherwise, if the following item is data_value for it,
 		     drop it too too.  */
 		  else if (XEXP (*p, 1)
@@ -9234,8 +9235,7 @@ emit_notes_in_bb (basic_block bb, datafl
 		  else
 		    *p = XEXP (*p, 1);
 		}
-	      note = emit_note_after (NOTE_INSN_CALL_ARG_LOCATION, insn);
-	      NOTE_VAR_LOCATION (note) = arguments;
+	      add_reg_note (insn, REG_CALL_ARG_LOCATION, arguments);
 	    }
 	    break;
 
--- gcc/dwarf2out.c.jj	2018-02-06 21:30:56.402732183 +0100
+++ gcc/dwarf2out.c	2018-02-07 16:43:08.201589517 +0100
@@ -22607,7 +22607,7 @@ gen_subprogram_die (tree decl, dw_die_re
 	      rtx arg, next_arg;
 
 	      for (arg = (ca_loc->call_arg_loc_note != NULL_RTX
-			  ? NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note)
+			  ? XEXP (ca_loc->call_arg_loc_note, 0)
 			  : NULL_RTX);
 		   arg; arg = next_arg)
 		{
@@ -26366,6 +26366,17 @@ dwarf2out_var_location (rtx_insn *loc_no
 	  call_site_count++;
 	  if (SIBLING_CALL_P (loc_note))
 	    tail_call_site_count++;
+	  if (find_reg_note (loc_note, REG_CALL_ARG_LOCATION, NULL_RTX))
+	    {
+	      call_insn = loc_note;
+	      loc_note = NULL;
+	      var_loc_p = false;
+
+	      next_real = dwarf2out_next_real_insn (call_insn);
+	      next_note = NULL;
+	      cached_next_real_insn = NULL;
+	      goto create_label;
+	    }
 	  if (optimize == 0 && !flag_var_tracking)
 	    {
 	      /* When the var-tracking pass is not running, there is no note
@@ -26419,8 +26430,7 @@ dwarf2out_var_location (rtx_insn *loc_no
       || next_note->deleted ()
       || ! NOTE_P (next_note)
       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
-	  && NOTE_KIND (next_note) != NOTE_INSN_BEGIN_STMT
-	  && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
+	  && NOTE_KIND (next_note) != NOTE_INSN_BEGIN_STMT))
     next_note = NULL;
 
   if (! next_real)
@@ -26529,10 +26539,10 @@ create_label:
     {
       struct call_arg_loc_node *ca_loc
 	= ggc_cleared_alloc<call_arg_loc_node> ();
-      rtx_insn *prev
-        = loc_note != NULL_RTX ? prev_real_insn (loc_note) : call_insn;
+      rtx_insn *prev = call_insn;
 
-      ca_loc->call_arg_loc_note = loc_note;
+      ca_loc->call_arg_loc_note
+	= find_reg_note (call_insn, REG_CALL_ARG_LOCATION, NULL_RTX);
       ca_loc->next = NULL;
       ca_loc->label = last_label;
       gcc_assert (prev
--- gcc/final.c.jj	2018-01-18 21:11:57.272207030 +0100
+++ gcc/final.c	2018-02-07 17:15:40.031809548 +0100
@@ -2355,7 +2355,6 @@ final_scan_insn (rtx_insn *insn, FILE *f
 	  break;
 
 	case NOTE_INSN_VAR_LOCATION:
-	case NOTE_INSN_CALL_ARG_LOCATION:
 	  if (!DECL_IGNORED_P (current_function_decl))
 	    debug_hooks->var_location (insn);
 	  break;
@@ -4664,14 +4663,19 @@ rest_of_clean_state (void)
       SET_NEXT_INSN (insn) = NULL;
       SET_PREV_INSN (insn) = NULL;
 
+      if (CALL_P (insn))
+	{
+	  rtx note = find_reg_note (insn, REG_CALL_ARG_LOCATION, NULL_RTX);
+	  if (note)
+	    remove_note (insn, note);
+	}
       if (final_output
-	  && (!NOTE_P (insn) ||
-	      (NOTE_KIND (insn) != NOTE_INSN_VAR_LOCATION
-	       && NOTE_KIND (insn) != NOTE_INSN_BEGIN_STMT
-	       && NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION
-	       && NOTE_KIND (insn) != NOTE_INSN_BLOCK_BEG
-	       && NOTE_KIND (insn) != NOTE_INSN_BLOCK_END
-	       && NOTE_KIND (insn) != NOTE_INSN_DELETED_DEBUG_LABEL)))
+	  && (!NOTE_P (insn)
+	      || (NOTE_KIND (insn) != NOTE_INSN_VAR_LOCATION
+		  && NOTE_KIND (insn) != NOTE_INSN_BEGIN_STMT
+		  && NOTE_KIND (insn) != NOTE_INSN_BLOCK_BEG
+		  && NOTE_KIND (insn) != NOTE_INSN_BLOCK_END
+		  && NOTE_KIND (insn) != NOTE_INSN_DELETED_DEBUG_LABEL)))
 	print_rtl_single (final_output, insn);
     }
 
--- gcc/except.c.jj	2018-01-03 10:19:55.864534071 +0100
+++ gcc/except.c	2018-02-07 16:43:08.200589519 +0100
@@ -2465,14 +2465,6 @@ add_call_site (rtx landing_pad, int acti
 static rtx_note *
 emit_note_eh_region_end (rtx_insn *insn)
 {
-  rtx_insn *next = NEXT_INSN (insn);
-
-  /* Make sure we do not split a call and its corresponding
-     CALL_ARG_LOCATION note.  */
-  if (next && NOTE_P (next)
-      && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
-    insn = next;
-
   return emit_note_after (NOTE_INSN_EH_REGION_END, insn);
 }
 
--- gcc/config/alpha/alpha.c.jj	2018-01-04 12:37:25.259487337 +0100
+++ gcc/config/alpha/alpha.c	2018-02-07 16:43:08.200589519 +0100
@@ -9406,14 +9406,6 @@ alpha_pad_function_end (void)
 	       || find_reg_note (insn, REG_NORETURN, NULL_RTX)))
         continue;
 
-      /* Make sure we do not split a call and its corresponding
-	 CALL_ARG_LOCATION note.  */
-      next = NEXT_INSN (insn);
-      if (next == NULL)
-	continue;
-      if (NOTE_P (next) && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
-	insn = next;
-
       next = next_active_insn (insn);
       if (next)
 	{
--- gcc/config/c6x/c6x.c.jj	2018-01-03 10:20:00.740534851 +0100
+++ gcc/config/c6x/c6x.c	2018-02-07 16:43:08.201589517 +0100
@@ -4637,7 +4637,6 @@ static void
 c6x_gen_bundles (void)
 {
   basic_block bb;
-  rtx_insn *insn, *next, *last_call;
 
   FOR_EACH_BB_FN (bb, cfun)
     {
@@ -4704,29 +4703,6 @@ c6x_gen_bundles (void)
 	    break;
 	}
     }
-  /* Bundling, and emitting nops, can separate
-     NOTE_INSN_CALL_ARG_LOCATION from the corresponding calls.  Fix
-     that up here.  */
-  last_call = NULL;
-  for (insn = get_insns (); insn; insn = next)
-    {
-      next = NEXT_INSN (insn);
-      if (CALL_P (insn)
-	  || (INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE
-	      && CALL_P (XVECEXP (PATTERN (insn), 0, 0))))
-	last_call = insn;
-      if (!NOTE_P (insn) || NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION)
-	continue;
-      if (NEXT_INSN (last_call) == insn)
-	continue;
-      SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
-      SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
-      SET_PREV_INSN (insn) = last_call;
-      SET_NEXT_INSN (insn) = NEXT_INSN (last_call);
-      SET_PREV_INSN (NEXT_INSN (insn)) = insn;
-      SET_NEXT_INSN (PREV_INSN (insn)) = insn;
-      last_call = insn;
-    }
 }
 
 /* Emit a NOP instruction for CYCLES cycles after insn AFTER.  Return it.  */
--- gcc/config/arc/arc.c.jj	2018-01-31 21:38:10.510050496 +0100
+++ gcc/config/arc/arc.c	2018-02-07 16:43:08.201589517 +0100
@@ -7700,10 +7700,7 @@ hwloop_optimize (hwloop_info loop)
 #if 0
       while (DEBUG_INSN_P (entry_after)
              || (NOTE_P (entry_after)
-                 && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK
-		 /* Make sure we don't split a call and its corresponding
-		    CALL_ARG_LOCATION note.  */
-                 && NOTE_KIND (entry_after) != NOTE_INSN_CALL_ARG_LOCATION))
+		 && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK))
         entry_after = NEXT_INSN (entry_after);
 #endif
       entry_after = next_nonnote_nondebug_insn_bb (entry_after);
--- gcc/config/arm/arm.c.jj	2018-02-06 13:13:08.930742979 +0100
+++ gcc/config/arm/arm.c	2018-02-07 16:43:08.201589517 +0100
@@ -16556,16 +16556,6 @@ create_fix_barrier (Mfix *fix, HOST_WIDE
   /* Make sure that we found a place to insert the jump.  */
   gcc_assert (selected);
 
-  /* Make sure we do not split a call and its corresponding
-     CALL_ARG_LOCATION note.  */
-  if (CALL_P (selected))
-    {
-      rtx_insn *next = NEXT_INSN (selected);
-      if (next && NOTE_P (next)
-	  && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
-	  selected = next;
-    }
-
   /* Create a new JUMP_INSN that branches around a barrier.  */
   from = emit_jump_insn_after (gen_jump (label), selected);
   JUMP_LABEL (from) = label;
--- gcc/config/s390/s390.c.jj	2018-01-03 10:20:05.176535560 +0100
+++ gcc/config/s390/s390.c	2018-02-07 16:43:08.201589517 +0100
@@ -9224,7 +9224,6 @@ s390_chunkify_start (void)
 	    section_switch_p = true;
 	    break;
 	  case NOTE_INSN_VAR_LOCATION:
-	  case NOTE_INSN_CALL_ARG_LOCATION:
 	    continue;
 	  default:
 	    break;
@@ -9295,8 +9294,7 @@ s390_chunkify_start (void)
 		    }
 		  while (next
 			 && NOTE_P (next)
-			 && (NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION
-			     || NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION));
+			 && NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION);
 		}
 	      else
 		{
--- gcc/config/sh/sh.c.jj	2018-01-14 17:16:55.869836128 +0100
+++ gcc/config/sh/sh.c	2018-02-07 16:43:08.201589517 +0100
@@ -5229,16 +5229,6 @@ find_barrier (int num_mova, rtx_insn *mo
 	     || LABEL_P (from))
 	from = PREV_INSN (from);
 
-      /* Make sure we do not split between a call and its corresponding
-	 CALL_ARG_LOCATION note.  */
-      if (CALL_P (from))
-	{
-	  rtx_insn *next = NEXT_INSN (from);
-	  if (next && NOTE_P (next)
-	      && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
-	    from = next;
-	}
-
       from = emit_jump_insn_after (gen_jump (label), from);
       JUMP_LABEL (from) = label;
       LABEL_NUSES (label) = 1;
--- gcc/config/i386/i386.c.jj	2018-02-07 13:11:29.449980343 +0100
+++ gcc/config/i386/i386.c	2018-02-07 16:43:08.201589517 +0100
@@ -2619,16 +2619,8 @@ rest_of_insert_endbranch (void)
 	      /* Generate ENDBRANCH after CALL, which can return more than
 		 twice, setjmp-like functions.  */
 
-	      /* Skip notes that must immediately follow the call insn.  */
-	      rtx_insn *next_insn = insn;
-	      if (NEXT_INSN (insn)
-		  && NOTE_P (NEXT_INSN (insn))
-		  && (NOTE_KIND (NEXT_INSN (insn))
-		      == NOTE_INSN_CALL_ARG_LOCATION))
-		next_insn = NEXT_INSN (insn);
-
 	      cet_eb = gen_nop_endbr ();
-	      emit_insn_after_setloc (cet_eb, next_insn, INSN_LOCATION (insn));
+	      emit_insn_after_setloc (cet_eb, insn, INSN_LOCATION (insn));
 	      continue;
 	    }
 
@@ -42115,9 +42107,7 @@ ix86_seh_fixup_eh_fallthru (void)
 
       /* Do not separate calls from their debug information.  */
       for (next = NEXT_INSN (insn); next != NULL; next = NEXT_INSN (next))
-	if (NOTE_P (next)
-            && (NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION
-                || NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION))
+	if (NOTE_P (next) && NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION)
 	  insn = next;
 	else
 	  break;
--- gcc/config/xtensa/xtensa.c.jj	2018-01-03 10:20:07.506535933 +0100
+++ gcc/config/xtensa/xtensa.c	2018-02-07 16:43:08.201589517 +0100
@@ -4255,10 +4255,7 @@ hwloop_optimize (hwloop_info loop)
       entry_after = BB_END (entry_bb);
       while (DEBUG_INSN_P (entry_after)
              || (NOTE_P (entry_after)
-                 && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK
-		 /* Make sure we don't split a call and its corresponding
-		    CALL_ARG_LOCATION note.  */
-                 && NOTE_KIND (entry_after) != NOTE_INSN_CALL_ARG_LOCATION))
+		 && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK))
         entry_after = PREV_INSN (entry_after);
 
       emit_insn_after (seq, entry_after);
--- gcc/config/iq2000/iq2000.c.jj	2018-01-03 10:20:08.778536124 +0100
+++ gcc/config/iq2000/iq2000.c	2018-02-07 16:43:08.201589517 +0100
@@ -1578,13 +1578,7 @@ final_prescan_insn (rtx_insn *insn, rtx
        || (GET_CODE (PATTERN (insn)) == RETURN))
 	   && NEXT_INSN (PREV_INSN (insn)) == insn)
     {
-      rtx_insn *tmp = insn;
-      while (NEXT_INSN (tmp)
-	     && NOTE_P (NEXT_INSN (tmp))
-	     && NOTE_KIND (NEXT_INSN (tmp)) == NOTE_INSN_CALL_ARG_LOCATION)
-	tmp = NEXT_INSN (tmp);
-
-      rtx_insn *nop_insn = emit_insn_after (gen_nop (), tmp);
+      rtx_insn *nop_insn = emit_insn_after (gen_nop (), insn);
       INSN_ADDRESSES_NEW (nop_insn, -1);
     }
   
--- gcc/config/frv/frv.c.jj	2018-01-03 10:20:15.021537135 +0100
+++ gcc/config/frv/frv.c	2018-02-07 16:43:08.201589517 +0100
@@ -1415,8 +1415,6 @@ frv_function_contains_far_jump (void)
 static void
 frv_function_prologue (FILE *file)
 {
-  rtx_insn *insn, *next, *last_call;
-
   /* If no frame was created, check whether the function uses a call
      instruction to implement a far jump.  If so, save the link in gr3 and
      replace all returns to LR with returns to GR3.  GR3 is used because it
@@ -1457,32 +1455,6 @@ frv_function_prologue (FILE *file)
 
   /* Allow the garbage collector to free the nops created by frv_reorg.  */
   memset (frv_nops, 0, sizeof (frv_nops));
-
-  /* Locate CALL_ARG_LOCATION notes that have been misplaced
-     and move them back to where they should be located.  */
-  last_call = NULL;
-  for (insn = get_insns (); insn; insn = next)
-    {
-      next = NEXT_INSN (insn);
-      if (CALL_P (insn)
-	  || (INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE
-	      && CALL_P (XVECEXP (PATTERN (insn), 0, 0))))
-	last_call = insn;
-
-      if (!NOTE_P (insn) || NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION)
-	continue;
-
-      if (NEXT_INSN (last_call) == insn)
-	continue;
-
-      SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
-      SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
-      SET_PREV_INSN (insn) = last_call;
-      SET_NEXT_INSN (insn) = NEXT_INSN (last_call);
-      SET_PREV_INSN (NEXT_INSN (insn)) = insn;
-      SET_NEXT_INSN (PREV_INSN (insn)) = insn;
-      last_call = insn;
-    }
 }
 
 
--- gcc/emit-rtl.c.jj	2018-01-10 10:00:09.241349608 +0100
+++ gcc/emit-rtl.c	2018-02-07 16:43:08.201589517 +0100
@@ -3866,15 +3866,12 @@ try_split (rtx pat, rtx_insn *trial, int
       for (insn = insn_last; insn ; insn = PREV_INSN (insn))
 	if (CALL_P (insn))
 	  {
-	    rtx_insn *next;
-	    rtx *p;
-
 	    gcc_assert (call_insn == NULL_RTX);
 	    call_insn = insn;
 
 	    /* Add the old CALL_INSN_FUNCTION_USAGE to whatever the
 	       target may have explicitly specified.  */
-	    p = &CALL_INSN_FUNCTION_USAGE (insn);
+	    rtx *p = &CALL_INSN_FUNCTION_USAGE (insn);
 	    while (*p)
 	      p = &XEXP (*p, 1);
 	    *p = CALL_INSN_FUNCTION_USAGE (trial);
@@ -3882,21 +3879,6 @@ try_split (rtx pat, rtx_insn *trial, int
 	    /* If the old call was a sibling call, the new one must
 	       be too.  */
 	    SIBLING_CALL_P (insn) = SIBLING_CALL_P (trial);
-
-	    /* If the new call is the last instruction in the sequence,
-	       it will effectively replace the old call in-situ.  Otherwise
-	       we must move any following NOTE_INSN_CALL_ARG_LOCATION note
-	       so that it comes immediately after the new call.  */
-	    if (NEXT_INSN (insn))
-	      for (next = NEXT_INSN (trial);
-		   next && NOTE_P (next);
-		   next = NEXT_INSN (next))
-		if (NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
-		  {
-		    remove_insn (next);
-		    add_insn_after (next, insn, NULL);
-		    break;
-		  }
 	  }
     }
 
@@ -3913,6 +3895,7 @@ try_split (rtx pat, rtx_insn *trial, int
 	case REG_SETJMP:
 	case REG_TM:
 	case REG_CALL_NOCF_CHECK:
+	case REG_CALL_ARG_LOCATION:
 	  for (insn = insn_last; insn != NULL_RTX; insn = PREV_INSN (insn))
 	    {
 	      if (CALL_P (insn))
@@ -4777,7 +4760,6 @@ note_outside_basic_block_p (enum insn_no
 	 inside basic blocks.  If the caller is emitting on the basic block
 	 boundary, do not set BLOCK_FOR_INSN on the new note.  */
       case NOTE_INSN_VAR_LOCATION:
-      case NOTE_INSN_CALL_ARG_LOCATION:
       case NOTE_INSN_EH_REGION_BEG:
       case NOTE_INSN_EH_REGION_END:
 	return on_bb_boundary_p;
--- gcc/gengtype.c.jj	2018-01-03 10:19:54.626533873 +0100
+++ gcc/gengtype.c	2018-02-07 16:43:08.201589517 +0100
@@ -1187,7 +1187,6 @@ adjust_field_rtx_def (type_p t, options_
 	    break;
 
 	  case NOTE_INSN_VAR_LOCATION:
-	  case NOTE_INSN_CALL_ARG_LOCATION:
 	    note_flds = create_field (note_flds, rtx_tp, "rt_rtx");
 	    break;
 
--- gcc/print-rtl.c.jj	2018-01-03 10:19:55.991534091 +0100
+++ gcc/print-rtl.c	2018-02-07 16:43:08.201589517 +0100
@@ -264,7 +264,6 @@ rtx_writer::print_rtx_operand_code_0 (co
 	  }
 
 	case NOTE_INSN_VAR_LOCATION:
-	case NOTE_INSN_CALL_ARG_LOCATION:
 	  fputc (' ', m_outfile);
 	  print_rtx (NOTE_VAR_LOCATION (in_rtx));
 	  break;
@@ -1965,7 +1964,6 @@ print_insn (pretty_printer *pp, const rt
 	    break;
 
 	  case NOTE_INSN_VAR_LOCATION:
-	  case NOTE_INSN_CALL_ARG_LOCATION:
 	    pp_left_brace (pp);
 	    print_pattern (pp, NOTE_VAR_LOCATION (x), verbose);
 	    pp_right_brace (pp);
--- gcc/jump.c.jj	2018-01-03 10:19:54.949533924 +0100
+++ gcc/jump.c	2018-02-07 16:43:08.201589517 +0100
@@ -127,17 +127,6 @@ cleanup_barriers (void)
 	  if (!prev)
 	    continue;
 
-	  if (CALL_P (prev))
-	    {
-	      /* Make sure we do not split a call and its corresponding
-		 CALL_ARG_LOCATION note.  */
-	      rtx_insn *next = NEXT_INSN (prev);
-
-	      if (NOTE_P (next)
-		  && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
-		prev = next;
-	    }
-
 	  if (BARRIER_P (prev))
 	    delete_insn (insn);
 	  else if (prev != PREV_INSN (insn))
@@ -1279,26 +1268,6 @@ delete_related_insns (rtx uncast_insn)
   if (next != 0 && BARRIER_P (next))
     delete_insn (next);
 
-  /* If this is a call, then we have to remove the var tracking note
-     for the call arguments.  */
-
-  if (CALL_P (insn)
-      || (NONJUMP_INSN_P (insn)
-	  && GET_CODE (PATTERN (insn)) == SEQUENCE
-	  && CALL_P (XVECEXP (PATTERN (insn), 0, 0))))
-    {
-      rtx_insn *p;
-
-      for (p = next && next->deleted () ? NEXT_INSN (next) : next;
-	   p && NOTE_P (p);
-	   p = NEXT_INSN (p))
-	if (NOTE_KIND (p) == NOTE_INSN_CALL_ARG_LOCATION)
-	  {
-	    remove_insn (p);
-	    break;
-	  }
-    }
-
   /* If deleting a jump, decrement the count of the label,
      and delete the label if it is now unused.  */
 
--- gcc/cfgrtl.c.jj	2018-01-11 19:01:11.904444589 +0100
+++ gcc/cfgrtl.c	2018-02-07 16:43:08.201589517 +0100
@@ -1628,11 +1628,6 @@ force_nonfallthru_and_redirect (edge e,
       else
 	new_head = BB_END (e->src);
       new_head = NEXT_INSN (new_head);
-      /* Make sure we don't split a call and its corresponding
-	 CALL_ARG_LOCATION note.  */
-      if (new_head && NOTE_P (new_head)
-	  && NOTE_KIND (new_head) == NOTE_INSN_CALL_ARG_LOCATION)
-	new_head = NEXT_INSN (new_head);
 
       jump_block = create_basic_block (new_head, NULL, e->src);
       jump_block->count = count;
--- gcc/testsuite/gcc.target/i386/pr84146.c.jj	2018-02-06 21:32:08.549609100 +0100
+++ gcc/testsuite/gcc.target/i386/pr84146.c	2018-02-07 17:16:37.345774290 +0100
@@ -1,6 +1,6 @@
 /* PR target/84146 */
 /* { dg-do compile } */
-/* { dg-options "-O2 -g -mcet -fcf-protection=full" } */
+/* { dg-options "-O2 -g -mcet -fcf-protection=full -fcompare-debug" } */
 
 int __setjmp (void **);
 void *buf[64];
