# HG changeset patch # User never # Date 1206720039 25200 # Node ID 8a4ef4e001d3624891be34f16522edb4386514f6 # Parent deb97b8ef02b2eb059e5d60670350b6a2604d1fa 6680594: Load + Load isn't canonicalized leading to missed GVN opportunities Reviewed-by: kvn, jrose diff -r deb97b8ef02b -r 8a4ef4e001d3 src/share/vm/opto/addnode.cpp --- a/src/share/vm/opto/addnode.cpp Wed Mar 26 12:25:06 2008 -0700 +++ b/src/share/vm/opto/addnode.cpp Fri Mar 28 09:00:39 2008 -0700 @@ -70,9 +70,14 @@ // Convert "Load+x" into "x+Load". // Now check for loads - if( in2->is_Load() ) return false; - // Left is a Load and Right is not; move it right. - if( in1->is_Load() ) { + if (in2->is_Load()) { + if (!in1->is_Load()) { + // already x+Load to return + return false; + } + // both are loads, so fall through to sort inputs by idx + } else if( in1->is_Load() ) { + // Left is a Load and Right is not; move it right. add->swap_edges(1, 2); return true; }