Skip to content

Commit f7ffc8d

Browse files
author
Christian Wimmer
committed
Transitively transplant inputs of arithmetic nodes
1 parent 2f5854d commit f7ffc8d

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/phases/IntrinsifyMethodHandlesInvocationPlugin.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.List;
3636
import java.util.Objects;
3737
import java.util.Set;
38+
import java.util.stream.StreamSupport;
3839

3940
import org.graalvm.collections.Pair;
4041
import org.graalvm.collections.UnmodifiableEconomicMap;
@@ -778,7 +779,7 @@ private ValueNode[] nodes(List<ValueNode> oNodes) throws AbortTransplantExceptio
778779
return tNodes;
779780
}
780781

781-
private ValueNode node(ValueNode oNode) throws AbortTransplantException {
782+
private ValueNode node(Node oNode) throws AbortTransplantException {
782783
if (oNode == null) {
783784
return null;
784785
}
@@ -812,16 +813,28 @@ private ValueNode node(ValueNode oNode) throws AbortTransplantException {
812813
* have side effects and also do not reference any types or other elements that we
813814
* would need to modify.
814815
*/
816+
for (Node input : oNode.inputs()) {
817+
/*
818+
* Make sure all input nodes are transplanted first, and registered in the
819+
* transplanted map.
820+
*/
821+
node(input);
822+
}
815823
List<Node> oNodes = Collections.singletonList(oNode);
816824
UnmodifiableEconomicMap<Node, Node> tNodes = b.getGraph().addDuplicates(oNodes, oNode.graph(), 1, transplanted);
817-
assert tNodes.size() == 1;
825+
/*
826+
* The following assertion looks strange, but NodeMap.size() is not implemented so
827+
* we need to iterate the map to get the size.
828+
*/
829+
assert StreamSupport.stream(tNodes.getKeys().spliterator(), false).count() == 1;
818830
tNode = tNodes.get(oNode);
819831

820832
} else {
821833
throw bailout();
822834
}
823835

824836
tNode = b.add((ValueNode) tNode);
837+
assert tNode.verify();
825838
transplanted.put(oNode, tNode);
826839
return (ValueNode) tNode;
827840
}

0 commit comments

Comments
 (0)