summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2006-06-23 12:14:44 +0000
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2006-06-23 12:14:44 +0000
commit208ca064ed26d6cd3bb8ca6fb13743668435b315 (patch)
tree9ca7264cd13ebb0aa80f3806562412371dca2e44 /gcc
parenta3fba4daddf616b94aa79fe0b3c5bda6d9055974 (diff)
downloadgcc-208ca064ed26d6cd3bb8ca6fb13743668435b315.tar.gz
2006-06-21 Andrew Haley <aph@redhat.com>
* java-tree.h (update_aliases): Remove * expr.c (expand_iinc): Remove call to update_aliases(). (STORE_INTERNAL): Likewise. * decl.c (update_aliases, initialize_local_variable) (maybe_pushlevels): Set DECL_VALUE_EXPR for debugging decls. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114931 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/java/ChangeLog8
-rw-r--r--gcc/java/decl.c97
-rw-r--r--gcc/java/expr.c2
-rw-r--r--gcc/java/java-tree.h1
4 files changed, 17 insertions, 91 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 45fd0128a65..9a116078bc6 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,11 @@
+2006-06-21 Andrew Haley <aph@redhat.com>
+
+ * java-tree.h (update_aliases): Remove
+ * expr.c (expand_iinc): Remove call to update_aliases().
+ (STORE_INTERNAL): Likewise.
+ * decl.c (update_aliases, initialize_local_variable)
+ (maybe_pushlevels): Set DECL_VALUE_EXPR for debugging decls.
+
2006-06-19 Andrew Haley <aph@redhat.com>
PR java/1305
diff --git a/gcc/java/decl.c b/gcc/java/decl.c
index d4bd01cab89..8497fbf787b 100644
--- a/gcc/java/decl.c
+++ b/gcc/java/decl.c
@@ -160,46 +160,6 @@ debug_variable_p (tree decl)
return true;
}
-/* Copy the value in decl into every live alias in the same local
- variable slot. Some of these will be dead stores removed by the
- optimizer. */
-
-void
-update_aliases (tree decl, int index, int pc)
-{
- tree decl_type = TREE_TYPE (decl);
- tree tmp;
-
- gcc_assert (! debug_variable_p (decl));
-
- for (tmp = TREE_VEC_ELT (decl_map, index);
- tmp != NULL_TREE;
- tmp = DECL_LOCAL_SLOT_CHAIN (tmp))
- {
- tree tmp_type = TREE_TYPE (tmp);
- if (tmp != decl
- && LOCAL_SLOT_P (tmp) == 0
- && (pc == -1
- || (pc >= DECL_LOCAL_START_PC (tmp)
- && pc < DECL_LOCAL_END_PC (tmp)))
- /* This test is < (rather than <=) because there's no point
- updating an alias that's about to die at the end of this
- instruction. */
- && (tmp_type == decl_type
- || (INTEGRAL_TYPE_P (tmp_type)
- && INTEGRAL_TYPE_P (decl_type)
- && TYPE_PRECISION (decl_type) <= 32
- && TYPE_PRECISION (tmp_type) <= 32)
- || (TREE_CODE (tmp_type) == POINTER_TYPE
- && TREE_CODE (decl_type) == POINTER_TYPE)))
- {
- tree src = build1 (NOP_EXPR, tmp_type, decl);
- gcc_assert (! LOCAL_VAR_OUT_OF_SCOPE_P (tmp));
- java_add_stmt (build2 (MODIFY_EXPR, tmp_type, tmp, src));
- }
- }
-}
-
static tree
push_jvm_slot (int index, tree decl)
{
@@ -220,52 +180,6 @@ push_jvm_slot (int index, tree decl)
return decl;
}
-/* At the point of its creation a local variable decl inherits
- whatever is already in the same slot. In the case of a local
- variable that is declared but unused, we won't find anything. */
-
-static void
-initialize_local_variable (tree decl, int index)
-{
- tree decl_type = TREE_TYPE (decl);
- if (TREE_CODE (decl_type) == POINTER_TYPE)
- {
- tree tmp = TREE_VEC_ELT (base_decl_map, index);
-
- if (tmp)
- {
- /* At the point of its creation this decl inherits whatever
- is in the slot. */
- tree src = build1 (NOP_EXPR, decl_type, tmp);
- java_add_stmt (build2 (MODIFY_EXPR, decl_type, decl, src));
- }
- }
- else
- {
- tree tmp;
-
- for (tmp = TREE_VEC_ELT (decl_map, index);
- tmp != NULL_TREE;
- tmp = DECL_LOCAL_SLOT_CHAIN (tmp))
- {
- tree tmp_type = TREE_TYPE (tmp);
- if (tmp != decl
- && ! debug_variable_p (tmp)
- && (tmp_type == decl_type
- || (INTEGRAL_TYPE_P (tmp_type)
- && INTEGRAL_TYPE_P (decl_type)
- && TYPE_PRECISION (decl_type) <= 32
- && TYPE_PRECISION (tmp_type) <= 32
- && TYPE_PRECISION (tmp_type)
- >= TYPE_PRECISION (decl_type))))
- {
- java_add_stmt (build2 (MODIFY_EXPR, decl_type, decl, tmp));
- return;
- }
- }
- }
-}
-
/* Find the best declaration based upon type. If 'decl' fits 'type' better
than 'best', return 'decl'. Otherwise return 'best'. */
@@ -1800,10 +1714,17 @@ maybe_pushlevels (int pc)
current_binding_level->names = NULL;
for ( ; decl != NULL_TREE; decl = next)
{
+ int index = DECL_LOCAL_SLOT_NUMBER (decl);
+ tree base_decl;
next = TREE_CHAIN (decl);
- push_jvm_slot (DECL_LOCAL_SLOT_NUMBER (decl), decl);
+ push_jvm_slot (index, decl);
pushdecl (decl);
- initialize_local_variable (decl, DECL_LOCAL_SLOT_NUMBER (decl));
+ base_decl
+ = find_local_variable (index, TREE_TYPE (decl), pc);
+ if (TREE_CODE (TREE_TYPE (base_decl)) == POINTER_TYPE)
+ base_decl = TREE_VEC_ELT (base_decl_map, index);
+ SET_DECL_VALUE_EXPR (decl, base_decl);
+ DECL_HAS_VALUE_EXPR_P (decl) = 1;
}
}
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 329e363db33..a64bda8ff02 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -1451,7 +1451,6 @@ expand_iinc (unsigned int local_var_index, int ival, int pc)
constant_value = build_int_cst (NULL_TREE, ival);
res = fold_build2 (PLUS_EXPR, int_type_node, local_var, constant_value);
java_add_stmt (build2 (MODIFY_EXPR, TREE_TYPE (local_var), local_var, res));
- update_aliases (local_var, local_var_index, pc);
}
@@ -3413,7 +3412,6 @@ process_jvm_instruction (int PC, const unsigned char* byte_ops,
decl = find_local_variable (index, type, oldpc); \
set_local_type (index, type); \
java_add_stmt (build2 (MODIFY_EXPR, type, decl, value)); \
- update_aliases (decl, index, PC); \
}
#define STORE(OPERAND_TYPE, OPERAND_VALUE) \
diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h
index 98aca58daf6..f3478692d70 100644
--- a/gcc/java/java-tree.h
+++ b/gcc/java/java-tree.h
@@ -1221,7 +1221,6 @@ extern void set_java_signature (tree, tree);
extern tree build_static_field_ref (tree);
extern tree build_address_of (tree);
extern tree find_local_variable (int index, tree type, int pc);
-extern void update_aliases (tree decl, int index, int pc);
extern tree find_stack_slot (int index, tree type);
extern tree build_prim_array_type (tree, HOST_WIDE_INT);
extern tree build_java_array_type (tree, HOST_WIDE_INT);