aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2014-02-04 07:04:32 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2014-02-04 06:04:32 +0000
commit6f746413d43db94271199e867c03bb20de3c2d42 (patch)
tree761dc26b22dd807bfe3d477bf19b0fe1345cee2a /gcc
parent5f876ae722d5a409960aef5ab4d3ea7630fd516c (diff)
downloadgcc-6f746413d43db94271199e867c03bb20de3c2d42.zip
gcc-6f746413d43db94271199e867c03bb20de3c2d42.tar.gz
gcc-6f746413d43db94271199e867c03bb20de3c2d42.tar.bz2
gimple-fold.c (gimple_extract_devirt_binfo_from_cst): Remove.
* gimple-fold.c (gimple_extract_devirt_binfo_from_cst): Remove. * gimple-fold.h (gimple_extract_devirt_binfo_from_cst): Remove. From-SVN: r207450
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimple-fold.c68
-rw-r--r--gcc/gimple-fold.h1
3 files changed, 5 insertions, 69 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c4c197a..b3fcc14 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2014-02-03 Jan Hubicka <jh@suse.cz>
+ * gimple-fold.c (gimple_extract_devirt_binfo_from_cst): Remove.
+ * gimple-fold.h (gimple_extract_devirt_binfo_from_cst): Remove.
+
+2014-02-03 Jan Hubicka <jh@suse.cz>
+
PR ipa/59831
* ipa-cp.c (ipa_get_indirect_edge_target_1): Use ipa-devirt
to figure out targets of polymorphic calls with known decl.
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 848c1f6..43b49f1 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -1071,74 +1071,6 @@ gimple_fold_builtin (gimple stmt)
}
-/* Return a binfo to be used for devirtualization of calls based on an object
- represented by a declaration (i.e. a global or automatically allocated one)
- or NULL if it cannot be found or is not safe. CST is expected to be an
- ADDR_EXPR of such object or the function will return NULL. Currently it is
- safe to use such binfo only if it has no base binfo (i.e. no ancestors)
- EXPECTED_TYPE is type of the class virtual belongs to. */
-
-tree
-gimple_extract_devirt_binfo_from_cst (tree cst, tree expected_type)
-{
- HOST_WIDE_INT offset, size, max_size;
- tree base, type, binfo;
- bool last_artificial = false;
-
- if (!flag_devirtualize
- || TREE_CODE (cst) != ADDR_EXPR
- || TREE_CODE (TREE_TYPE (TREE_TYPE (cst))) != RECORD_TYPE)
- return NULL_TREE;
-
- cst = TREE_OPERAND (cst, 0);
- base = get_ref_base_and_extent (cst, &offset, &size, &max_size);
- type = TREE_TYPE (base);
- if (!DECL_P (base)
- || max_size == -1
- || max_size != size
- || TREE_CODE (type) != RECORD_TYPE)
- return NULL_TREE;
-
- /* Find the sub-object the constant actually refers to and mark whether it is
- an artificial one (as opposed to a user-defined one). */
- while (true)
- {
- HOST_WIDE_INT pos, size;
- tree fld;
-
- if (types_same_for_odr (type, expected_type))
- break;
- if (offset < 0)
- return NULL_TREE;
-
- for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
- {
- if (TREE_CODE (fld) != FIELD_DECL)
- continue;
-
- pos = int_bit_position (fld);
- size = tree_to_uhwi (DECL_SIZE (fld));
- if (pos <= offset && (pos + size) > offset)
- break;
- }
- if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
- return NULL_TREE;
-
- last_artificial = DECL_ARTIFICIAL (fld);
- type = TREE_TYPE (fld);
- offset -= pos;
- }
- /* Artificial sub-objects are ancestors, we do not want to use them for
- devirtualization, at least not here. */
- if (last_artificial)
- return NULL_TREE;
- binfo = TYPE_BINFO (type);
- if (!binfo || BINFO_N_BASE_BINFOS (binfo) > 0)
- return NULL_TREE;
- else
- return binfo;
-}
-
/* Attempt to fold a call statement referenced by the statement iterator GSI.
The statement may be replaced by another statement, e.g., if the call
simplifies to a constant value. Return true if any changes were made.
diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h
index 3dbce9c..6d8746c 100644
--- a/gcc/gimple-fold.h
+++ b/gcc/gimple-fold.h
@@ -26,7 +26,6 @@ extern tree canonicalize_constructor_val (tree, tree);
extern tree get_symbol_constant_value (tree);
extern void gimplify_and_update_call_from_tree (gimple_stmt_iterator *, tree);
extern tree gimple_fold_builtin (gimple);
-extern tree gimple_extract_devirt_binfo_from_cst (tree, tree);
extern bool fold_stmt (gimple_stmt_iterator *);
extern bool fold_stmt_inplace (gimple_stmt_iterator *);
extern tree maybe_fold_and_comparisons (enum tree_code, tree, tree,