提交 bf4e4e04 编写于 作者: N never

6965815: OptimizeStringConcat: assert(!q->is_MergeMem()) failed with specjbb2000

Reviewed-by: kvn
上级 ed1b61c5
...@@ -1739,6 +1739,7 @@ void GraphKit::replace_call(CallNode* call, Node* result) { ...@@ -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_catchproj, final_state->in(TypeFunc::Control));
C->gvn_replace_by(callprojs.fallthrough_memproj, final_state->in(TypeFunc::Memory)); 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)); 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 // Replace the result with the new result if it exists and is used
if (callprojs.resproj != NULL && result != NULL) { if (callprojs.resproj != NULL && result != NULL) {
...@@ -1776,6 +1777,21 @@ void GraphKit::replace_call(CallNode* call, Node* result) { ...@@ -1776,6 +1777,21 @@ void GraphKit::replace_call(CallNode* call, Node* result) {
// Disconnect the call from the graph // Disconnect the call from the graph
call->disconnect_inputs(NULL); call->disconnect_inputs(NULL);
C->gvn_replace_by(call, C->top()); 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());
}
}
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册