src/share/vm/opto/idealKit.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/idealKit.cpp	Mon Mar 25 15:47:03 2013
--- new/src/share/vm/opto/idealKit.cpp	Mon Mar 25 15:47:03 2013

*** 46,58 **** --- 46,58 ---- _delay_all_transforms = delay_all_transforms; _var_ct = 0; _cvstate = NULL; // We can go memory state free or else we need the entire memory state assert(_initial_memory == NULL || _initial_memory->Opcode() == Op_MergeMem, "memory must be pre-split"); + assert(!_gvn.is_IterGVN(), "IdealKit can't be used during Optimize phase"); int init_size = 5; _pending_cvstates = new (C->node_arena()) GrowableArray<Node*>(C->node_arena(), init_size, 0, 0); _delay_transform = new (C->node_arena()) GrowableArray<Node*>(C->node_arena(), init_size, 0, 0); DEBUG_ONLY(_state = new (C->node_arena()) GrowableArray<int>(C->node_arena(), init_size, 0, 0)); if (!has_declarations) { declarations_done(); } }
*** 294,316 **** --- 294,313 ---- Node* IdealKit::transform(Node* n) { if (_delay_all_transforms) { return delay_transform(n); } else { n = gvn().transform(n); if (!gvn().is_IterGVN()) { C->record_for_igvn(n); } return n; } } //-----------------------------delay_transform----------------------------------- Node* IdealKit::delay_transform(Node* n) { if (!gvn().is_IterGVN() || !gvn().is_IterGVN()->delay_transform()) { + // Delay transform until IterativeGVN gvn().set_type(n, n->bottom_type()); } _delay_transform->push(n); + C->record_for_igvn(n); return n; } //-----------------------------new_cvstate----------------------------------- Node* IdealKit::new_cvstate() {
*** 330,361 **** --- 327,345 ---- //-----------------------------clear----------------------------------- void IdealKit::clear(Node* m) { for (uint i = 0; i < m->req(); i++) m->set_req(i, NULL); } //-----------------------------drain_delay_transform---------------------------- void IdealKit::drain_delay_transform() { while (_delay_transform->length() > 0) { Node* n = _delay_transform->pop(); gvn().transform(n); if (!gvn().is_IterGVN()) { C->record_for_igvn(n); } } } //-----------------------------IdealVariable---------------------------- IdealVariable::IdealVariable(IdealKit &k) { k.declare(this); } Node* IdealKit::memory(uint alias_idx) { MergeMemNode* mem = merged_memory(); Node* p = mem->memory_at(alias_idx); if (!gvn().is_IterGVN() || !gvn().is_IterGVN()->delay_transform()) { _gvn.set_type(p, Type::MEMORY); // must be mapped } return p; } void IdealKit::set_memory(Node* mem, uint alias_idx) { merged_memory()->set_memory_at(alias_idx, mem);

src/share/vm/opto/idealKit.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File