aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/opto/cfgnode.cpp
diff options
context:
space:
mode:
authornever <none@none>2008-06-05 21:44:53 -0700
committernever <none@none>2008-06-05 21:44:53 -0700
commit81df27e62db2ea2d3efd6e22d7e8aa60578278ee (patch)
tree49197a99d864fcd7a803c7e9f60bcb11ab3a806f /src/share/vm/opto/cfgnode.cpp
parentbbed300b40a229cb750c9f29a15656a6d9781c30 (diff)
downloadjdk8u_hotspot-81df27e62db2ea2d3efd6e22d7e8aa60578278ee.tar.gz
6614100: EXCEPTION_ACCESS_VIOLATION while running Eclipse with 1.6.0_05-ea
Reviewed-by: kvn, jrose, rasbold
Diffstat (limited to 'src/share/vm/opto/cfgnode.cpp')
-rw-r--r--src/share/vm/opto/cfgnode.cpp58
1 files changed, 0 insertions, 58 deletions
diff --git a/src/share/vm/opto/cfgnode.cpp b/src/share/vm/opto/cfgnode.cpp
index feac17ffd..0f5a7323d 100644
--- a/src/share/vm/opto/cfgnode.cpp
+++ b/src/share/vm/opto/cfgnode.cpp
@@ -1621,64 +1621,6 @@ Node *PhiNode::Ideal(PhaseGVN *phase, bool can_reshape) {
if (opt != NULL) return opt;
}
- if (in(1) != NULL && in(1)->Opcode() == Op_AddP && can_reshape) {
- // Try to undo Phi of AddP:
- // (Phi (AddP base base y) (AddP base2 base2 y))
- // becomes:
- // newbase := (Phi base base2)
- // (AddP newbase newbase y)
- //
- // This occurs as a result of unsuccessful split_thru_phi and
- // interferes with taking advantage of addressing modes. See the
- // clone_shift_expressions code in matcher.cpp
- Node* addp = in(1);
- const Type* type = addp->in(AddPNode::Base)->bottom_type();
- Node* y = addp->in(AddPNode::Offset);
- if (y != NULL && addp->in(AddPNode::Base) == addp->in(AddPNode::Address)) {
- // make sure that all the inputs are similar to the first one,
- // i.e. AddP with base == address and same offset as first AddP
- bool doit = true;
- for (uint i = 2; i < req(); i++) {
- if (in(i) == NULL ||
- in(i)->Opcode() != Op_AddP ||
- in(i)->in(AddPNode::Base) != in(i)->in(AddPNode::Address) ||
- in(i)->in(AddPNode::Offset) != y) {
- doit = false;
- break;
- }
- // Accumulate type for resulting Phi
- type = type->meet(in(i)->in(AddPNode::Base)->bottom_type());
- }
- Node* base = NULL;
- if (doit) {
- // Check for neighboring AddP nodes in a tree.
- // If they have a base, use that it.
- for (DUIterator_Fast kmax, k = this->fast_outs(kmax); k < kmax; k++) {
- Node* u = this->fast_out(k);
- if (u->is_AddP()) {
- Node* base2 = u->in(AddPNode::Base);
- if (base2 != NULL && !base2->is_top()) {
- if (base == NULL)
- base = base2;
- else if (base != base2)
- { doit = false; break; }
- }
- }
- }
- }
- if (doit) {
- if (base == NULL) {
- base = new (phase->C, in(0)->req()) PhiNode(in(0), type, NULL);
- for (uint i = 1; i < req(); i++) {
- base->init_req(i, in(i)->in(AddPNode::Base));
- }
- phase->is_IterGVN()->register_new_node_with_optimizer(base);
- }
- return new (phase->C, 4) AddPNode(base, base, y);
- }
- }
- }
-
// Split phis through memory merges, so that the memory merges will go away.
// Piggy-back this transformation on the search for a unique input....
// It will be as if the merged memory is the unique value of the phi.