Reviewers: Benedikt Meurer, balazs.kilvady, akos.palfi.imgtec, dusmil.imgtec, danno,

Message:
PTAL.

Description:
MIPS: [turbofan] Load immortal heap objects from the heap roots.

Port 5d2de78a771b8ff1ac59fbdf634bffd01709b554

BUG=

Please review this at https://codereview.chromium.org/1085693003/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+12, -22 lines):
  M src/compiler/mips/code-generator-mips.cc
  M src/compiler/mips64/code-generator-mips64.cc


Index: src/compiler/mips/code-generator-mips.cc
diff --git a/src/compiler/mips/code-generator-mips.cc b/src/compiler/mips/code-generator-mips.cc index 7647d24ae98508744090b62b5c2e4a2b85abc10f..98115b46e72f8646c06a51256661d19da7e22cfb 100644
--- a/src/compiler/mips/code-generator-mips.cc
+++ b/src/compiler/mips/code-generator-mips.cc
@@ -1140,17 +1140,12 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
           break;
         case Constant::kHeapObject: {
           Handle<HeapObject> src_object = src.ToHeapObject();
-          if (info()->IsOptimizing() &&
-              src_object.is_identical_to(info()->context())) {
-            // Loading the context from the frame is way cheaper than
-            // materializing the actual context heap object address.
- __ lw(dst, MemOperand(fp, StandardFrameConstants::kContextOffset));
-          } else if (info()->IsOptimizing() &&
-                     src_object.is_identical_to(info()->closure())) {
-            // Loading the JSFunction from the frame is way cheaper than
-            // materializing the actual JSFunction heap object address.
-            __ lw(dst,
- MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
+          Heap::RootListIndex index;
+          int offset;
+          if (IsMaterializableFromFrame(src_object, &offset)) {
+            __ lw(dst, MemOperand(fp, offset));
+          } else if (IsMaterializableFromRoot(src_object, &index)) {
+            __ LoadRoot(dst, index);
           } else {
             __ li(dst, src_object);
           }
Index: src/compiler/mips64/code-generator-mips64.cc
diff --git a/src/compiler/mips64/code-generator-mips64.cc b/src/compiler/mips64/code-generator-mips64.cc index 756cb632da2f59de19c2827aa70039b1618144e1..643483a4d01d8c39d4735270b03e96c701e0ffd6 100644
--- a/src/compiler/mips64/code-generator-mips64.cc
+++ b/src/compiler/mips64/code-generator-mips64.cc
@@ -1206,17 +1206,12 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
           break;
         case Constant::kHeapObject: {
           Handle<HeapObject> src_object = src.ToHeapObject();
-          if (info()->IsOptimizing() &&
-              src_object.is_identical_to(info()->context())) {
-            // Loading the context from the frame is way cheaper than
-            // materializing the actual context heap object address.
- __ ld(dst, MemOperand(fp, StandardFrameConstants::kContextOffset));
-          } else if (info()->IsOptimizing() &&
-                     src_object.is_identical_to(info()->closure())) {
-            // Loading the JSFunction from the frame is way cheaper than
-            // materializing the actual JSFunction heap object address.
-            __ ld(dst,
- MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
+          Heap::RootListIndex index;
+          int offset;
+          if (IsMaterializableFromFrame(src_object, &offset)) {
+            __ ld(dst, MemOperand(fp, offset));
+          } else if (IsMaterializableFromRoot(src_object, &index)) {
+            __ LoadRoot(dst, index);
           } else {
             __ li(dst, src_object);
           }


--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to