equal
deleted
inserted
replaced
3966 Node* s = mem->fast_out(i); |
3966 Node* s = mem->fast_out(i); |
3967 worklist.push(s); |
3967 worklist.push(s); |
3968 } |
3968 } |
3969 while(worklist.size() != 0 && LCA != early) { |
3969 while(worklist.size() != 0 && LCA != early) { |
3970 Node* s = worklist.pop(); |
3970 Node* s = worklist.pop(); |
3971 if (s->is_Load() || s->Opcode() == Op_SafePoint || |
3971 if (s->is_Load() || s->is_ShenandoahBarrier() || s->Opcode() == Op_SafePoint || |
3972 (s->is_CallStaticJava() && s->as_CallStaticJava()->uncommon_trap_request() != 0)) { |
3972 (s->is_CallStaticJava() && s->as_CallStaticJava()->uncommon_trap_request() != 0)) { |
3973 continue; |
3973 continue; |
3974 } else if (s->is_MergeMem()) { |
3974 } else if (s->is_MergeMem()) { |
3975 for (DUIterator_Fast imax, i = s->fast_outs(imax); i < imax; i++) { |
3975 for (DUIterator_Fast imax, i = s->fast_outs(imax); i < imax; i++) { |
3976 Node* s1 = s->fast_out(i); |
3976 Node* s1 = s->fast_out(i); |
4183 |
4183 |
4184 |
4184 |
4185 //------------------------------build_loop_late_post--------------------------- |
4185 //------------------------------build_loop_late_post--------------------------- |
4186 // Put Data nodes into some loop nest, by setting the _nodes[]->loop mapping. |
4186 // Put Data nodes into some loop nest, by setting the _nodes[]->loop mapping. |
4187 // Second pass finds latest legal placement, and ideal loop placement. |
4187 // Second pass finds latest legal placement, and ideal loop placement. |
4188 void PhaseIdealLoop::build_loop_late_post( Node *n ) { |
4188 void PhaseIdealLoop::build_loop_late_post(Node *n) { |
|
4189 BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); |
|
4190 |
|
4191 if (bs->build_loop_late_post(this, n)) { |
|
4192 return; |
|
4193 } |
|
4194 |
|
4195 build_loop_late_post_work(n, true); |
|
4196 } |
|
4197 |
|
4198 void PhaseIdealLoop::build_loop_late_post_work(Node *n, bool pinned) { |
4189 |
4199 |
4190 if (n->req() == 2 && (n->Opcode() == Op_ConvI2L || n->Opcode() == Op_CastII) && !C->major_progress() && !_verify_only) { |
4200 if (n->req() == 2 && (n->Opcode() == Op_ConvI2L || n->Opcode() == Op_CastII) && !C->major_progress() && !_verify_only) { |
4191 _igvn._worklist.push(n); // Maybe we'll normalize it, if no more loops. |
4201 _igvn._worklist.push(n); // Maybe we'll normalize it, if no more loops. |
4192 } |
4202 } |
4193 |
4203 |
4204 |
4214 |
4205 // We'd like +VerifyLoopOptimizations to not believe that Mod's/Loads |
4215 // We'd like +VerifyLoopOptimizations to not believe that Mod's/Loads |
4206 // _must_ be pinned (they have to observe their control edge of course). |
4216 // _must_ be pinned (they have to observe their control edge of course). |
4207 // Unlike Stores (which modify an unallocable resource, the memory |
4217 // Unlike Stores (which modify an unallocable resource, the memory |
4208 // state), Mods/Loads can float around. So free them up. |
4218 // state), Mods/Loads can float around. So free them up. |
4209 bool pinned = true; |
|
4210 switch( n->Opcode() ) { |
4219 switch( n->Opcode() ) { |
4211 case Op_DivI: |
4220 case Op_DivI: |
4212 case Op_DivF: |
4221 case Op_DivF: |
4213 case Op_DivD: |
4222 case Op_DivD: |
4214 case Op_ModI: |
4223 case Op_ModI: |
4501 } |
4510 } |
4502 } |
4511 } |
4503 } |
4512 } |
4504 } |
4513 } |
4505 } |
4514 } |
|
4515 #endif |
4506 |
4516 |
4507 // Collect a R-P-O for the whole CFG. |
4517 // Collect a R-P-O for the whole CFG. |
4508 // Result list is in post-order (scan backwards for RPO) |
4518 // Result list is in post-order (scan backwards for RPO) |
4509 void PhaseIdealLoop::rpo( Node *start, Node_Stack &stk, VectorSet &visited, Node_List &rpo_list ) const { |
4519 void PhaseIdealLoop::rpo( Node *start, Node_Stack &stk, VectorSet &visited, Node_List &rpo_list ) const { |
4510 stk.push(start, 0); |
4520 stk.push(start, 0); |
4523 rpo_list.push(m); |
4533 rpo_list.push(m); |
4524 stk.pop(); |
4534 stk.pop(); |
4525 } |
4535 } |
4526 } |
4536 } |
4527 } |
4537 } |
4528 #endif |
|
4529 |
4538 |
4530 |
4539 |
4531 //============================================================================= |
4540 //============================================================================= |
4532 //------------------------------LoopTreeIterator----------------------------------- |
4541 //------------------------------LoopTreeIterator----------------------------------- |
4533 |
4542 |