On 08/28/2015 09:43 AM, Simon Dardis wrote:
Following Jeff's advice[1] 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?
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.
jeff