diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f7a65b96bc00285367473a781ee45510d9856059..9ccc668db32a54fc52c3b3e5235e4735d7ab656b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2012-07-06  Alexandre Oliva  <aoliva@redhat.com>
+
+	PR debug/53820
+	* var-tracking.c (vt_add_function_parameter): Convert
+	internal_arg_pointer into arg_pointer-based address even
+	without DRAP.
+
 2012-07-06  Alexandre Oilva  <aoliva@redhat.com>
 
 	PR rtl-optimization/53827
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 66ce35a00954d46db3482909a362295d31d2b03a..5288c284227bb27f7b1c8351c1de5984552b680b 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -9327,14 +9327,11 @@ vt_add_function_parameter (tree parm)
   if (GET_MODE (decl_rtl) == BLKmode || GET_MODE (incoming) == BLKmode)
     return;
 
-  /* If there is a DRAP register, rewrite the incoming location of parameters
-     passed on the stack into MEMs based on the argument pointer, as the DRAP
-     register can be reused for other purposes and we do not track locations
-     based on generic registers.  But the prerequisite is that this argument
-     pointer be also the virtual CFA pointer, see vt_initialize.  */
+  /* If there is a DRAP register or a pseudo in internal_arg_pointer,
+     rewrite the incoming location of parameters passed on the stack
+     into MEMs based on the argument pointer, so that incoming doesn't
+     depend on a pseudo.  */
   if (MEM_P (incoming)
-      && stack_realign_drap
-      && arg_pointer_rtx == cfa_base_rtx
       && (XEXP (incoming, 0) == crtl->args.internal_arg_pointer
 	  || (GET_CODE (XEXP (incoming, 0)) == PLUS
 	      && XEXP (XEXP (incoming, 0), 0)