diff src/share/vm/c1/c1_GraphBuilder.cpp @ 18004:ee1c924763d2

8043546: C1 optimizes @Stable instance fields with default values Reviewed-by: kvn, jrose
author vlivanov
date Thu, 10 Jul 2014 12:04:43 -0700
parents dda2ae6f9557
children 52b4284cb496 2fd0fd493045
line wrap: on
line diff
--- a/src/share/vm/c1/c1_GraphBuilder.cpp	Wed Jul 02 22:54:18 2014 +0200
+++ b/src/share/vm/c1/c1_GraphBuilder.cpp	Thu Jul 10 12:04:43 2014 -0700
@@ -1569,6 +1569,7 @@
         default:
           constant = new Constant(as_ValueType(field_val));
         }
+        // Stable static fields are checked for non-default values in ciField::initialize_from().
       }
       if (constant != NULL) {
         push(type, append(constant));
@@ -1610,6 +1611,10 @@
             default:
               constant = new Constant(as_ValueType(field_val));
             }
+            if (FoldStableValues && field->is_stable() && field_val.is_null_or_zero()) {
+              // Stable field with default value can't be constant.
+              constant = NULL;
+            }
           } else {
             // For CallSite objects treat the target field as a compile time constant.
             if (const_oop->is_call_site()) {