# HG changeset patch # User Lukas Stadler # Date 1403792855 -7200 # Node ID 9c4043105f48d84899c95043fd80ab26419e0257 # Parent c5b2a3c22318d753ff71404d1c1db370f4991a38 make MathIntrinsicNode a UnaryNode diff -r c5b2a3c22318 -r 9c4043105f48 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 Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,16 +25,14 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -public class MathIntrinsicNode extends FloatingNode implements Canonicalizable, ArithmeticLIRLowerable { +public class MathIntrinsicNode extends UnaryNode implements ArithmeticLIRLowerable { - @Input private ValueNode x; private final Operation operation; public enum Operation { @@ -47,24 +45,19 @@ TAN } - public ValueNode x() { - return x; - } - public Operation operation() { return operation; } - public MathIntrinsicNode(ValueNode x, Operation op) { - super(StampFactory.forKind(Kind.Double)); - assert x.stamp() instanceof FloatStamp && PrimitiveStamp.getBits(x.stamp()) == 64; - this.x = x; + public MathIntrinsicNode(ValueNode value, Operation op) { + super(StampFactory.forKind(Kind.Double), value); + assert value.stamp() instanceof FloatStamp && PrimitiveStamp.getBits(value.stamp()) == 64; this.operation = op; } @Override public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { - Value input = builder.operand(x()); + Value input = builder.operand(getValue()); Value result; switch (operation()) { case ABS: @@ -100,9 +93,9 @@ } @Override - public Node canonical(CanonicalizerTool tool) { - if (x().isConstant()) { - return ConstantNode.forPrimitive(evalConst(x().asConstant()), graph()); + public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue) { + if (forValue.isConstant()) { + return ConstantNode.forPrimitive(evalConst(forValue.asConstant())); } return this; } @@ -112,7 +105,7 @@ return doCompute(value, op); } - private static double doCompute(double value, Operation op) throws GraalInternalError { + private static double doCompute(double value, Operation op) { switch (op) { case ABS: return Math.abs(value); @@ -128,7 +121,8 @@ return Math.cos(value); case TAN: return Math.tan(value); + default: + throw new GraalInternalError("unknown op %s", op); } - throw new GraalInternalError("unknown op %s", op); } }