< prev index next >
src/share/vm/opto/parse2.cpp
Print this page
*** 411,421 ****
bool Parse::create_jump_tables(Node* key_val, SwitchRange* lo, SwitchRange* hi) {
// Are jumptables enabled
if (!UseJumpTables) return false;
// Are jumptables supported
! if (!Matcher::has_match_rule(Op_Jump)) return false;
// Don't make jump table if profiling
if (method_data_update()) return false;
// Decide if a guard is needed to lop off big ranges at either (or
--- 411,421 ----
bool Parse::create_jump_tables(Node* key_val, SwitchRange* lo, SwitchRange* hi) {
// Are jumptables enabled
if (!UseJumpTables) return false;
// Are jumptables supported
! if (!Matcher::has_match_rule(Opcodes::Op_Jump)) return false;
// Don't make jump table if profiling
if (method_data_update()) return false;
// Decide if a guard is needed to lop off big ranges at either (or
*** 788,798 ****
if (btest != BoolTest::eq && btest != BoolTest::ne) {
// Only ::eq and ::ne are supported for profile injection.
return false;
}
if (test->is_Cmp() &&
! test->in(1)->Opcode() == Op_ProfileBoolean) {
ProfileBooleanNode* profile = (ProfileBooleanNode*)test->in(1);
int false_cnt = profile->false_count();
int true_cnt = profile->true_count();
// Counts matching depends on the actual test operation (::eq or ::ne).
--- 788,798 ----
if (btest != BoolTest::eq && btest != BoolTest::ne) {
// Only ::eq and ::ne are supported for profile injection.
return false;
}
if (test->is_Cmp() &&
! test->in(1)->Opcode() == Opcodes::Op_ProfileBoolean) {
ProfileBooleanNode* profile = (ProfileBooleanNode*)test->in(1);
int false_cnt = profile->false_count();
int true_cnt = profile->true_count();
// Counts matching depends on the actual test operation (::eq or ::ne).
*** 1231,1246 ****
static Node* extract_obj_from_klass_load(PhaseGVN* gvn, Node* n) {
Node* ldk;
if (n->is_DecodeNKlass()) {
! if (n->in(1)->Opcode() != Op_LoadNKlass) {
return NULL;
} else {
ldk = n->in(1);
}
! } else if (n->Opcode() != Op_LoadKlass) {
return NULL;
} else {
ldk = n;
}
assert(ldk != NULL && ldk->is_Load(), "should have found a LoadKlass or LoadNKlass node");
--- 1231,1246 ----
static Node* extract_obj_from_klass_load(PhaseGVN* gvn, Node* n) {
Node* ldk;
if (n->is_DecodeNKlass()) {
! if (n->in(1)->Opcode() != Opcodes::Op_LoadNKlass) {
return NULL;
} else {
ldk = n->in(1);
}
! } else if (n->Opcode() != Opcodes::Op_LoadKlass) {
return NULL;
} else {
ldk = n;
}
assert(ldk != NULL && ldk->is_Load(), "should have found a LoadKlass or LoadNKlass node");
*** 1368,1383 ****
*
*/
Node* Parse::optimize_cmp_with_klass(Node* c) {
// If this is transformed by the _gvn to a comparison with the low
// level klass then we may be able to use speculation
! if (c->Opcode() == Op_CmpP &&
! (c->in(1)->Opcode() == Op_LoadKlass || c->in(1)->Opcode() == Op_DecodeNKlass) &&
c->in(2)->is_Con()) {
Node* load_klass = NULL;
Node* decode = NULL;
! if (c->in(1)->Opcode() == Op_DecodeNKlass) {
decode = c->in(1);
load_klass = c->in(1)->in(1);
} else {
load_klass = c->in(1);
}
--- 1368,1383 ----
*
*/
Node* Parse::optimize_cmp_with_klass(Node* c) {
// If this is transformed by the _gvn to a comparison with the low
// level klass then we may be able to use speculation
! if (c->Opcode() == Opcodes::Op_CmpP &&
! (c->in(1)->Opcode() == Opcodes::Op_LoadKlass || c->in(1)->Opcode() == Opcodes::Op_DecodeNKlass) &&
c->in(2)->is_Con()) {
Node* load_klass = NULL;
Node* decode = NULL;
! if (c->in(1)->Opcode() == Opcodes::Op_DecodeNKlass) {
decode = c->in(1);
load_klass = c->in(1)->in(1);
} else {
load_klass = c->in(1);
}
*** 1865,1875 ****
d = precision_rounding(c);
push( d );
break;
case Bytecodes::_frem:
! if (Matcher::has_match_rule(Op_ModF)) {
// Generate a ModF node.
b = pop();
a = pop();
c = _gvn.transform( new ModFNode(0,a,b) );
d = precision_rounding(c);
--- 1865,1875 ----
d = precision_rounding(c);
push( d );
break;
case Bytecodes::_frem:
! if (Matcher::has_match_rule(Opcodes::Op_ModF)) {
// Generate a ModF node.
b = pop();
a = pop();
c = _gvn.transform( new ModFNode(0,a,b) );
d = precision_rounding(c);
*** 2000,2010 ****
b = _gvn.transform(new NegDNode (a));
push_pair(b);
break;
case Bytecodes::_drem:
! if (Matcher::has_match_rule(Op_ModD)) {
// Generate a ModD node.
b = pop_pair();
a = pop_pair();
// a % b
--- 2000,2010 ----
b = _gvn.transform(new NegDNode (a));
push_pair(b);
break;
case Bytecodes::_drem:
! if (Matcher::has_match_rule(Opcodes::Op_ModD)) {
// Generate a ModD node.
b = pop_pair();
a = pop_pair();
// a % b
< prev index next >