+2008-01-08 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/34683
+ * tree-ssa-operands.c (operand_build_cmp): Export.
+ * tree-ssa-operands.h (operand_build_cmp): Declare.
+ * tree-vn.c (vuses_compare): Remove.
+ (sort_vuses): Use operand_build_cmp.
+ (sort_vuses_heap): Likewise.
+ * tree-ssa-sccvn.c (vuses_to_vec): Use VEC_reserve, not VEC_alloc
+ to re-use old VEC if available. Do not sort already sorted VUSEs.
+ (vdefs_to_vec): Do not sort already sorted VDEFs.
+
2008-01-08 Jakub Jelinek <jakub@redhat.com>
PR middle-end/34694
/* Comparison function for qsort used in operand_build_sort_virtual. */
-static int
+int
operand_build_cmp (const void *p, const void *q)
{
const_tree const e1 = *((const_tree const *)p);
extern bool verify_imm_links (FILE *f, tree var);
extern void copy_virtual_operands (tree, tree);
+extern int operand_build_cmp (const void *, const void *);
extern void create_ssa_artificial_load_stmt (tree, tree, bool);
extern void dump_immediate_uses (FILE *file);
if (!stmt)
return;
- *result = VEC_alloc (tree, gc, num_ssa_operands (stmt, SSA_OP_VIRTUAL_USES));
+ VEC_reserve_exact (tree, gc, *result,
+ num_ssa_operands (stmt, SSA_OP_VIRTUAL_USES));
FOR_EACH_SSA_TREE_OPERAND (vuse, stmt, iter, SSA_OP_VIRTUAL_USES)
VEC_quick_push (tree, *result, vuse);
-
- if (VEC_length (tree, *result) > 1)
- sort_vuses (*result);
}
FOR_EACH_SSA_TREE_OPERAND (vdef, stmt, iter, SSA_OP_VIRTUAL_DEFS)
VEC_quick_push (tree, *result, vdef);
-
- if (VEC_length (tree, *result) > 1)
- sort_vuses (*result);
}
/* Copy the names of vdef results in STMT into a vector, and return
gcc_assert (is_gimple_min_invariant (e));
}
-/* A comparison function for use in qsort to compare vuses. Simply
- subtracts version numbers. */
-
-static int
-vuses_compare (const void *pa, const void *pb)
-{
- const tree vusea = *((const tree *)pa);
- const tree vuseb = *((const tree *)pb);
- int sn = SSA_NAME_VERSION (vusea) - SSA_NAME_VERSION (vuseb);
-
- return sn;
-}
-
/* Print out the "Created value <x> for <Y>" statement to the
dump_file.
This is factored because both versions of lookup use it, and it
qsort (VEC_address (tree, vuses),
VEC_length (tree, vuses),
sizeof (tree),
- vuses_compare);
+ operand_build_cmp);
}
/* Sort the VUSE array so that we can do equality comparisons
qsort (VEC_address (tree, vuses),
VEC_length (tree, vuses),
sizeof (tree),
- vuses_compare);
+ operand_build_cmp);
}
/* Insert EXPR into VALUE_TABLE with value VAL, and add expression
EXPR to the value set for value VAL. */