Hi,
While working on the tree-if-conv.c, I realized that the copy
of the contents of a non scalar variable are not correctly done.
The copy assignment triggers this error:
error: virtual SSA name for non-VOP decl
while verifying SSA_NAME _ifc_.2005_46 in statement
# .MEM_394 = VDEF <.MEM_475>
_ifc_.2005_46 = ops[j_457];
The array reference looks like this:
<array_ref 0x7ffff4bd65a0
type <record_type 0x7ffff4ee2c78 simplify_plus_minus_op_data
sizes-gimplified asm_written type_0 BLK
For scalar types, the code that creates the copy is working correctly:
/* Create a new temp variable of type TYPE. Add GIMPLE_ASSIGN to assign EXP
to the new variable. */
static gimple
ifc_temp_var (tree type, tree exp)
{
const char *name = "_ifc_";
tree var, new_name;
gimple stmt;
/* Create new temporary variable. */
var = create_tmp_var (type, name);
add_referenced_var (var);
/* Build new statement to assign EXP to new variable. */
stmt = gimple_build_assign (var, exp);
/* Get SSA name for the new variable and set make new statement
its definition statement. */
new_name = make_ssa_name (var, stmt);
gimple_assign_set_lhs (stmt, new_name);
SSA_NAME_DEF_STMT (new_name) = stmt;
update_stmt (stmt);
return stmt;
}
What is missing in this function to make it handle non scalar types?
Thanks,
Sebastian Pop
--
AMD / Open Source Compiler Engineering / GNU Tools