Mercurial > hg > truffle
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); |