< prev index next >

src/hotspot/share/opto/compile.cpp

Print this page




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(),


< prev index next >