Mercurial > hg > truffle
comparison src/share/vm/opto/macro.cpp @ 17810:62c54fcc0a35
Merge
author | kvn |
---|---|
date | Tue, 25 Mar 2014 17:07:36 -0700 |
parents | a9becfeecd1b 606acabe7b5c |
children | 52b4284cb496 f8afcfbdbf1c |
comparison
equal
deleted
inserted
replaced
17809:a433eb716ce1 | 17810:62c54fcc0a35 |
---|---|
2437 assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count"); | 2437 assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count"); |
2438 progress = progress || success; | 2438 progress = progress || success; |
2439 } | 2439 } |
2440 } | 2440 } |
2441 // Next, attempt to eliminate allocations | 2441 // Next, attempt to eliminate allocations |
2442 _has_locks = false; | |
2442 progress = true; | 2443 progress = true; |
2443 while (progress) { | 2444 while (progress) { |
2444 progress = false; | 2445 progress = false; |
2445 for (int i = C->macro_count(); i > 0; i--) { | 2446 for (int i = C->macro_count(); i > 0; i--) { |
2446 Node * n = C->macro_node(i-1); | 2447 Node * n = C->macro_node(i-1); |
2455 success = eliminate_boxing_node(n->as_CallStaticJava()); | 2456 success = eliminate_boxing_node(n->as_CallStaticJava()); |
2456 break; | 2457 break; |
2457 case Node::Class_Lock: | 2458 case Node::Class_Lock: |
2458 case Node::Class_Unlock: | 2459 case Node::Class_Unlock: |
2459 assert(!n->as_AbstractLock()->is_eliminated(), "sanity"); | 2460 assert(!n->as_AbstractLock()->is_eliminated(), "sanity"); |
2461 _has_locks = true; | |
2460 break; | 2462 break; |
2461 default: | 2463 default: |
2462 assert(n->Opcode() == Op_LoopLimit || | 2464 assert(n->Opcode() == Op_LoopLimit || |
2463 n->Opcode() == Op_Opaque1 || | 2465 n->Opcode() == Op_Opaque1 || |
2464 n->Opcode() == Op_Opaque2, "unknown node type in macro list"); | 2466 n->Opcode() == Op_Opaque2 || |
2467 n->Opcode() == Op_Opaque3, "unknown node type in macro list"); | |
2465 } | 2468 } |
2466 assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count"); | 2469 assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count"); |
2467 progress = progress || success; | 2470 progress = progress || success; |
2468 } | 2471 } |
2469 } | 2472 } |
2500 _igvn._worklist.push(n); | 2503 _igvn._worklist.push(n); |
2501 success = true; | 2504 success = true; |
2502 } else if (n->Opcode() == Op_Opaque1 || n->Opcode() == Op_Opaque2) { | 2505 } else if (n->Opcode() == Op_Opaque1 || n->Opcode() == Op_Opaque2) { |
2503 _igvn.replace_node(n, n->in(1)); | 2506 _igvn.replace_node(n, n->in(1)); |
2504 success = true; | 2507 success = true; |
2508 #if INCLUDE_RTM_OPT | |
2509 } else if ((n->Opcode() == Op_Opaque3) && ((Opaque3Node*)n)->rtm_opt()) { | |
2510 assert(C->profile_rtm(), "should be used only in rtm deoptimization code"); | |
2511 assert((n->outcnt() == 1) && n->unique_out()->is_Cmp(), ""); | |
2512 Node* cmp = n->unique_out(); | |
2513 #ifdef ASSERT | |
2514 // Validate graph. | |
2515 assert((cmp->outcnt() == 1) && cmp->unique_out()->is_Bool(), ""); | |
2516 BoolNode* bol = cmp->unique_out()->as_Bool(); | |
2517 assert((bol->outcnt() == 1) && bol->unique_out()->is_If() && | |
2518 (bol->_test._test == BoolTest::ne), ""); | |
2519 IfNode* ifn = bol->unique_out()->as_If(); | |
2520 assert((ifn->outcnt() == 2) && | |
2521 ifn->proj_out(1)->is_uncommon_trap_proj(Deoptimization::Reason_rtm_state_change), ""); | |
2522 #endif | |
2523 Node* repl = n->in(1); | |
2524 if (!_has_locks) { | |
2525 // Remove RTM state check if there are no locks in the code. | |
2526 // Replace input to compare the same value. | |
2527 repl = (cmp->in(1) == n) ? cmp->in(2) : cmp->in(1); | |
2528 } | |
2529 _igvn.replace_node(n, repl); | |
2530 success = true; | |
2531 #endif | |
2505 } | 2532 } |
2506 assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count"); | 2533 assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count"); |
2507 progress = progress || success; | 2534 progress = progress || success; |
2508 } | 2535 } |
2509 } | 2536 } |