]> gcc.gnu.org Git - gcc.git/commitdiff
[PR104971] LRA: check live hard regs to remove a dead insn
authorVladimir N. Makarov <vmakarov@redhat.com>
Fri, 25 Mar 2022 16:22:08 +0000 (12:22 -0400)
committerVladimir N. Makarov <vmakarov@redhat.com>
Fri, 25 Mar 2022 16:30:54 +0000 (12:30 -0400)
LRA removes insn modifying sp for given PR test set.  We should also have
checked living hard regs to prevent this.  The patch fixes this.

gcc/ChangeLog:

PR middle-end/104971
* lra-lives.cc (process_bb_lives): Check hard_regs_live for hard
regs to clear remove_p flag.

gcc/lra-lives.cc

index 796f00629b4bbc31367a2ca88339810c1199afbb..a755464ee81f84a587f0bdce7e98cb07a106c5e3 100644 (file)
@@ -724,7 +724,10 @@ process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
          bool remove_p = true;
 
          for (reg = curr_id->regs; reg != NULL; reg = reg->next)
-           if (reg->type != OP_IN && sparseset_bit_p (pseudos_live, reg->regno))
+           if (reg->type != OP_IN
+               && (reg->regno < FIRST_PSEUDO_REGISTER
+                   ? TEST_HARD_REG_BIT (hard_regs_live, reg->regno)
+                   : sparseset_bit_p (pseudos_live, reg->regno)))
              {
                remove_p = false;
                break;
This page took 0.061811 seconds and 5 git commands to generate.