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.