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

Reply via email to