changeset 16249:9c4043105f48

make MathIntrinsicNode a UnaryNode
author Lukas Stadler <lukas.stadler@oracle.com>
date Thu, 26 Jun 2014 16:27:35 +0200
parents c5b2a3c22318
children 56b1e71d93ca
files graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java
diffstat 1 files changed, 12 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- 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);
     }
 }