Mercurial > hg > graal-compiler
comparison graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastSnippets.java @ 9793:b4f12c603be5
added support for the runtime to specify for each foreign call whether it is re-executable and what memory locations it kills
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 22 May 2013 16:27:25 +0200 |
parents | 19c5a07c7843 |
children | 063a712fe8d8 |
comparison
equal
deleted
inserted
replaced
9792:06dc2d2324d6 | 9793:b4f12c603be5 |
---|---|
29 import static com.oracle.graal.nodes.extended.UnsafeCastNode.*; | 29 import static com.oracle.graal.nodes.extended.UnsafeCastNode.*; |
30 import static com.oracle.graal.replacements.SnippetTemplate.*; | 30 import static com.oracle.graal.replacements.SnippetTemplate.*; |
31 import static com.oracle.graal.replacements.nodes.BranchProbabilityNode.*; | 31 import static com.oracle.graal.replacements.nodes.BranchProbabilityNode.*; |
32 | 32 |
33 import com.oracle.graal.api.code.*; | 33 import com.oracle.graal.api.code.*; |
34 import com.oracle.graal.api.meta.*; | |
34 import com.oracle.graal.debug.*; | 35 import com.oracle.graal.debug.*; |
35 import com.oracle.graal.graph.Node.NodeIntrinsic; | 36 import com.oracle.graal.graph.Node.NodeIntrinsic; |
36 import com.oracle.graal.hotspot.meta.*; | 37 import com.oracle.graal.hotspot.meta.*; |
37 import com.oracle.graal.nodes.*; | 38 import com.oracle.graal.nodes.*; |
38 import com.oracle.graal.nodes.java.*; | 39 import com.oracle.graal.nodes.java.*; |
92 public static Object checkcastPrimary(Word hub, Object object, @ConstantParameter int superCheckOffset, @ConstantParameter boolean checkNull) { | 93 public static Object checkcastPrimary(Word hub, Object object, @ConstantParameter int superCheckOffset, @ConstantParameter boolean checkNull) { |
93 if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { | 94 if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { |
94 isNull.inc(); | 95 isNull.inc(); |
95 } else { | 96 } else { |
96 Word objectHub = loadHub(object); | 97 Word objectHub = loadHub(object); |
97 if (objectHub.readWord(superCheckOffset, FINAL_LOCATION).notEqual(hub)) { | 98 if (objectHub.readWord(superCheckOffset, LocationIdentity.FINAL_LOCATION).notEqual(hub)) { |
98 displayMiss.inc(); | 99 displayMiss.inc(); |
99 DeoptimizeNode.deopt(InvalidateReprofile, ClassCastException); | 100 DeoptimizeNode.deopt(InvalidateReprofile, ClassCastException); |
100 } | 101 } |
101 displayHit.inc(); | 102 displayHit.inc(); |
102 } | 103 } |
185 } else { | 186 } else { |
186 ConstantNode[] hints = createHints(hintInfo, runtime, true, graph).hubs; | 187 ConstantNode[] hints = createHints(hintInfo, runtime, true, graph).hubs; |
187 args = new Arguments(secondary); | 188 args = new Arguments(secondary); |
188 args.add("hub", hub); | 189 args.add("hub", hub); |
189 args.add("object", object); | 190 args.add("object", object); |
190 args.addVarargs("hints", Word.class, StampFactory.forKind(wordKind()), hints); | 191 args.addVarargs("hints", Word.class, StampFactory.forKind(getWordKind()), hints); |
191 } | 192 } |
192 args.addConst("checkNull", !object.stamp().nonNull()); | 193 args.addConst("checkNull", !object.stamp().nonNull()); |
193 | 194 |
194 SnippetTemplate template = template(args); | 195 SnippetTemplate template = template(args); |
195 Debug.log("Lowering checkcast in %s: node=%s, template=%s, arguments=%s", graph, checkcast, template, args); | 196 Debug.log("Lowering checkcast in %s: node=%s, template=%s, arguments=%s", graph, checkcast, template, args); |