annotate graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/FloatDiv.java @ 3519:16cee060c446

added NodeInfo annotation
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 09 Aug 2011 14:43:41 +0200
parents 9b59afa78775
children 3e21ab23406b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2876
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
1 /*
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
4 *
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
8 *
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
13 * accompanied this code).
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
14 *
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
18 *
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
21 * questions.
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
22 */
2877
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2876
diff changeset
23 package com.oracle.max.graal.compiler.ir;
2876
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
24
2908
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
25 import com.oracle.max.graal.compiler.phases.CanonicalizerPhase.*;
2877
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2876
diff changeset
26 import com.oracle.max.graal.graph.*;
2876
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
27 import com.sun.cri.bytecode.*;
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
28 import com.sun.cri.ci.*;
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
29
3519
16cee060c446 added NodeInfo annotation
Lukas Stadler <lukas.stadler@jku.at>
parents: 3516
diff changeset
30 @NodeInfo(shortName = "/")
2876
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
31 public final class FloatDiv extends FloatArithmetic {
2908
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
32 private static final FloatDivCanonicalizerOp CANONICALIZER = new FloatDivCanonicalizerOp();
2876
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
33
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
34 public FloatDiv(CiKind kind, Value x, Value y, boolean isStrictFP, Graph graph) {
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
35 super(kind, kind == CiKind.Double ? Bytecodes.DDIV : Bytecodes.FDIV, x, y, isStrictFP, graph);
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
36 }
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
37
2908
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
38 @SuppressWarnings("unchecked")
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
39 @Override
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
40 public <T extends Op> T lookup(Class<T> clazz) {
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
41 if (clazz == CanonicalizerOp.class) {
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
42 return (T) CANONICALIZER;
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
43 }
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
44 return super.lookup(clazz);
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
45 }
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
46
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
47 private static class FloatDivCanonicalizerOp implements CanonicalizerOp {
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
48 @Override
3490
ce7cf6d16b38 Reintroduce Conditional (IfOp) using the new infrastructure, fix the Cmov support in the backend, use x86 cmov when possible, make it work with floating point comparison conditions, make MaterializeNode a subclass of Conditional, fix nasty bug related to introducing LIR jumps in an existing LIRBlock in MaterializeNode/Conditional
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2908
diff changeset
49 public Node canonical(Node node, NotifyReProcess reProcess) {
2908
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
50 FloatDiv div = (FloatDiv) node;
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
51 Value x = div.x();
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
52 Value y = div.y();
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
53 if (x.isConstant() && y.isConstant()) {
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
54 CiKind kind = div.kind;
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
55 Graph graph = div.graph();
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
56 if (kind == CiKind.Float) {
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
57 return Constant.forFloat(x.asConstant().asFloat() / y.asConstant().asFloat(), graph);
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
58 } else {
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
59 assert kind == CiKind.Double;
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
60 return Constant.forDouble(x.asConstant().asDouble() / y.asConstant().asDouble(), graph);
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
61 }
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
62 }
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
63 return div;
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
64 }
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
65 }
d5f6a22dd959 Canonicalization of FloatArithmetic nodes
Gilles Duboscq <gilles.duboscq@oracle.com>
parents: 2899
diff changeset
66
2876
7d7cf33f8466 Subclasses for arithmetic
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
diff changeset
67 }