This is the mail archive of the
mailing list for the GCC project.
Re: Predictive commoning leads to register to register moves through memory.
- From: Jeff Law <law at redhat dot com>
- To: Simon Dardis <Simon dot Dardis at imgtec dot com>, "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Fri, 28 Aug 2015 09:48:57 -0600
- Subject: Re: Predictive commoning leads to register to register moves through memory.
- Authentication-results: sourceware.org; auth=none
- References: <B83211783F7A334B926F0C0CA42E32CAF21F34 at hhmail02 dot hh dot imgtec dot org>
On 08/28/2015 09:43 AM, Simon Dardis wrote:
I'd probably start by looking at the .optimized tree dump in both cases
to understand the difference, then (most liklely) tracing that through
the RTL optimizers into the register allocator.
Following Jeff's advice to extract more information from GCC, I've
narrowed the cause down to the predictive commoning pass inserting
the load in a loop header style basic block. However, the next pass
in GCC, tree-cunroll promptly removes the loop and joins the loop
header to the body of the (non)loop. More oddly, disabling
conditional store elimination pass or the dominator optimizations
pass or disabling of jump-threading with --param
max-jump-thread-duplication-stmts=0 nets the above assembly code. Any
ideas on an approach for this issue?