6965815: OptimizeStringConcat: assert(!q->is_MergeMem()) failed with specjbb2000
Reviewed-by: kvn
This commit is contained in:
parent
cf8bea660b
commit
0ecb9e3298
@ -1739,6 +1739,7 @@ void GraphKit::replace_call(CallNode* call, Node* result) {
|
||||
C->gvn_replace_by(callprojs.fallthrough_catchproj, final_state->in(TypeFunc::Control));
|
||||
C->gvn_replace_by(callprojs.fallthrough_memproj, final_state->in(TypeFunc::Memory));
|
||||
C->gvn_replace_by(callprojs.fallthrough_ioproj, final_state->in(TypeFunc::I_O));
|
||||
Node* final_mem = final_state->in(TypeFunc::Memory);
|
||||
|
||||
// Replace the result with the new result if it exists and is used
|
||||
if (callprojs.resproj != NULL && result != NULL) {
|
||||
@ -1776,6 +1777,21 @@ void GraphKit::replace_call(CallNode* call, Node* result) {
|
||||
// Disconnect the call from the graph
|
||||
call->disconnect_inputs(NULL);
|
||||
C->gvn_replace_by(call, C->top());
|
||||
|
||||
// Clean up any MergeMems that feed other MergeMems since the
|
||||
// optimizer doesn't like that.
|
||||
if (final_mem->is_MergeMem()) {
|
||||
Node_List wl;
|
||||
for (SimpleDUIterator i(final_mem); i.has_next(); i.next()) {
|
||||
Node* m = i.get();
|
||||
if (m->is_MergeMem() && !wl.contains(m)) {
|
||||
wl.push(m);
|
||||
}
|
||||
}
|
||||
while (wl.size() > 0) {
|
||||
_gvn.transform(wl.pop());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user