Reviewers: jarin,

Description:
[turbofan] Work-around untagged result of CompareIC in pointer maps.

BUG=chromium:469089
LOG=n
[email protected]

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

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

Affected files (+40, -25 lines):
  M src/compiler/arm/linkage-arm.cc
  M src/compiler/arm64/linkage-arm64.cc
  M src/compiler/ia32/linkage-ia32.cc
  M src/compiler/js-generic-lowering.cc
  M src/compiler/linkage.h
  M src/compiler/linkage.cc
  M src/compiler/linkage-impl.h
  M src/compiler/mips/linkage-mips.cc
  M src/compiler/mips64/linkage-mips64.cc
  M src/compiler/ppc/linkage-ppc.cc
  M src/compiler/x64/linkage-x64.cc
  A + test/mjsunit/compiler/regress-469089.js


Index: src/compiler/arm/linkage-arm.cc
diff --git a/src/compiler/arm/linkage-arm.cc b/src/compiler/arm/linkage-arm.cc index 57590d3e5b9c05ccaf706a94f7b8a8c226f3e150..2b1faa2aca27ba3aa2b6fc86f3710532fd8f5e58 100644
--- a/src/compiler/arm/linkage-arm.cc
+++ b/src/compiler/arm/linkage-arm.cc
@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   return LH::GetStubCallDescriptor(isolate, zone, descriptor,
- stack_parameter_count, flags, properties); + stack_parameter_count, flags, properties,
+                                   return_type);
 }


Index: src/compiler/arm64/linkage-arm64.cc
diff --git a/src/compiler/arm64/linkage-arm64.cc b/src/compiler/arm64/linkage-arm64.cc index 57945fd77fcaeee49e5d84ae7e0d3e39da7ebcd7..745eb5cde694cc676552b9f32cb42cd84e33ea87 100644
--- a/src/compiler/arm64/linkage-arm64.cc
+++ b/src/compiler/arm64/linkage-arm64.cc
@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   return LH::GetStubCallDescriptor(isolate, zone, descriptor,
- stack_parameter_count, flags, properties); + stack_parameter_count, flags, properties,
+                                   return_type);
 }


Index: src/compiler/ia32/linkage-ia32.cc
diff --git a/src/compiler/ia32/linkage-ia32.cc b/src/compiler/ia32/linkage-ia32.cc index 19dbc43f200eca7faac8eee6cbf88837ae5ebcbf..bfe201bf6fcbdbd6a963a28113a2a2b02e7f1910 100644
--- a/src/compiler/ia32/linkage-ia32.cc
+++ b/src/compiler/ia32/linkage-ia32.cc
@@ -46,9 +46,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   return LH::GetStubCallDescriptor(isolate, zone, descriptor,
- stack_parameter_count, flags, properties); + stack_parameter_count, flags, properties,
+                                   return_type);
 }


Index: src/compiler/js-generic-lowering.cc
diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc index 6ed6eff1834154a72f5f82dd5dab6c74ad99e49c..c90bcdd8d6eb5f1cb9e5ea4c9431527e5d2f8ebb 100644
--- a/src/compiler/js-generic-lowering.cc
+++ b/src/compiler/js-generic-lowering.cc
@@ -122,7 +122,8 @@ void JSGenericLowering::ReplaceWithCompareIC(Node* node, Token::Value token) {
   Callable callable = CodeFactory::CompareIC(isolate(), token);
   CallDescriptor* desc_compare = Linkage::GetStubCallDescriptor(
       isolate(), zone(), callable.descriptor(), 0,
-      CallDescriptor::kPatchableCallSiteWithNop | FlagsForNode(node));
+      CallDescriptor::kPatchableCallSiteWithNop | FlagsForNode(node),
+      Operator::kNoProperties, kMachInt32);

   // Create a new call node asking a CompareIC for help.
   NodeVector inputs(zone());
Index: src/compiler/linkage-impl.h
diff --git a/src/compiler/linkage-impl.h b/src/compiler/linkage-impl.h
index a1137d76e678691781200cf81aee40b58d824328..624d56aa977f3e51d3578900aa4b85659d2a1568 100644
--- a/src/compiler/linkage-impl.h
+++ b/src/compiler/linkage-impl.h
@@ -138,11 +138,13 @@ class LinkageHelper {
   }


+  // TODO(all): Add support for return representations/locations to
+  // CallInterfaceDescriptor.
   // TODO(turbofan): cache call descriptors for code stub calls.
   static CallDescriptor* GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
       int stack_parameter_count, CallDescriptor::Flags flags,
