hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
changeset 6745 a34ef8968a84
parent 6461 cfc616b49f58
child 7397 5b173b4ca846
equal deleted inserted replaced
6743:ef1795cd50a7 6745:a34ef8968a84
   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()));