`create_new_if_for_predicate()` calls `clone_nodes_with_same_ctrl()` which does some data graph cloning by using the following three steps/passes:
1. Collect data nodes to clone by using a node filter
2. Clone the collected nodes (their data inputs still point to the old nodes)
3. Fix the cloned data inputs pointing to the old nodes to the cloned inputs by using an old->new mapping. In this pass, also fix the control inputs of any pinned data from the old uncommon projection to the new one.
This RFE should now extract the data node cloning steps to a separate class in order to reuse that when refactoring and fixing `create_bool_from_template_assertion_predicate()` which is currently hard to understand and contains a bug of endless processing in edge cases (see JDK-8327110).
The extracted data node cloning class should do the following core cloning in two steps:
1. Take a collection of data nodes (the collection step is different in `clone_nodes_with_same_ctrl()` compared to `create_bool_from_template_assertion_predicate()` and can thus not be shared) and clone them. [Same as step 2 above]
2. Fix the cloned data inputs pointing to the old nodes to the cloned inputs by using an old->new mapping. [Same as first part of step 3 above but drop the second part which is specific to `clone_nodes_with_same_ctrl()`]