[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)
commit5b74e5abb8aaacc05a7d2a672b676ed2ab3acc54
tree541e2620c5008dee4ff4bef75bc57ee0910e45bd
parent8d3bf10dd3074fe7ea83f86bd3a80782f309695d
[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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214546 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/LegalizeDAG.cpp