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

--- Comment #40 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
I try this following code to set ELSE_VALUE:

static tree
riscv_preferred_else_value (unsigned ifn, tree vectype, unsigned int nops,
                            tree *ops)
{
  if (riscv_v_ext_mode_p (TYPE_MODE (vectype)))
    {
      // return build_zero_cst (size_type_node);
      return get_or_create_ssa_default_def (cfun, create_tmp_var (vectype));
    }

  return default_preferred_else_value (ifn, vectype, nops, ops);
}

It generate the GIMPLE IR ELSE VALUE is an uninitialized value:

vector([128,128]) signed char D.2821;
vector([128,128]) signed char _72(D);
vect_patt_42.12_73 = .COND_LEN_MOD ({ -1, ... }, vect__3.8_67, vect__6.11_71,
_72(D), _82, 0);

Then "_72" is expanded into RTL as:

(reg:RVVM8QI 136 [ D.2821 ])

I try to use SSA_NAME_IS_DEFAULT_DEF to check whether this operand is 
the undef value since:

(gdb) p ops[4]->u->reg->attrs->decl->base.default_def_flag
$7 = 0

It's false that I can't recognize it as "undefine" value.

Reply via email to