changeset 11290:686d6d99352c

Move MathIntrinsic operations to ArithmeticLIRGenerator.
author Roland Schatz <roland.schatz@oracle.com>
date Mon, 12 Aug 2013 15:59:58 +0200
parents 2ad1435489d1
children 4a6b03a16808
files graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRGenerator.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java
diffstat 7 files changed, 85 insertions(+), 63 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java	Mon Aug 12 15:55:54 2013 +0200
+++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java	Mon Aug 12 15:59:58 2013 +0200
@@ -784,33 +784,45 @@
     }
 
     @Override
-    public void emitMathAbs(Variable result, Variable input) {
-        append(new BinaryRegConst(DAND, result, input, Constant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
+    public Value emitMathAbs(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new BinaryRegConst(DAND, result, asAllocatable(input), Constant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
+        return result;
     }
 
     @Override
-    public void emitMathSqrt(Variable result, Variable input) {
-        append(new Unary2Op(SQRT, result, input));
+    public Value emitMathSqrt(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new Unary2Op(SQRT, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathLog(Variable result, Variable input, boolean base10) {
-        append(new AMD64MathIntrinsicOp(base10 ? LOG10 : LOG, result, input));
+    public Value emitMathLog(Value input, boolean base10) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new AMD64MathIntrinsicOp(base10 ? LOG10 : LOG, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathCos(Variable result, Variable input) {
-        append(new AMD64MathIntrinsicOp(COS, result, input));
+    public Value emitMathCos(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new AMD64MathIntrinsicOp(COS, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathSin(Variable result, Variable input) {
-        append(new AMD64MathIntrinsicOp(SIN, result, input));
+    public Value emitMathSin(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new AMD64MathIntrinsicOp(SIN, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathTan(Variable result, Variable input) {
-        append(new AMD64MathIntrinsicOp(TAN, result, input));
+    public Value emitMathTan(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new AMD64MathIntrinsicOp(TAN, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
--- a/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java	Mon Aug 12 15:55:54 2013 +0200
+++ b/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java	Mon Aug 12 15:59:58 2013 +0200
@@ -625,32 +625,34 @@
     }
 
     @Override
-    public void emitMathAbs(Variable result, Variable input) {
+    public Value emitMathAbs(Value input) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathSqrt(Variable result, Variable input) {
+    public Value emitMathSqrt(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
         append(new Op1Stack(SQRT, result, input));
+        return result;
     }
 
     @Override
-    public void emitMathLog(Variable result, Variable input, boolean base10) {
+    public Value emitMathLog(Value input, boolean base10) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathCos(Variable result, Variable input) {
+    public Value emitMathCos(Value input) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathSin(Variable result, Variable input) {
+    public Value emitMathSin(Value input) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathTan(Variable result, Variable input) {
+    public Value emitMathTan(Value input) {
         throw new InternalError("NYI");
     }
 
--- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java	Mon Aug 12 15:55:54 2013 +0200
+++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java	Mon Aug 12 15:59:58 2013 +0200
@@ -650,32 +650,32 @@
     }
 
     @Override
-    public void emitMathAbs(Variable result, Variable input) {
+    public Value emitMathAbs(Value input) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathSqrt(Variable result, Variable input) {
+    public Value emitMathSqrt(Value input) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathLog(Variable result, Variable input, boolean base10) {
+    public Value emitMathLog(Value input, boolean base10) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathCos(Variable result, Variable input) {
+    public Value emitMathCos(Value input) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathSin(Variable result, Variable input) {
+    public Value emitMathSin(Value input) {
         throw new InternalError("NYI");
     }
 
     @Override
-    public void emitMathTan(Variable result, Variable input) {
+    public Value emitMathTan(Value input) {
         throw new InternalError("NYI");
     }
 
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Mon Aug 12 15:55:54 2013 +0200
+++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Mon Aug 12 15:59:58 2013 +0200
@@ -403,33 +403,45 @@
     }
 
     @Override
-    public void emitMathAbs(Variable result, Variable input) {
-        append(new BinaryRegConst(DAND, result, input, Constant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
+    public Value emitMathAbs(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new BinaryRegConst(DAND, result, asAllocatable(input), Constant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
+        return result;
     }
 
     @Override
-    public void emitMathSqrt(Variable result, Variable input) {
-        append(new SPARCMathIntrinsicOp(SQRT, result, input));
+    public Value emitMathSqrt(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new SPARCMathIntrinsicOp(SQRT, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathLog(Variable result, Variable input, boolean base10) {
-        append(new SPARCMathIntrinsicOp(LOG, result, input));
+    public Value emitMathLog(Value input, boolean base10) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new SPARCMathIntrinsicOp(LOG, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathCos(Variable result, Variable input) {
-        append(new SPARCMathIntrinsicOp(COS, result, input));
+    public Value emitMathCos(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new SPARCMathIntrinsicOp(COS, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathSin(Variable result, Variable input) {
-        append(new SPARCMathIntrinsicOp(SIN, result, input));
+    public Value emitMathSin(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new SPARCMathIntrinsicOp(SIN, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
-    public void emitMathTan(Variable result, Variable input) {
-        append(new SPARCMathIntrinsicOp(TAN, result, input));
+    public Value emitMathTan(Value input) {
+        Variable result = newVariable(input.getPlatformKind());
+        append(new SPARCMathIntrinsicOp(TAN, result, asAllocatable(input)));
+        return result;
     }
 
     @Override
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java	Mon Aug 12 15:55:54 2013 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java	Mon Aug 12 15:59:58 2013 +0200
@@ -799,17 +799,5 @@
 
     public abstract void emitBitScanReverse(Variable result, Value operand);
 
-    public abstract void emitMathAbs(Variable result, Variable input);
-
-    public abstract void emitMathSqrt(Variable result, Variable input);
-
-    public abstract void emitMathLog(Variable result, Variable input, boolean base10);
-
-    public abstract void emitMathCos(Variable result, Variable input);
-
-    public abstract void emitMathSin(Variable result, Variable input);
-
-    public abstract void emitMathTan(Variable result, Variable input);
-
     public abstract void emitByteSwap(Variable result, Value operand);
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRGenerator.java	Mon Aug 12 15:55:54 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRGenerator.java	Mon Aug 12 15:59:58 2013 +0200
@@ -64,4 +64,16 @@
     Value emitUShr(Value a, Value b);
 
     Value emitConvert(ConvertNode.Op opcode, Value inputVal);
+
+    Value emitMathAbs(Value input);
+
+    Value emitMathSqrt(Value input);
+
+    Value emitMathLog(Value input, boolean base10);
+
+    Value emitMathCos(Value input);
+
+    Value emitMathSin(Value input);
+
+    Value emitMathTan(Value input);
 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java	Mon Aug 12 15:55:54 2013 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java	Mon Aug 12 15:59:58 2013 +0200
@@ -22,18 +22,14 @@
  */
 package com.oracle.graal.replacements.nodes;
 
-import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
-import com.oracle.graal.compiler.gen.*;
-import com.oracle.graal.compiler.target.*;
 import com.oracle.graal.graph.*;
-import com.oracle.graal.lir.*;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.calc.*;
 import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.nodes.type.*;
 
-public class MathIntrinsicNode extends FloatingNode implements Canonicalizable, LIRGenLowerable, ArithmeticOperation {
+public class MathIntrinsicNode extends FloatingNode implements Canonicalizable, ArithmeticLIRLowerable {
 
     @Input private ValueNode x;
     private final Operation operation;
@@ -58,30 +54,30 @@
     }
 
     @Override
-    public void generate(LIRGenerator gen) {
-        Variable input = gen.load(gen.operand(x()));
-        Variable result = gen.newVariable(kind());
+    public void generate(ArithmeticLIRGenerator gen) {
+        Value input = gen.operand(x());
+        Value result;
         switch (operation()) {
             case ABS:
-                gen.emitMathAbs(result, input);
+                result = gen.emitMathAbs(input);
                 break;
             case SQRT:
-                gen.emitMathSqrt(result, input);
+                result = gen.emitMathSqrt(input);
                 break;
             case LOG:
-                gen.emitMathLog(result, input, false);
+                result = gen.emitMathLog(input, false);
                 break;
             case LOG10:
-                gen.emitMathLog(result, input, true);
+                result = gen.emitMathLog(input, true);
                 break;
             case SIN:
-                gen.emitMathSin(result, input);
+                result = gen.emitMathSin(input);
                 break;
             case COS:
-                gen.emitMathCos(result, input);
+                result = gen.emitMathCos(input);
                 break;
             case TAN:
-                gen.emitMathTan(result, input);
+                result = gen.emitMathTan(input);
                 break;
             default:
                 throw GraalInternalError.shouldNotReachHere();