Mercurial > hg > truffle
comparison graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/CheckCastSnippets.java @ 7368:f04a5e46cdd2
new facility to add branch probabilities for snippets, probabilities for frequently-used snippets
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Mon, 14 Jan 2013 16:29:08 +0100 |
parents | 2912b72d840a |
children | 4cc0efe5cffe |
comparison
equal
deleted
inserted
replaced
7367:cbcee2e1ce51 | 7368:f04a5e46cdd2 |
---|---|
23 package com.oracle.graal.hotspot.snippets; | 23 package com.oracle.graal.hotspot.snippets; |
24 | 24 |
25 import static com.oracle.graal.hotspot.snippets.HotSpotSnippetUtils.*; | 25 import static com.oracle.graal.hotspot.snippets.HotSpotSnippetUtils.*; |
26 import static com.oracle.graal.snippets.SnippetTemplate.*; | 26 import static com.oracle.graal.snippets.SnippetTemplate.*; |
27 import static com.oracle.graal.snippets.SnippetTemplate.Arguments.*; | 27 import static com.oracle.graal.snippets.SnippetTemplate.Arguments.*; |
28 import static com.oracle.graal.snippets.nodes.BranchProbabilityNode.*; | |
28 | 29 |
29 import com.oracle.graal.api.code.*; | 30 import com.oracle.graal.api.code.*; |
30 import com.oracle.graal.api.meta.*; | 31 import com.oracle.graal.api.meta.*; |
31 import com.oracle.graal.debug.*; | 32 import com.oracle.graal.debug.*; |
32 import com.oracle.graal.graph.*; | 33 import com.oracle.graal.graph.*; |
66 public static Object checkcastExact( | 67 public static Object checkcastExact( |
67 @Parameter("object") Object object, | 68 @Parameter("object") Object object, |
68 @Parameter("exactHub") Word exactHub, | 69 @Parameter("exactHub") Word exactHub, |
69 @ConstantParameter("checkNull") boolean checkNull) { | 70 @ConstantParameter("checkNull") boolean checkNull) { |
70 if (checkNull && object == null) { | 71 if (checkNull && object == null) { |
72 probability(0.1); | |
71 isNull.inc(); | 73 isNull.inc(); |
72 return object; | 74 return object; |
73 } | 75 } |
74 Word objectHub = loadHub(object); | 76 Word objectHub = loadHub(object); |
75 if (objectHub != exactHub) { | 77 if (objectHub != exactHub) { |
78 probability(0.01); | |
76 exactMiss.inc(); | 79 exactMiss.inc(); |
77 //bkpt(object, exactHub, objectHub); | 80 //bkpt(object, exactHub, objectHub); |
78 DeoptimizeNode.deopt(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.ClassCastException); | 81 DeoptimizeNode.deopt(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.ClassCastException); |
79 } | 82 } |
80 exactHit.inc(); | 83 exactHit.inc(); |