# HG changeset patch # User Roland Schatz # Date 1376315998 -7200 # Node ID 686d6d99352c2c9ca0bdaaf5105891f42cf2619d # Parent 2ad1435489d1b0dd74013bb95fc585e72a7d76f1 Move MathIntrinsic operations to ArithmeticLIRGenerator. diff -r 2ad1435489d1 -r 686d6d99352c graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- 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 diff -r 2ad1435489d1 -r 686d6d99352c graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java --- 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"); } diff -r 2ad1435489d1 -r 686d6d99352c graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- 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"); } diff -r 2ad1435489d1 -r 686d6d99352c graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- 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 diff -r 2ad1435489d1 -r 686d6d99352c graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- 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); } diff -r 2ad1435489d1 -r 686d6d99352c graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRGenerator.java --- 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); } diff -r 2ad1435489d1 -r 686d6d99352c graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java --- 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();