Mercurial > hg > truffle
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 |
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 | 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 | 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 } |