rl78.c (rl78_note_reg_set): fixed dead reg check for non-QImode registers
authorSebastian Perta <sebastian.perta@renesas.com>
Mon, 22 Jan 2018 13:53:48 +0000 (13:53 +0000)
committerSebastian Perta <sebastianperta@gcc.gnu.org>
Mon, 22 Jan 2018 13:53:48 +0000 (13:53 +0000)
2018-01-12  Sebastian Perta  <sebastian.perta@renesas.com>

* config/rl78/rl78.c (rl78_note_reg_set): fixed dead reg check
for non-QImode registers

From-SVN: r256945

gcc/ChangeLog
gcc/config/rl78/rl78.c

index bba9f63c11f057cbd10fdaf4862d988a7dbb3694..17f22767582bff6c43fb50c7dac4d526efca7445 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>
+       
+       * config/rl78/rl78.c (rl78_note_reg_set): fixed dead reg check 
+       for non-QImode registers
+
 2018-01-22  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/83963
index efa4b3910586a3421745178b04d74bbed7010be1..3e34a88f0b797173ee9d9562251e18c3c1df9167 100644 (file)
@@ -3792,16 +3792,21 @@ static void
 rl78_note_reg_set (char *dead, rtx d, rtx insn)
 {
   int r, i;
-
+  bool is_dead;
   if (GET_CODE (d) == MEM)
     rl78_note_reg_uses (dead, XEXP (d, 0), insn);
 
   if (GET_CODE (d) != REG)
     return;
 
+  /* Do not mark the reg unused unless all QImode parts of it are dead.  */
   r = REGNO (d);
-  if (dead [r])
-    add_reg_note (insn, REG_UNUSED, gen_rtx_REG (GET_MODE (d), r));
+  is_dead = true;
+  for (i = 0; i < GET_MODE_SIZE (GET_MODE (d)); i ++)
+         if (!dead [r + i])
+                 is_dead = false;
+  if(is_dead)
+       add_reg_note (insn, REG_UNUSED, gen_rtx_REG (GET_MODE (d), r));
   if (dump_file)
     fprintf (dump_file, "note set reg %d size %d\n", r, GET_MODE_SIZE (GET_MODE (d)));
   for (i = 0; i < GET_MODE_SIZE (GET_MODE (d)); i ++)