[SDAG] Begin simplifying the way in which the legalizer deletes nodes.
authorChandler Carruth <chandlerc@gmail.com>
Fri, 1 Aug 2014 19:49:59 +0000 (19:49 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 1 Aug 2014 19:49:59 +0000 (19:49 +0000)
commit1f52b3da0af421d117b5ec50c0be7e75e4301b37
tree935f7e94e5b73af0052b786a559d0ea1d4f9f8b2
parent5dcb33bdbbccd5e713c043417efae6d089abea5b
[SDAG] Begin simplifying the way in which the legalizer deletes nodes.

This lifts the (very few) places the legalizer would delete dead nodes
into the outer loop around the legalizer. This is significantly simpler
because it doesn't require the legalizer itself to manage the iterator
validity, and it doesn't require the legalizer to be a DAG update
listener in order to remove things from the legalized set. It also makes
the interface much less contrived for the case of the legalizer running
inside the last phase of DAG combining.

I'm working on centralizing the deletion of nodes during both legalizing
and combining as much as possible. My hope is to remove the need for DAG
update listeners from the combiner next, which would remove a costly
virtual dispatch chain on every deletion. This in turn should allow us
to more aggressively delete DAG nodes during combining which will in
turn allow us to combine more aggressively by exposing the actual nodes
which have single users to the combine phases.

llvm-svn: 214546
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp