Selection DAG adding node question

I am having trouble adding a node to the selection DAG (e.g. during combine)

E.g. node1 → use1, use2

Now if you add a node2, with node1 → node2 with node2 number of output values equal node1 number of output values, then combine as well as e.g. promotion pass with replace all of node1’s uses with node2, leaving node1 dead. While this is kind of expected, does this mean

a) always create new node (can you clone node, e.g. node1 above)?
b) is this something that selection DAG is not intended for at all?
c) sometimes it is not straight forward to create a new load, e.g. for loads, as DAG.getLoad will return “old” node if identical => a) can I clone a node?

Thanks! Hendrik

It is my understanding that you cannot create a clone in the DAG. This is due to common sub tree from what I understand.

This is a problem for direct mem architectures, seems more and more people are having issues with this but it can be worked around.

LLVM assumes a LD/ST architecture.

I’d love to hear otherwise.


So you want to create a new node, set new node’s inputs the same as old node’s (along with the output?) and delete old node?

yes, this is possible.