Hi,
Function if_convertible_phi_p has below check on virtual PHI nodes:

  if (any_mask_load_store)
    return true;

  /* When there were no if-convertible stores, check
     that there are no memory writes in the branches of the loop to be
     if-converted.  */
  if (virtual_operand_p (gimple_phi_result (phi)))
    {
      imm_use_iterator imm_iter;
      use_operand_p use_p;

      if (bb != loop->header)
    {
      if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file, "Virtual phi not on loop->header.\n");
      return false;
    }

      FOR_EACH_IMM_USE_FAST (use_p, imm_iter, gimple_phi_result (phi))
    {
      if (gimple_code (USE_STMT (use_p)) == GIMPLE_PHI
          && USE_STMT (use_p) != phi)
        {
          if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file, "Difficult to handle this virtual phi.\n");
          return false;
        }
    }
    }

Since the check is short-cut by any_mask_load_store, when the check is
triggered, it means there is virtual phi node but no conditional
memory stores?  Is this possible?  Plus, any_mask_load_store is set by
below code in if_convertible_gimple_assign_stmt_p:
      if (ifcvt_can_use_mask_load_store (stmt))
    {
      gimple_set_plf (stmt, GF_PLF_2, true);
      *any_mask_load_store = true;
      return true;
    }

So in theory it's possible to skip aforementioned check when only mask
load is encountered.

Any ideas?

Thanks,
bin

Reply via email to