hotspot/src/share/vm/opto/macroArrayCopy.cpp
changeset 26180 2fbed11af70e
parent 26166 4b49fd58bbd9
child 26435 b446202ac824
--- a/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Tue Aug 19 16:20:18 2014 -0700
+++ b/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Tue Aug 19 17:23:38 2014 +0200
@@ -503,14 +503,8 @@
     // (Actually, we don't move raw bits only; the GC requires card marks.)
 
     // Get the klass* for both src and dest
-    Node* k_adr =  new AddPNode(src, src, MakeConX(oopDesc::klass_offset_in_bytes()));
-    transform_later(k_adr);
-    Node* src_klass  = LoadKlassNode::make(_igvn, C->immutable_memory(), k_adr, TypeInstPtr::KLASS);
-    transform_later(src_klass);
-    k_adr =  new AddPNode(dest, dest, MakeConX(oopDesc::klass_offset_in_bytes()));
-    transform_later(k_adr);
-    Node* dest_klass  = LoadKlassNode::make(_igvn, C->immutable_memory(), k_adr, TypeInstPtr::KLASS);
-    transform_later(dest_klass);
+    Node* src_klass  = ac->in(ArrayCopyNode::SrcKlass);
+    Node* dest_klass = ac->in(ArrayCopyNode::DestKlass);
 
     // Generate the subtype check.
     // This might fold up statically, or then again it might not.
@@ -1214,20 +1208,14 @@
     // generate_negative_guard(length, slow_region);
 
     // (7) src_offset + length must not exceed length of src.
-    Node* r_adr =  new AddPNode(src, src, MakeConX(arrayOopDesc::length_offset_in_bytes()));
-    transform_later(r_adr);
-    Node* alen = new LoadRangeNode(0, C->immutable_memory(), r_adr, TypeInt::POS);
-    transform_later(alen);
+    Node* alen = ac->in(ArrayCopyNode::SrcLen);
     generate_limit_guard(&ctrl,
                          src_offset, length,
                          alen,
                          slow_region);
 
     // (8) dest_offset + length must not exceed length of dest.
-    r_adr =  new AddPNode(dest, dest, MakeConX(arrayOopDesc::length_offset_in_bytes()));
-    transform_later(r_adr);
-    alen = new LoadRangeNode(0, C->immutable_memory(), r_adr, TypeInt::POS);
-    transform_later(alen);
+    alen = ac->in(ArrayCopyNode::DestLen);
     generate_limit_guard(&ctrl,
                          dest_offset, length,
                          alen,