diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ExactClassValueProfile.java @ 20075:405257253e59

ExactClassValueProfile: do not create isInstance check for generic (object) profiles
author Lukas Stadler <lukas.stadler@oracle.com>
date Mon, 30 Mar 2015 14:01:04 +0200
parents 1e542561783e
children
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ExactClassValueProfile.java	Mon Mar 30 13:59:59 2015 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ExactClassValueProfile.java	Mon Mar 30 14:01:04 2015 +0200
@@ -40,14 +40,16 @@
     @SuppressWarnings("unchecked")
     @Override
     public <T> T profile(T value) {
-        if (cachedClass != null && cachedClass.isInstance(value)) {
-            return (T) cachedClass.cast(value);
-        } else {
-            CompilerDirectives.transferToInterpreterAndInvalidate();
-            if (cachedClass == null && value != null) {
-                cachedClass = value.getClass();
+        if (cachedClass != Object.class) {
+            if (cachedClass != null && cachedClass.isInstance(value)) {
+                return (T) cachedClass.cast(value);
             } else {
-                cachedClass = Object.class;
+                CompilerDirectives.transferToInterpreterAndInvalidate();
+                if (cachedClass == null && value != null) {
+                    cachedClass = value.getClass();
+                } else {
+                    cachedClass = Object.class;
+                }
             }
         }
         return value;