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.