https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90020

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
For the RTL issue there's

compute_hash_table_work (struct gcse_hash_table_d *table)
{
...
      /* First pass over the instructions records information used to
         determine when registers and memory are first and last set.  */
      FOR_BB_INSNS (current_bb, insn)
        {
          if (!NONDEBUG_INSN_P (insn))
            continue;

          if (CALL_P (insn))
            {
              hard_reg_set_iterator hrsi;
              EXECUTE_IF_SET_IN_HARD_REG_SET (regs_invalidated_by_call,
                                              0, regno, hrsi)
                record_last_reg_set_info (insn, regno);

              if (! RTL_CONST_OR_PURE_CALL_P (insn))
                record_last_mem_set_info (insn);

which eventually initializes blocks_with_calls which prunes transp.  But
the calls in question are marked PURE but also
RTL_LOOPING_CONST_OR_PURE_CALL_P.
So the obvious thing for the above is to still mark the block for
RTL_LOOPING_CONST_OR_PURE_CALL_P.

Testing overall patch.

Reply via email to