This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 0005-Search-all-dominated-blocks-for-expressions-to-hoist.patch


On 7/7/10 8:40 PM, Jeff Law wrote:
...
Since there's no edge insertions with hoisting, the only potential
problem I can see is when the hoisted expression itself can trigger
traversal of an abnormal edge and the block we want to put the
expression does not have an edge to the handler. In that case we'd need
to add edges in the cfg and I don't see any compensation code in gcse.c
to deal with that case.

I agree.



Assuming that's the situation we need to avoid then we really need to switch the pre-like code since it detects expressions which can cause traversal of the abnormal edge much better. It's a fairly simple patch since it just prunes some expressions from the local tables before running the dataflow solver.

The first of the attached patches replaces transpout with an additional check in determining if an expression is anticipatable.


The second patch implements LCA approach to avoid hoisting expression too far up. As a side effect of implementation, it somewhat simplifies control flow of hoist_code.

I really hope this is the last iteration on the one-line change this problem initially was :).

Thanks,

--
Maxim Kuvyrkov
CodeSourcery
maxim@codesourcery.com
(650) 331-3385 x724

Attachment: 0013-Replace-transpout.ChangeLog
Description: Text document

Attachment: 0013-Replace-transpout.patch
Description: Text document

Attachment: 0005-Also-search-non-immediately-dominated-blocks-for-exp.ChangeLog
Description: Text document

Attachment: 0015-Also-search-non-immediately-dominated-blocks-for-exp.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]