comparison src/share/vm/opto/idealKit.cpp @ 8883:b9a918201d47

Merge with hsx25
author Gilles Duboscq <duboscq@ssw.jku.at>
date Sat, 06 Apr 2013 20:04:06 +0200
parents 30f42e691e70
children de6a9e811145 2113136690bc
comparison
equal deleted inserted replaced
8660:d47b52b0ff68 8883:b9a918201d47
46 _delay_all_transforms = delay_all_transforms; 46 _delay_all_transforms = delay_all_transforms;
47 _var_ct = 0; 47 _var_ct = 0;
48 _cvstate = NULL; 48 _cvstate = NULL;
49 // We can go memory state free or else we need the entire memory state 49 // We can go memory state free or else we need the entire memory state
50 assert(_initial_memory == NULL || _initial_memory->Opcode() == Op_MergeMem, "memory must be pre-split"); 50 assert(_initial_memory == NULL || _initial_memory->Opcode() == Op_MergeMem, "memory must be pre-split");
51 assert(!_gvn.is_IterGVN(), "IdealKit can't be used during Optimize phase");
51 int init_size = 5; 52 int init_size = 5;
52 _pending_cvstates = new (C->node_arena()) GrowableArray<Node*>(C->node_arena(), init_size, 0, 0); 53 _pending_cvstates = new (C->node_arena()) GrowableArray<Node*>(C->node_arena(), init_size, 0, 0);
53 _delay_transform = new (C->node_arena()) GrowableArray<Node*>(C->node_arena(), init_size, 0, 0);
54 DEBUG_ONLY(_state = new (C->node_arena()) GrowableArray<int>(C->node_arena(), init_size, 0, 0)); 54 DEBUG_ONLY(_state = new (C->node_arena()) GrowableArray<int>(C->node_arena(), init_size, 0, 0));
55 if (!has_declarations) { 55 if (!has_declarations) {
56 declarations_done(); 56 declarations_done();
57 } 57 }
58 } 58 }
294 Node* IdealKit::transform(Node* n) { 294 Node* IdealKit::transform(Node* n) {
295 if (_delay_all_transforms) { 295 if (_delay_all_transforms) {
296 return delay_transform(n); 296 return delay_transform(n);
297 } else { 297 } else {
298 n = gvn().transform(n); 298 n = gvn().transform(n);
299 if (!gvn().is_IterGVN()) { 299 C->record_for_igvn(n);
300 C->record_for_igvn(n);
301 }
302 return n; 300 return n;
303 } 301 }
304 } 302 }
305 303
306 //-----------------------------delay_transform----------------------------------- 304 //-----------------------------delay_transform-----------------------------------
307 Node* IdealKit::delay_transform(Node* n) { 305 Node* IdealKit::delay_transform(Node* n) {
308 if (!gvn().is_IterGVN() || !gvn().is_IterGVN()->delay_transform()) { 306 // Delay transform until IterativeGVN
309 gvn().set_type(n, n->bottom_type()); 307 gvn().set_type(n, n->bottom_type());
310 } 308 C->record_for_igvn(n);
311 _delay_transform->push(n);
312 return n; 309 return n;
313 } 310 }
314 311
315 //-----------------------------new_cvstate----------------------------------- 312 //-----------------------------new_cvstate-----------------------------------
316 Node* IdealKit::new_cvstate() { 313 Node* IdealKit::new_cvstate() {
330 //-----------------------------clear----------------------------------- 327 //-----------------------------clear-----------------------------------
331 void IdealKit::clear(Node* m) { 328 void IdealKit::clear(Node* m) {
332 for (uint i = 0; i < m->req(); i++) m->set_req(i, NULL); 329 for (uint i = 0; i < m->req(); i++) m->set_req(i, NULL);
333 } 330 }
334 331
335 //-----------------------------drain_delay_transform----------------------------
336 void IdealKit::drain_delay_transform() {
337 while (_delay_transform->length() > 0) {
338 Node* n = _delay_transform->pop();
339 gvn().transform(n);
340 if (!gvn().is_IterGVN()) {
341 C->record_for_igvn(n);
342 }
343 }
344 }
345
346 //-----------------------------IdealVariable---------------------------- 332 //-----------------------------IdealVariable----------------------------
347 IdealVariable::IdealVariable(IdealKit &k) { 333 IdealVariable::IdealVariable(IdealKit &k) {
348 k.declare(this); 334 k.declare(this);
349 } 335 }
350 336
351 Node* IdealKit::memory(uint alias_idx) { 337 Node* IdealKit::memory(uint alias_idx) {
352 MergeMemNode* mem = merged_memory(); 338 MergeMemNode* mem = merged_memory();
353 Node* p = mem->memory_at(alias_idx); 339 Node* p = mem->memory_at(alias_idx);
354 if (!gvn().is_IterGVN() || !gvn().is_IterGVN()->delay_transform()) { 340 _gvn.set_type(p, Type::MEMORY); // must be mapped
355 _gvn.set_type(p, Type::MEMORY); // must be mapped
356 }
357 return p; 341 return p;
358 } 342 }
359 343
360 void IdealKit::set_memory(Node* mem, uint alias_idx) { 344 void IdealKit::set_memory(Node* mem, uint alias_idx) {
361 merged_memory()->set_memory_at(alias_idx, mem); 345 merged_memory()->set_memory_at(alias_idx, mem);