src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/XorNode.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/XorNode.java Thu Oct 31 14:23:06 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/XorNode.java Thu Oct 31 16:54:16 2019 -0700
@@ -54,6 +54,18 @@
assert x.stamp(NodeView.DEFAULT).isCompatible(y.stamp(NodeView.DEFAULT));
}
+ private XorNode(ValueNode x, ValueNode y, Stamp forcedStamp) {
+ super(TYPE, forcedStamp, x, y);
+ }
+
+ /**
+ * Create a new XorNode with a forced stamp, without eager folding. This should only be used in
+ * snippet code, where native-image may assign wrong stamps during graph generation.
+ */
+ public static ValueNode createForSnippet(ValueNode x, ValueNode y, Stamp forcedStamp) {
+ return new XorNode(x, y, forcedStamp);
+ }
+
public static ValueNode create(ValueNode x, ValueNode y, NodeView view) {
BinaryOp<Xor> op = ArithmeticOpTable.forStamp(x.stamp(view)).getXor();
Stamp stamp = op.foldStamp(x.stamp(view), y.stamp(view));