Mercurial > hg > graal-compiler
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)) |