annotate jvmci/jdk.vm.ci.meta/src/jdk/vm/ci/meta/Value.java @ 22672:1bbd4a7c274b

Rename jdk.internal.jvmci to jdk.vm.ci
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Thu, 08 Oct 2015 17:28:41 -0700
parents jvmci/jdk.internal.jvmci.meta/src/jdk/internal/jvmci/meta/Value.java@df053711614b
children 9ed5b586018b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
1 /*
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
2 * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
4 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
8 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
13 * accompanied this code).
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
14 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
18 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
21 * questions.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
22 */
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22533
diff changeset
23 package jdk.vm.ci.meta;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
24
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
25 /**
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
26 * Abstract base class for values.
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
27 */
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
28 public abstract class Value {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
29
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
30 public static final Value[] NO_VALUES = new Value[0];
21728
99fe8116f3e8 Make shared NO_VALUES array
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21556
diff changeset
31
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
32 public static final AllocatableValue ILLEGAL = new IllegalValue();
21729
e7f5ddef438d Make illegal value a nested class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21728
diff changeset
33
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
34 private static final class IllegalValue extends AllocatableValue {
21729
e7f5ddef438d Make illegal value a nested class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21728
diff changeset
35 private IllegalValue() {
e7f5ddef438d Make illegal value a nested class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21728
diff changeset
36 super(LIRKind.Illegal);
e7f5ddef438d Make illegal value a nested class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21728
diff changeset
37 }
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6477
diff changeset
38
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
39 @Override
4169
f5328dda9714 Initial commit of SSA-based spill-all register assignment
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4142
diff changeset
40 public String toString() {
f5328dda9714 Initial commit of SSA-based spill-all register assignment
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4142
diff changeset
41 return "-";
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
42 }
19699
50b6f616b3c7 Use ILLEGAL.equals(value) in ValueUtil.isIllegal
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18584
diff changeset
43
50b6f616b3c7 Use ILLEGAL.equals(value) in ValueUtil.isIllegal
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18584
diff changeset
44 @Override
50b6f616b3c7 Use ILLEGAL.equals(value) in ValueUtil.isIllegal
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18584
diff changeset
45 public boolean equals(Object other) {
19752
edf663acfb3f Do not rely on object identity when comparing Value.ILLEGAL
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 19699
diff changeset
46 // Due to de-serialization this object may exist multiple times. So we compare classes
edf663acfb3f Do not rely on object identity when comparing Value.ILLEGAL
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 19699
diff changeset
47 // instead of the individual objects. (This anonymous class has always the same meaning)
21729
e7f5ddef438d Make illegal value a nested class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21728
diff changeset
48 return other instanceof IllegalValue;
19699
50b6f616b3c7 Use ILLEGAL.equals(value) in ValueUtil.isIllegal
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18584
diff changeset
49 }
21729
e7f5ddef438d Make illegal value a nested class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21728
diff changeset
50 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
51
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
52 private final LIRKind lirKind;
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
53
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
54 /**
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
55 * Initializes a new value of the specified kind.
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
56 *
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
57 * @param lirKind the kind
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
58 */
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
59 protected Value(LIRKind lirKind) {
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
60 this.lirKind = lirKind;
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
61 }
22402
37ec3ff2f8e0 Remove unused interface KindProvider.
Roland Schatz <roland.schatz@oracle.com>
parents: 22054
diff changeset
62
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
63 /**
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
64 * Returns a String representation of the kind, which should be the end of all
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
65 * {@link #toString()} implementation of subclasses.
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
66 */
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
67 protected final String getKindSuffix() {
22533
df053711614b Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22504
diff changeset
68 return "|" + getPlatformKind().getTypeChar();
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
69 }
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
70
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
71 public final LIRKind getLIRKind() {
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
72 return lirKind;
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
73 }
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 15453
diff changeset
74
9422
149fe42411df Use platform specific kind in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 9296
diff changeset
75 /**
149fe42411df Use platform specific kind in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 9296
diff changeset
76 * Returns the platform specific kind used to store this value.
149fe42411df Use platform specific kind in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 9296
diff changeset
77 */
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
78 public final PlatformKind getPlatformKind() {
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
79 return lirKind.getPlatformKind();
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
80 }
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
81
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
82 @Override
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
83 public int hashCode() {
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
84 return 41 + lirKind.hashCode();
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
85 }
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
86
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
87 @Override
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
88 public boolean equals(Object obj) {
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
89 if (obj instanceof Value) {
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
90 Value that = (Value) obj;
22533
df053711614b Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22504
diff changeset
91 return lirKind.equals(that.lirKind);
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
92 }
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
93 return false;
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
94 }
16735
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
95
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
96 /**
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
97 * Checks if this value is identical to {@code other}.
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
98 *
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
99 * Warning: Use with caution! Usually equivalence {@link #equals(Object)} is sufficient and
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
100 * should be used.
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
101 */
22504
943c2bf064fa Collapse Value and AbstractValue into a single abstract base class.
Roland Schatz <roland.schatz@oracle.com>
parents: 22402
diff changeset
102 public final boolean identityEquals(Value other) {
16735
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
103 return this == other;
55c59139cc57 Add identityEquals to Value.
Josef Eisl <josef.eisl@jku.at>
parents: 16094
diff changeset
104 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
105 }