comparison src/share/vm/opto/memnode.cpp @ 169:9148c65abefc

6695049: (coll) Create an x86 intrinsic for Arrays.equals Summary: Intrinsify java/util/Arrays.equals(char[], char[]) Reviewed-by: kvn, never
author rasbold
date Thu, 29 May 2008 16:22:09 -0700
parents 7793bd37a336
children 44a553b2809d
comparison
equal deleted inserted replaced
168:7793bd37a336 169:9148c65abefc
154 assert(alias_idx >= Compile::AliasIdxRaw, "must not be a bad alias_idx"); 154 assert(alias_idx >= Compile::AliasIdxRaw, "must not be a bad alias_idx");
155 bool consistent = adr_check == NULL || adr_check->empty() || 155 bool consistent = adr_check == NULL || adr_check->empty() ||
156 phase->C->must_alias(adr_check, alias_idx ); 156 phase->C->must_alias(adr_check, alias_idx );
157 // Sometimes dead array references collapse to a[-1], a[-2], or a[-3] 157 // Sometimes dead array references collapse to a[-1], a[-2], or a[-3]
158 if( !consistent && adr_check != NULL && !adr_check->empty() && 158 if( !consistent && adr_check != NULL && !adr_check->empty() &&
159 tp->isa_aryptr() && tp->offset() == Type::OffsetBot && 159 tp->isa_aryptr() && tp->offset() == Type::OffsetBot &&
160 adr_check->isa_aryptr() && adr_check->offset() != Type::OffsetBot && 160 adr_check->isa_aryptr() && adr_check->offset() != Type::OffsetBot &&
161 ( adr_check->offset() == arrayOopDesc::length_offset_in_bytes() || 161 ( adr_check->offset() == arrayOopDesc::length_offset_in_bytes() ||
162 adr_check->offset() == oopDesc::klass_offset_in_bytes() || 162 adr_check->offset() == oopDesc::klass_offset_in_bytes() ||
163 adr_check->offset() == oopDesc::mark_offset_in_bytes() ) ) { 163 adr_check->offset() == oopDesc::mark_offset_in_bytes() ) ) {
164 // don't assert if it is dead code. 164 // don't assert if it is dead code.
2392 // control copies 2392 // control copies
2393 Node *StrCompNode::Ideal(PhaseGVN *phase, bool can_reshape){ 2393 Node *StrCompNode::Ideal(PhaseGVN *phase, bool can_reshape){
2394 return remove_dead_region(phase, can_reshape) ? this : NULL; 2394 return remove_dead_region(phase, can_reshape) ? this : NULL;
2395 } 2395 }
2396 2396
2397 //------------------------------Ideal------------------------------------------
2398 // Return a node which is more "ideal" than the current node. Strip out
2399 // control copies
2400 Node *AryEqNode::Ideal(PhaseGVN *phase, bool can_reshape){
2401 return remove_dead_region(phase, can_reshape) ? this : NULL;
2402 }
2403
2397 2404
2398 //============================================================================= 2405 //=============================================================================
2399 MemBarNode::MemBarNode(Compile* C, int alias_idx, Node* precedent) 2406 MemBarNode::MemBarNode(Compile* C, int alias_idx, Node* precedent)
2400 : MultiNode(TypeFunc::Parms + (precedent == NULL? 0: 1)), 2407 : MultiNode(TypeFunc::Parms + (precedent == NULL? 0: 1)),
2401 _adr_type(C->get_adr_type(alias_idx)) 2408 _adr_type(C->get_adr_type(alias_idx))