diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c3c59084ee591e90d7e45df0e01f0a7a1c346aea..2bc2367e71e0a323bdd65b85f68b714ac50ec3ef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR debug/37002
+	* dwarf2out.c (mem_loc_descriptor): Use DRAP for vDRAP which
+	has been optimized out.
+
 2008-10-10  Richard Sandiford  <rdsandiford@googlemail.com>
 
 	* config/sh/sh.h (PREFERRED_RELOAD_CLASS): Test PIC_ADDR_P
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index ed4d74d0e5188b7c6138b03f5e0c074cb1387713..614871ed917eec92888673ea3aa417532e8c5e42 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -10008,6 +10008,16 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
 	 distinction between OP_REG and OP_BASEREG.  */
       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
 	mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
+      else if (stack_realign_drap
+	       && crtl->drap_reg
+	       && crtl->args.internal_arg_pointer == rtl
+	       && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
+	{
+	  /* If RTL is internal_arg_pointer, which has been optimized
+	     out, use DRAP instead.  */
+	  mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
+					    VAR_INIT_STATUS_INITIALIZED);
+	}
       break;
 
     case MEM: