3452 // redundant
3453 for (DUIterator_Fast imax, i = k->fast_outs(imax); i < imax; i++) {
3454 Node* u = k->fast_out(i);
3455 assert(!wq.contains(u), "shouldn't process one node several times");
3456 if (u->Opcode() == Op_LShiftL ||
3457 u->Opcode() == Op_AddL ||
3458 u->Opcode() == Op_SubL ||
3459 u->Opcode() == Op_AddP) {
3460 wq.push(u);
3461 }
3462 }
3463 // Replace all nodes with identical edges as m with m
3464 k->subsume_by(m, this);
3465 }
3466 }
3467 }
3468 break;
3469 }
3470 case Op_CmpUL: {
3471 if (!Matcher::has_match_rule(Op_CmpUL)) {
3472 // We don't support unsigned long comparisons. Set 'max_idx_expr'
3473 // to max_julong if < 0 to make the signed comparison fail.
3474 ConINode* sign_pos = new ConINode(TypeInt::make(BitsPerLong - 1));
3475 Node* sign_bit_mask = new RShiftLNode(n->in(1), sign_pos);
3476 Node* orl = new OrLNode(n->in(1), sign_bit_mask);
3477 ConLNode* remove_sign_mask = new ConLNode(TypeLong::make(max_jlong));
3478 Node* andl = new AndLNode(orl, remove_sign_mask);
3479 Node* cmp = new CmpLNode(andl, n->in(2));
3480 n->subsume_by(cmp, this);
3481 }
3482 break;
3483 }
3484 default:
3485 assert(!n->is_Call(), "");
3486 assert(!n->is_Mem(), "");
3487 assert(nop != Op_ProfileBoolean, "should be eliminated during IGVN");
3488 break;
3489 }
3490 }
3491
3492 //------------------------------final_graph_reshaping_walk---------------------
3493 // Replacing Opaque nodes with their input in final_graph_reshaping_impl(),
|
3452 // redundant
3453 for (DUIterator_Fast imax, i = k->fast_outs(imax); i < imax; i++) {
3454 Node* u = k->fast_out(i);
3455 assert(!wq.contains(u), "shouldn't process one node several times");
3456 if (u->Opcode() == Op_LShiftL ||
3457 u->Opcode() == Op_AddL ||
3458 u->Opcode() == Op_SubL ||
3459 u->Opcode() == Op_AddP) {
3460 wq.push(u);
3461 }
3462 }
3463 // Replace all nodes with identical edges as m with m
3464 k->subsume_by(m, this);
3465 }
3466 }
3467 }
3468 break;
3469 }
3470 case Op_CmpUL: {
3471 if (!Matcher::has_match_rule(Op_CmpUL)) {
3472 // No support for unsigned long comparisons
3473 ConINode* sign_pos = new ConINode(TypeInt::make(BitsPerLong - 1));
3474 Node* sign_bit_mask = new RShiftLNode(n->in(1), sign_pos);
3475 Node* orl = new OrLNode(n->in(1), sign_bit_mask);
3476 ConLNode* remove_sign_mask = new ConLNode(TypeLong::make(max_jlong));
3477 Node* andl = new AndLNode(orl, remove_sign_mask);
3478 Node* cmp = new CmpLNode(andl, n->in(2));
3479 n->subsume_by(cmp, this);
3480 }
3481 break;
3482 }
3483 default:
3484 assert(!n->is_Call(), "");
3485 assert(!n->is_Mem(), "");
3486 assert(nop != Op_ProfileBoolean, "should be eliminated during IGVN");
3487 break;
3488 }
3489 }
3490
3491 //------------------------------final_graph_reshaping_walk---------------------
3492 // Replacing Opaque nodes with their input in final_graph_reshaping_impl(),
|