Mercurial > hg > truffle
comparison src/share/vm/opto/stringopts.cpp @ 7473:d092d1b31229
8005071: Incremental inlining for JSR 292
Summary: post parse inlining driven by number of live nodes.
Reviewed-by: twisti, kvn, jrose
author | roland |
---|---|
date | Sun, 23 Dec 2012 17:08:22 +0100 |
parents | ad5dd04754ee |
children | 90abdd727e64 |
comparison
equal
deleted
inserted
replaced
7445:cd962e15c08e | 7473:d092d1b31229 |
---|---|
263 eliminate_call(n->as_Call()); | 263 eliminate_call(n->as_Call()); |
264 } | 264 } |
265 } else if (n->is_IfTrue()) { | 265 } else if (n->is_IfTrue()) { |
266 Compile* C = _stringopts->C; | 266 Compile* C = _stringopts->C; |
267 C->gvn_replace_by(n, n->in(0)->in(0)); | 267 C->gvn_replace_by(n, n->in(0)->in(0)); |
268 C->gvn_replace_by(n->in(0), C->top()); | 268 // get rid of the other projection |
269 C->gvn_replace_by(n->in(0)->as_If()->proj_out(false), C->top()); | |
269 } | 270 } |
270 } | 271 } |
271 } | 272 } |
272 | 273 |
273 | 274 |
437 if (alloc == NULL) { | 438 if (alloc == NULL) { |
438 break; | 439 break; |
439 } | 440 } |
440 // Find the constructor call | 441 // Find the constructor call |
441 Node* result = alloc->result_cast(); | 442 Node* result = alloc->result_cast(); |
442 if (result == NULL || !result->is_CheckCastPP()) { | 443 if (result == NULL || !result->is_CheckCastPP() || alloc->in(TypeFunc::Memory)->is_top()) { |
443 // strange looking allocation | 444 // strange looking allocation |
444 #ifndef PRODUCT | 445 #ifndef PRODUCT |
445 if (PrintOptimizeStringConcat) { | 446 if (PrintOptimizeStringConcat) { |
446 tty->print("giving up because allocation looks strange "); | 447 tty->print("giving up because allocation looks strange "); |
447 alloc->jvms()->dump_spec(tty); tty->cr(); | 448 alloc->jvms()->dump_spec(tty); tty->cr(); |
832 ptr->in(2) != NULL && ptr->in(2)->is_Proj() && | 833 ptr->in(2) != NULL && ptr->in(2)->is_Proj() && |
833 ptr->in(1)->in(0) == ptr->in(2)->in(0) && | 834 ptr->in(1)->in(0) == ptr->in(2)->in(0) && |
834 ptr->in(1)->in(0) != NULL && ptr->in(1)->in(0)->is_If()) { | 835 ptr->in(1)->in(0) != NULL && ptr->in(1)->in(0)->is_If()) { |
835 // Simple diamond. | 836 // Simple diamond. |
836 // XXX should check for possibly merging stores. simple data merges are ok. | 837 // XXX should check for possibly merging stores. simple data merges are ok. |
838 // The IGVN will make this simple diamond go away when it | |
839 // transforms the Region. Make sure it sees it. | |
840 Compile::current()->record_for_igvn(ptr); | |
837 ptr = ptr->in(1)->in(0)->in(0); | 841 ptr = ptr->in(1)->in(0)->in(0); |
838 continue; | 842 continue; |
839 } | 843 } |
840 #ifndef PRODUCT | 844 #ifndef PRODUCT |
841 if (PrintOptimizeStringConcat) { | 845 if (PrintOptimizeStringConcat) { |