hotspot/src/share/vm/opto/macro.cpp
changeset 767 64fb1fd7186d
parent 762 1b26adb5fea1
child 769 78e5090c7a20
--- a/hotspot/src/share/vm/opto/macro.cpp	Mon Jun 23 18:21:18 2008 -0700
+++ b/hotspot/src/share/vm/opto/macro.cpp	Tue Jun 24 10:43:29 2008 -0700
@@ -598,7 +598,7 @@
           field_type = TypeOopPtr::make_from_klass(elem_type->as_klass());
         }
         if (UseCompressedOops) {
-          field_type = field_type->is_oopptr()->make_narrowoop();
+          field_type = field_type->make_narrowoop();
           basic_elem_type = T_NARROWOOP;
         }
       } else {
@@ -666,9 +666,11 @@
       if (UseCompressedOops && field_type->isa_narrowoop()) {
         // Enable "DecodeN(EncodeP(Allocate)) --> Allocate" transformation
         // to be able scalar replace the allocation.
-        _igvn.set_delay_transform(false);
-        field_val = DecodeNNode::decode(&_igvn, field_val);
-        _igvn.set_delay_transform(true);
+        if (field_val->is_EncodeP()) {
+          field_val = field_val->in(1);
+        } else {
+          field_val = transform_later(new (C, 2) DecodeNNode(field_val, field_val->bottom_type()->make_ptr()));
+        }
       }
       sfpt->add_req(field_val);
     }