Hello!

We can exit early from var_lowpart for matched modes. This avoids
situation, where var_lowpart tries to change

(gdb) p debug_rtx (incoming)
(concat:SC (reg:SF 48 $f16 [ x ])
    (reg:SF 49 $f17 [ x+4 ]))
$1 = void

to SCmode, and returning NULL_RTX, since the RTX is neither REG, neither MEM.

2012-08-07  Uros Bizjak  <ubiz...@gmail.com>

        PR debug/54177
        * var-tracking.c (var_lowpart): Exit early for matched modes.

Tested on x86_64-pc-linux-gnu {,-m32} and alphaev68-unknown-linux-gnu,
where the patch also fixes testsuite failure.

Patch was approved in the PR by Alexandre, and is committed to mainline SVN.

Uros.
Index: var-tracking.c
===================================================================
--- var-tracking.c      (revision 190150)
+++ var-tracking.c      (working copy)
@@ -5086,12 +5086,12 @@ var_lowpart (enum machine_mode mode, rtx loc)
 {
   unsigned int offset, reg_offset, regno;
 
+  if (GET_MODE (loc) == mode)
+    return loc;
+
   if (!REG_P (loc) && !MEM_P (loc))
     return NULL;
 
-  if (GET_MODE (loc) == mode)
-    return loc;
-
   offset = byte_lowpart_offset (mode, GET_MODE (loc));
 
   if (MEM_P (loc))

Reply via email to