1085 // off the start node, but the locking spot has to be constructed by
1086 // creating a ConLNode of 0, and boxing it with a BoxLockNode. The BoxLockNode
1087 // becomes the second argument to the FastLockNode call. The
1088 // FastLockNode becomes the new control parent to pin it to the start.
1089
1090 // Setup Object Pointer
1091 Node *lock_obj = NULL;
1092 if(method()->is_static()) {
1093 ciInstance* mirror = _method->holder()->java_mirror();
1094 const TypeInstPtr *t_lock = TypeInstPtr::make(mirror);
1095 lock_obj = makecon(t_lock);
1096 } else { // Else pass the "this" pointer,
1097 lock_obj = local(0); // which is Parm0 from StartNode
1098 }
1099 // Clear out dead values from the debug info.
1100 kill_dead_locals();
1101 // Build the FastLockNode
1102 _synch_lock = shared_lock(lock_obj);
1103 }
1104
1105 if (depth() == 1) {
1106 increment_and_test_invocation_counter(Tier2CompileThreshold);
1107 }
1108 }
1109
1110 //------------------------------init_blocks------------------------------------
1111 // Initialize our parser map to contain the types/monitors at method entry.
1112 void Parse::init_blocks() {
1113 // Create the blocks.
1114 _block_count = flow()->block_count();
1115 _blocks = NEW_RESOURCE_ARRAY(Block, _block_count);
1116 Copy::zero_to_bytes(_blocks, sizeof(Block)*_block_count);
1117
1118 int rpo;
1119
1120 // Initialize the structs.
1121 for (rpo = 0; rpo < block_count(); rpo++) {
1122 Block* block = rpo_at(rpo);
1123 block->init_node(this, rpo);
1124 }
|
1085 // off the start node, but the locking spot has to be constructed by
1086 // creating a ConLNode of 0, and boxing it with a BoxLockNode. The BoxLockNode
1087 // becomes the second argument to the FastLockNode call. The
1088 // FastLockNode becomes the new control parent to pin it to the start.
1089
1090 // Setup Object Pointer
1091 Node *lock_obj = NULL;
1092 if(method()->is_static()) {
1093 ciInstance* mirror = _method->holder()->java_mirror();
1094 const TypeInstPtr *t_lock = TypeInstPtr::make(mirror);
1095 lock_obj = makecon(t_lock);
1096 } else { // Else pass the "this" pointer,
1097 lock_obj = local(0); // which is Parm0 from StartNode
1098 }
1099 // Clear out dead values from the debug info.
1100 kill_dead_locals();
1101 // Build the FastLockNode
1102 _synch_lock = shared_lock(lock_obj);
1103 }
1104
1105 // Feed profiling data for parameters to the type system so it can
1106 // propagate it as speculative types
1107 record_profiled_parameters_for_speculation();
1108
1109 if (depth() == 1) {
1110 increment_and_test_invocation_counter(Tier2CompileThreshold);
1111 }
1112 }
1113
1114 //------------------------------init_blocks------------------------------------
1115 // Initialize our parser map to contain the types/monitors at method entry.
1116 void Parse::init_blocks() {
1117 // Create the blocks.
1118 _block_count = flow()->block_count();
1119 _blocks = NEW_RESOURCE_ARRAY(Block, _block_count);
1120 Copy::zero_to_bytes(_blocks, sizeof(Block)*_block_count);
1121
1122 int rpo;
1123
1124 // Initialize the structs.
1125 for (rpo = 0; rpo < block_count(); rpo++) {
1126 Block* block = rpo_at(rpo);
1127 block->init_node(this, rpo);
1128 }
|