> Hi, > as observed on PR54717 we give up on some partial insertions because of > Skipping partial partial redundancy for expression > {array_ref<pretmp_8,0,4>,mem_ref<0B>,xxtrt_46(D)}@.MEM_30(D) (0165) not > partially anticipated on any to be optimized for speed edges > > The logic here is wrong, the edges are tested by optimize_edge_for_speed_p and > it never returns false for any edge queried by tree-ssa-pre.c. > > The problem is that the code looks for basic block BLOCK with partial > anticipance of given expression. Then it is trying to check that the path in > question is hot by looking for succesors of BLOCK that also do have partial > anticipance and are hot. > > In this testcase BLOCK has two succesors - one without any anticipance and > one with full anticipance, so we give up regardless of the profile. This > patch > fixes it. > > Unforutnately it seems that the missed vectorization PR is about is not fixed, > we give up for alignment issues now. I am looking into this incrementally.
Actually I was wrong. The patch does solve majority of rnflow regression (reduces runtime from 38s to 30s) http://gcc.opensuse.org/c++bench-frescobaldi/polyhedron/polyhedron-summary.txt-2-0.html 4.7 vectorizes two extra loops in that function, but the vectorization is not desirable as I discussed in the PR log. Also there are no off-noise performance/size regressions on other benchmarks. We have new regression on induct, but that one happent one run earlier. Honza