-      Operator::Properties properties) {
+      Operator::Properties properties, MachineType return_type) {
     const int register_parameter_count =
         descriptor.GetEnvironmentParameterCount();
     const int js_parameter_count =
@@ -157,7 +159,7 @@ class LinkageHelper {

     // Add return location.
     AddReturnLocations(&locations);
-    types.AddReturn(kMachAnyTagged);
+    types.AddReturn(return_type);

     // Add parameters in registers and on the stack.
     for (int i = 0; i < js_parameter_count; i++) {
Index: src/compiler/linkage.cc
diff --git a/src/compiler/linkage.cc b/src/compiler/linkage.cc
index 81fde6b0d5da70b50a9ecb56c47c514111098ccc..72b7dafe9801531c85ab648bf06f843fc4dee2d2 100644
--- a/src/compiler/linkage.cc
+++ b/src/compiler/linkage.cc
@@ -175,7 +175,7 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   UNIMPLEMENTED();
   return NULL;
 }
Index: src/compiler/linkage.h
diff --git a/src/compiler/linkage.h b/src/compiler/linkage.h
index a4b587dc4499407ec711d7896d70ed21d9b94736..c1f37626550978733f8fc6443e04960b6ed3a2fb 100644
--- a/src/compiler/linkage.h
+++ b/src/compiler/linkage.h
@@ -191,7 +191,8 @@ class Linkage : public ZoneObject {
   static CallDescriptor* GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
       int stack_parameter_count, CallDescriptor::Flags flags,
-      Operator::Properties properties = Operator::kNoProperties);
+      Operator::Properties properties = Operator::kNoProperties,
+      MachineType return_type = kMachAnyTagged);

   // Creates a call descriptor for simplified C calls that is appropriate
// for the host platform. This simplified calling convention only supports
Index: src/compiler/mips/linkage-mips.cc
diff --git a/src/compiler/mips/linkage-mips.cc b/src/compiler/mips/linkage-mips.cc index cbb59d3a1041f45d2e1cb14205c68baf124084bb..9480b73eae8fb786431256ee44d75f57eb4ad610 100644
--- a/src/compiler/mips/linkage-mips.cc
+++ b/src/compiler/mips/linkage-mips.cc
@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   return LH::GetStubCallDescriptor(isolate, zone, descriptor,
- stack_parameter_count, flags, properties); + stack_parameter_count, flags, properties,
+                                   return_type);
 }


Index: src/compiler/mips64/linkage-mips64.cc
diff --git a/src/compiler/mips64/linkage-mips64.cc b/src/compiler/mips64/linkage-mips64.cc index 273054e20630f2f5caec2a5fb4351e223dcb68b1..6fed0617d05518223bee6d122193fd39c8565592 100644
--- a/src/compiler/mips64/linkage-mips64.cc
+++ b/src/compiler/mips64/linkage-mips64.cc
@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   return LH::GetStubCallDescriptor(isolate, zone, descriptor,
- stack_parameter_count, flags, properties); + stack_parameter_count, flags, properties,
+                                   return_type);
 }


Index: src/compiler/ppc/linkage-ppc.cc
diff --git a/src/compiler/ppc/linkage-ppc.cc b/src/compiler/ppc/linkage-ppc.cc index 38117222a9a0d9e2ef398d0aefeb072fc48ae590..39ebb63efa3b59a7dccac5b604521809606d2f3b 100644
--- a/src/compiler/ppc/linkage-ppc.cc
+++ b/src/compiler/ppc/linkage-ppc.cc
@@ -53,9 +53,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   return LH::GetStubCallDescriptor(isolate, zone, descriptor,
- stack_parameter_count, flags, properties); + stack_parameter_count, flags, properties,
+                                   return_type);
 }


Index: src/compiler/x64/linkage-x64.cc
diff --git a/src/compiler/x64/linkage-x64.cc b/src/compiler/x64/linkage-x64.cc index 802edf35547098f8ccb1c3d49593e67d9d53a3fa..1b840a995d8003a0dbe1c763cdb0502395f53783 100644
--- a/src/compiler/x64/linkage-x64.cc
+++ b/src/compiler/x64/linkage-x64.cc
@@ -65,9 +65,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
 CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
     int stack_parameter_count, CallDescriptor::Flags flags,
-    Operator::Properties properties) {
+    Operator::Properties properties, MachineType return_type) {
   return LH::GetStubCallDescriptor(isolate, zone, descriptor,
- stack_parameter_count, flags, properties); + stack_parameter_count, flags, properties,
+                                   return_type);
 }


Index: test/mjsunit/compiler/regress-469089.js
diff --git a/test/mjsunit/regress/regress-crbug-455644.js b/test/mjsunit/compiler/regress-469089.js
similarity index 52%
copy from test/mjsunit/regress/regress-crbug-455644.js
copy to test/mjsunit/compiler/regress-469089.js
index 4993d857a89f620df2b0d1f9813a2a382a77bd8d..6aff2b720305290570124cec0dd7a4a959f05694 100644
--- a/test/mjsunit/regress/regress-crbug-455644.js
+++ b/test/mjsunit/compiler/regress-469089.js
@@ -2,11 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.

-(function f() {
-  do { return 23; } while(false);
-  with (0) {
-    try {
-      return 42;
-    } finally {}
+// Flags: --expose-gc
+
+(function() {
+  var __v_6 = false;
+  function f(val, idx) {
+    if (idx === 1) {
+      gc();
+      __v_6 = (val === 0);
+    }
   }
+  f(.1, 1);
 })();


--
--
v8-dev mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to