summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Passes/PassBuilder.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2017-05-25 06:33:36 +0000
committerChandler Carruth <chandlerc@gmail.com>2017-05-25 06:33:36 +0000
commitdd2e275a47fccf7fc83e11fbd7053d4dadd1b7b9 (patch)
tree92f8fcf1d6b24a6ddf9b618256784722337ef1e5 /llvm/lib/Passes/PassBuilder.cpp
parent4974f108ac91b440131d310fa4c927ace1cee8cd (diff)
downloadbcm5719-llvm-dd2e275a47fccf7fc83e11fbd7053d4dadd1b7b9.tar.gz
bcm5719-llvm-dd2e275a47fccf7fc83e11fbd7053d4dadd1b7b9.zip
[PM/Unswitch] Fix a bug in the domtree update logic for the new unswitch
pass. The original logic only considered direct successors of the hoisted domtree nodes, but that isn't really enough. If there are other basic blocks that are completely within the subtree, their successors could just as easily be impacted by the hoisting. The more I think about it, the more I think the correct update here is to hoist every block on the dominance frontier which has an idom in the chain we hoist across. However, this is subtle enough that I'd definitely appreciate some more eyes on it. Sadly, if this is the correct algorithm, it requires computing a (highly localized) dominance frontier. I've done this in the simplest (IE, least code) way I could come up with, but that may be too naive. Suggestions welcome here, dominance update algorithms are not an area I've studied much, so I don't have strong opinions. In good news, with this patch, turning on simple unswitch passes the LLVM test suite for me with asserts enabled. Differential Revision: https://reviews.llvm.org/D32740 llvm-svn: 303843
Diffstat (limited to 'llvm/lib/Passes/PassBuilder.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud