ConstantFP and Use

Hi all,

I've run into an assert in LegalizeTypes that is puzzling. It is in
NodeUpdateListener::NodeUpdated:

    void NodeUpdated(SDNode *N) override {
      // Node updates can mean pretty much anything. It is possible that an
      // operand was set to something already processed (f.e.) in which case
      // this node could become ready. Recompute its flags.
      assert(N->getNodeId() != DAGTypeLegalizer::ReadyToProcess &&
             N->getNodeId() != DAGTypeLegalizer::Processed &&
             "Invalid node ID for RAUW deletion!");
      N->setNodeId(DAGTypeLegalizer::NewNode);
      NodesToAnalyze.insert(N);
    }

First off, I wonder if this assert is actually valid. NodeUpdated is
called for more than node deletion (in fact AFAICT it's called for
everything *but* deletion). The NodeDeleted member right above it has
the exact same assert, with the same message, leading me to suspect a
cut-n-paste logical error.

But let's assume for the moment the assert is ok. It's been there a
long time and I've not been able to find other reports about it.

In the asserting case, I have a ConstantFP node in a Use structure where
the used value is from a load. This seems unusual to me. Why would a
ConstantFP appear in a Use? It's a leaf node. I suspect this is the
root of the problem but I wanted to check to make sure there wasn't some
sublety about Use that would make ConstantFP's appearance there not
unexpected.

Are my assumptions correct? Anyone else run into a similar situation?

Thanks for the help!

                            -David