equal
deleted
inserted
replaced
203 case Bytecodes::_i2c: if (type == T_CHAR || type == T_BYTE) value = conv->value(); break; |
203 case Bytecodes::_i2c: if (type == T_CHAR || type == T_BYTE) value = conv->value(); break; |
204 } |
204 } |
205 // limit this optimization to current block |
205 // limit this optimization to current block |
206 if (value != NULL && in_current_block(conv)) { |
206 if (value != NULL && in_current_block(conv)) { |
207 set_canonical(new StoreField(x->obj(), x->offset(), x->field(), value, x->is_static(), |
207 set_canonical(new StoreField(x->obj(), x->offset(), x->field(), value, x->is_static(), |
208 x->lock_stack(), x->state_before(), x->is_loaded(), x->is_initialized())); |
208 x->state_before(), x->is_loaded(), x->is_initialized())); |
209 return; |
209 return; |
210 } |
210 } |
211 } |
211 } |
212 |
212 |
213 } |
213 } |
254 case Bytecodes::_i2c: if (type == T_CHAR || type == T_BYTE) value = conv->value(); break; |
254 case Bytecodes::_i2c: if (type == T_CHAR || type == T_BYTE) value = conv->value(); break; |
255 } |
255 } |
256 // limit this optimization to current block |
256 // limit this optimization to current block |
257 if (value != NULL && in_current_block(conv)) { |
257 if (value != NULL && in_current_block(conv)) { |
258 set_canonical(new StoreIndexed(x->array(), x->index(), x->length(), |
258 set_canonical(new StoreIndexed(x->array(), x->index(), x->length(), |
259 x->elt_type(), value, x->lock_stack())); |
259 x->elt_type(), value, x->state_before())); |
260 return; |
260 return; |
261 } |
261 } |
262 } |
262 } |
263 |
263 |
264 |
264 |
665 set_canonical(x); |
665 set_canonical(x); |
666 return; |
666 return; |
667 } |
667 } |
668 } |
668 } |
669 set_canonical(canon); |
669 set_canonical(canon); |
670 set_bci(cmp->bci()); |
670 set_bci(cmp->state_before()->bci()); |
671 } |
671 } |
672 } |
672 } |
673 } else if (l->as_InstanceOf() != NULL) { |
673 } else if (l->as_InstanceOf() != NULL) { |
674 // NOTE: Code permanently disabled for now since it leaves the old InstanceOf |
674 // NOTE: Code permanently disabled for now since it leaves the old InstanceOf |
675 // instruction in the graph (it is pinned). Need to fix this at some point. |
675 // instruction in the graph (it is pinned). Need to fix this at some point. |
683 if (is_inst_sux == no_inst_sux && inst->is_loaded()) { |
683 if (is_inst_sux == no_inst_sux && inst->is_loaded()) { |
684 // both successors identical and klass is loaded => simplify to: Goto |
684 // both successors identical and klass is loaded => simplify to: Goto |
685 set_canonical(new Goto(is_inst_sux, x->state_before(), x->is_safepoint())); |
685 set_canonical(new Goto(is_inst_sux, x->state_before(), x->is_safepoint())); |
686 } else { |
686 } else { |
687 // successors differ => simplify to: IfInstanceOf |
687 // successors differ => simplify to: IfInstanceOf |
688 set_canonical(new IfInstanceOf(inst->klass(), inst->obj(), true, inst->bci(), is_inst_sux, no_inst_sux)); |
688 set_canonical(new IfInstanceOf(inst->klass(), inst->obj(), true, inst->state_before()->bci(), is_inst_sux, no_inst_sux)); |
689 } |
689 } |
690 } |
690 } |
691 } else if (rt == objectNull && (l->as_NewInstance() || l->as_NewArray())) { |
691 } else if (rt == objectNull && (l->as_NewInstance() || l->as_NewArray())) { |
692 if (x->cond() == Instruction::eql) { |
692 if (x->cond() == Instruction::eql) { |
693 set_canonical(new Goto(x->fsux(), x->state_before(), x->is_safepoint())); |
693 set_canonical(new Goto(x->fsux(), x->state_before(), x->is_safepoint())); |