From e8821385870c7937d31c9ab5278f880d6a2eeeb9 Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Tue, 11 Nov 2014 12:53:23 +0100
Subject: [PATCH] avoid unnecessary isComplete call

---
 .../r/nodes/builtin/base/UpdateDiag.java      |  4 +-
 .../nodes/access/array/ArrayPositionCast.java |  2 +-
 .../access/array/read/AccessArrayNode.java    |  4 +-
 .../r/nodes/binary/BinaryArithmeticNode.java  |  4 +-
 .../r/nodes/binary/BinaryBooleanNode.java     | 62 +++++++++----------
 .../r/nodes/binary/CombineBinaryNode.java     |  2 +-
 6 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
index 1eaa5b17ef..9db416a6ef 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
@@ -90,7 +90,7 @@ public abstract class UpdateDiag extends RInvisibleBuiltinNode {
         int nrow = resultVector.getDimensions()[0];
         int size = Math.min(nrow, resultVector.getDimensions()[1]);
         int pos = 0;
-        naCheck.enable(!resultVector.isComplete());
+        naCheck.enable(resultVector);
         for (int i = 0; i < size; i++) {
             resultVector.updateDataAt(pos, valueVector.getDataAt(i % valueVector.getLength()), naCheck);
             pos += nrow + 1;
@@ -110,7 +110,7 @@ public abstract class UpdateDiag extends RInvisibleBuiltinNode {
         int size = Math.min(resultVector.getDimensions()[0], resultVector.getDimensions()[1]);
         int nrow = resultVector.getDimensions()[0];
         int pos = 0;
-        naCheck.enable(!resultVector.isComplete());
+        naCheck.enable(resultVector);
         for (int i = 0; i < size; i++) {
             resultVector.updateDataAt(pos, valueVector.getDataAt(i % valueVector.getLength()), naCheck);
             pos += nrow + 1;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java
index 6904958bc3..a9a70f2a66 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/ArrayPositionCast.java
@@ -659,7 +659,7 @@ public abstract class ArrayPositionCast extends ArrayPositionsCastBase {
             int logicalVectorLength = operand.getLength();
             int logicalVectorInd = 0;
             int[] data = new int[resultLength];
-            naCheck.enable(!operand.isComplete());
+            naCheck.enable(operand);
             int timesSeenFalse = 0;
             int timesSeenNA = 0;
             int i = 0;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java
index 42cc3f0d73..c39914478c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/read/AccessArrayNode.java
@@ -368,7 +368,7 @@ public abstract class AccessArrayNode extends RNode {
             int accSrcDimensions = vector.getLength() / srcDimSize;
             int accDstDimensions = resLength / p.getLength();
 
-            elementNACheck.enable(!p.isComplete());
+            elementNACheck.enable(p);
             for (int i = 0; i < p.getLength(); i++) {
                 int dstArrayBase = accDstDimensions * i;
                 int pos = p.getDataAt(i);
@@ -1352,7 +1352,7 @@ public abstract class AccessArrayNode extends RNode {
             int accSrcDimensions = vector.getLength() / srcDimSize;
             int accDstDimensions = resLength / p.getLength();
 
-            elementNACheck.enable(!p.isComplete());
+            elementNACheck.enable(p);
             for (int i = 0; i < p.getLength(); i++) {
                 int dstArrayBase = accDstDimensions * i;
                 int pos = p.getDataAt(i);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
index ca31defef7..67602fb83e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
@@ -750,8 +750,8 @@ public abstract class BinaryArithmeticNode extends RBuiltinNode {
         if (emptyVector.profile(length == 0)) {
             return RDataFactory.createEmptyDoubleVector();
         }
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         double[] result = new double[length];
         for (int i = 0; i < length; ++i) {
             double leftValue = left.getDataAt(i);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
index 40bec6926f..cd90c95aa5 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
@@ -1486,7 +1486,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performIntVectorOp(RAbstractIntVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             int leftValue = left.getDataAt(i);
@@ -1501,7 +1501,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performIntVectorOp(RAbstractIntVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.intToString(left.getDataAt(i), false);
@@ -1516,7 +1516,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performIntVectorOp(RAbstractIntVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.int2complex(left.getDataAt(i));
@@ -1533,7 +1533,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performDoubleVectorOp(RAbstractDoubleVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             double leftValue = left.getDataAt(i);
@@ -1548,7 +1548,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performDoubleVectorOp(RAbstractDoubleVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.doubleToString(left.getDataAt(i));
@@ -1563,7 +1563,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performDoubleVectorOp(RAbstractDoubleVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.double2complex(left.getDataAt(i));
@@ -1580,7 +1580,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performLogicalVectorOp(RAbstractLogicalVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             byte leftValue = left.getDataAt(i);
@@ -1595,7 +1595,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performLogicalVectorOp(RAbstractLogicalVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.logicalToString(left.getDataAt(i));
@@ -1610,7 +1610,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performLogicalVectorOp(RAbstractLogicalVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.logical2complex(left.getDataAt(i));
@@ -1627,7 +1627,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performStringVectorOp(RAbstractStringVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = left.getDataAt(i);
@@ -1644,7 +1644,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performComplexVectorOp(RAbstractComplexVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = left.getDataAt(i);
@@ -1659,7 +1659,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performComplexVectorOp(RAbstractComplexVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.complexToString(left.getDataAt(i));
@@ -1674,7 +1674,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performRawVectorOp(RAbstractRawVector left, double rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             double leftValue = RRuntime.raw2double(left.getDataAt(i));
@@ -1689,7 +1689,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performRawVectorOp(RAbstractRawVector left, String rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             String leftValue = RRuntime.rawToString(left.getDataAt(i));
@@ -1704,7 +1704,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
     private RLogicalVector performRawVectorOp(RAbstractRawVector left, RComplex rightValue, boolean reverse) {
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
+        leftNACheck.enable(left);
         rightNACheck.enable(rightValue);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = RRuntime.raw2complex(left.getDataAt(i));
@@ -1735,8 +1735,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             int leftValue = left.getDataAt(i);
             int rightValue = right.getDataAt(i);
@@ -1754,8 +1754,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
@@ -1780,8 +1780,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             double leftValue = left.getDataAt(i);
             double rightValue = right.getDataAt(i);
@@ -1799,8 +1799,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
@@ -1825,8 +1825,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             String leftValue = left.getDataAt(i);
             String rightValue = right.getDataAt(i);
@@ -1844,8 +1844,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
@@ -1870,8 +1870,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         assert areSameLength(left, right);
         int length = left.getLength();
         byte[] result = new byte[length];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         for (int i = 0; i < length; ++i) {
             RComplex leftValue = left.getDataAt(i);
             RComplex rightValue = right.getDataAt(i);
@@ -1889,8 +1889,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
         int rightLength = right.getLength();
         int resultLength = Math.max(leftLength, rightLength);
         byte[] result = new byte[resultLength];
-        leftNACheck.enable(!left.isComplete());
-        rightNACheck.enable(!right.isComplete());
+        leftNACheck.enable(left);
+        rightNACheck.enable(right);
         int l = 0;
         int r = 0;
         for (int i = 0; i < resultLength; ++i, l = Utils.incMod(l, leftLength), r = Utils.incMod(r, rightLength)) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java
index 9f6f63829b..cb95bbc879 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryNode.java
@@ -47,7 +47,7 @@ public abstract class CombineBinaryNode extends BinaryNode {
             namesData[i++] = RRuntime.NAMES_ATTR_EMPTY_VALUE;
             to++;
         }
-        naCheck.enable(!orgNames.isComplete());
+        naCheck.enable(orgNames);
         for (int j = 0; i < to; i++, j++) {
             namesData[i] = orgNames.getDataAt(j);
             naCheck.check(namesData[i]);
-- 
GitLab