From dbc441d4c23b1cf5783af2d0126ef0176cd5298d Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Tue, 11 Nov 2014 14:42:00 +0100
Subject: [PATCH] remove special handling of NaNs in complex multiplication

---
 .../r/runtime/ops/BinaryArithmetic.java       | 63 ++-----------------
 1 file changed, 4 insertions(+), 59 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
index 39e978d642..e1d0e1e563 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
@@ -258,12 +258,10 @@ public abstract class BinaryArithmetic extends Operation {
             double[] res = new double[2];
             double[] interm = new double[4];
             complexMult(leftReal, leftImag, rightReal, rightImag, res, interm);
-            if (Double.isNaN(res[0]) && Double.isNaN(res[1])) {
-                CompilerDirectives.transferToInterpreterAndInvalidate();
-                MultiplyNaN multNaN = new MultiplyNaN();
-                replace(multNaN);
-                return multNaN.handleNaN(leftReal, leftImag, rightReal, rightImag, res, interm);
-            }
+            /*
+             * LStadler: removed the special code for handling NaNs in the result, since it works
+             * fine (and the tests are broken either way). to revive it, get it from the history.
+             */
             return RDataFactory.createComplex(res[0], res[1]);
         }
 
@@ -297,59 +295,6 @@ public abstract class BinaryArithmetic extends Operation {
 
     }
 
-    private static final class MultiplyNaN extends Multiply {
-
-        private final ConditionProfile inf1 = ConditionProfile.createBinaryProfile();
-        private final ConditionProfile inf2 = ConditionProfile.createBinaryProfile();
-        private final ConditionProfile inf3 = ConditionProfile.createBinaryProfile();
-
-        @Override
-        public RComplex op(double leftReal, double leftImag, double rightReal, double rightImag) {
-            double[] res = new double[2];
-            double[] interm = new double[4];
-            complexMult(leftReal, leftImag, rightReal, rightImag, res, interm);
-            if (Double.isNaN(res[0]) && Double.isNaN(res[1])) {
-                return handleNaN(leftReal, leftImag, rightReal, rightImag, res, interm);
-            }
-            return RDataFactory.createComplex(res[0], res[1]);
-        }
-
-        protected RComplex handleNaN(double leftReal, double leftImag, double rightReal, double rightImag, double[] res, double[] interm) {
-            boolean recalc = false;
-            double ra = leftReal;
-            double rb = leftImag;
-            double rc = rightReal;
-            double rd = rightImag;
-            if (inf1.profile(Double.isInfinite(ra) || Double.isInfinite(rb))) {
-                ra = convertInf(ra);
-                rb = convertInf(rb);
-                rc = convertNaN(rc);
-                rd = convertNaN(rd);
-                recalc = true;
-            }
-            if (inf2.profile(Double.isInfinite(rc) || Double.isInfinite(rd))) {
-                rc = convertInf(rc);
-                rd = convertInf(rd);
-                ra = convertNaN(ra);
-                rb = convertNaN(rb);
-                recalc = true;
-            }
-            if (inf3.profile(!recalc && (Double.isInfinite(interm[0]) || Double.isInfinite(interm[1]) || Double.isInfinite(interm[2]) || Double.isInfinite(interm[3])))) {
-                ra = convertNaN(ra);
-                rb = convertNaN(rb);
-                rc = convertNaN(rc);
-                rd = convertNaN(rd);
-                recalc = true;
-            }
-            if (recalc) {
-                res[0] = Double.POSITIVE_INFINITY * (ra * rc - rb * rd);
-                res[1] = Double.POSITIVE_INFINITY * (ra * rd + rb * rc);
-            }
-            return RDataFactory.createComplex(res[0], res[1]);
-        }
-
-    }
-
     private static class Div extends BinaryArithmetic {
 
         public Div() {
-- 
GitLab