Commit d5893cad authored by bmeurer's avatar bmeurer Committed by Commit bot

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

BUG=chromium:469089
LOG=n
R=jarin@chromium.org

Review URL: https://codereview.chromium.org/1026683002

Cr-Commit-Position: refs/heads/master@{#27333}
parent 386dee85
...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
return LH::GetStubCallDescriptor(isolate, zone, descriptor, return LH::GetStubCallDescriptor(isolate, zone, descriptor,
stack_parameter_count, flags, properties); stack_parameter_count, flags, properties,
return_type);
} }
......
...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
return LH::GetStubCallDescriptor(isolate, zone, descriptor, return LH::GetStubCallDescriptor(isolate, zone, descriptor,
stack_parameter_count, flags, properties); stack_parameter_count, flags, properties,
return_type);
} }
......
...@@ -46,9 +46,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -46,9 +46,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
return LH::GetStubCallDescriptor(isolate, zone, descriptor, return LH::GetStubCallDescriptor(isolate, zone, descriptor,
stack_parameter_count, flags, properties); stack_parameter_count, flags, properties,
return_type);
} }
......
...@@ -122,7 +122,8 @@ void JSGenericLowering::ReplaceWithCompareIC(Node* node, Token::Value token) { ...@@ -122,7 +122,8 @@ void JSGenericLowering::ReplaceWithCompareIC(Node* node, Token::Value token) {
Callable callable = CodeFactory::CompareIC(isolate(), token); Callable callable = CodeFactory::CompareIC(isolate(), token);
CallDescriptor* desc_compare = Linkage::GetStubCallDescriptor( CallDescriptor* desc_compare = Linkage::GetStubCallDescriptor(
isolate(), zone(), callable.descriptor(), 0, 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. // Create a new call node asking a CompareIC for help.
NodeVector inputs(zone()); NodeVector inputs(zone());
......
...@@ -138,11 +138,13 @@ class LinkageHelper { ...@@ -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. // TODO(turbofan): cache call descriptors for code stub calls.
static CallDescriptor* GetStubCallDescriptor( static CallDescriptor* GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
const int register_parameter_count = const int register_parameter_count =
descriptor.GetEnvironmentParameterCount(); descriptor.GetEnvironmentParameterCount();
const int js_parameter_count = const int js_parameter_count =
...@@ -157,7 +159,7 @@ class LinkageHelper { ...@@ -157,7 +159,7 @@ class LinkageHelper {
// Add return location. // Add return location.
AddReturnLocations(&locations); AddReturnLocations(&locations);
types.AddReturn(kMachAnyTagged); types.AddReturn(return_type);
// Add parameters in registers and on the stack. // Add parameters in registers and on the stack.
for (int i = 0; i < js_parameter_count; i++) { for (int i = 0; i < js_parameter_count; i++) {
......
...@@ -175,7 +175,7 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -175,7 +175,7 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
UNIMPLEMENTED(); UNIMPLEMENTED();
return NULL; return NULL;
} }
......
...@@ -191,7 +191,8 @@ class Linkage : public ZoneObject { ...@@ -191,7 +191,8 @@ class Linkage : public ZoneObject {
static CallDescriptor* GetStubCallDescriptor( static CallDescriptor* GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, 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 // Creates a call descriptor for simplified C calls that is appropriate
// for the host platform. This simplified calling convention only supports // for the host platform. This simplified calling convention only supports
......
...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
return LH::GetStubCallDescriptor(isolate, zone, descriptor, return LH::GetStubCallDescriptor(isolate, zone, descriptor,
stack_parameter_count, flags, properties); stack_parameter_count, flags, properties,
return_type);
} }
......
...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -51,9 +51,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
return LH::GetStubCallDescriptor(isolate, zone, descriptor, return LH::GetStubCallDescriptor(isolate, zone, descriptor,
stack_parameter_count, flags, properties); stack_parameter_count, flags, properties,
return_type);
} }
......
...@@ -53,9 +53,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -53,9 +53,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
return LH::GetStubCallDescriptor(isolate, zone, descriptor, return LH::GetStubCallDescriptor(isolate, zone, descriptor,
stack_parameter_count, flags, properties); stack_parameter_count, flags, properties,
return_type);
} }
......
...@@ -65,9 +65,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor( ...@@ -65,9 +65,10 @@ CallDescriptor* Linkage::GetRuntimeCallDescriptor(
CallDescriptor* Linkage::GetStubCallDescriptor( CallDescriptor* Linkage::GetStubCallDescriptor(
Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor, Isolate* isolate, Zone* zone, const CallInterfaceDescriptor& descriptor,
int stack_parameter_count, CallDescriptor::Flags flags, int stack_parameter_count, CallDescriptor::Flags flags,
Operator::Properties properties) { Operator::Properties properties, MachineType return_type) {
return LH::GetStubCallDescriptor(isolate, zone, descriptor, return LH::GetStubCallDescriptor(isolate, zone, descriptor,
stack_parameter_count, flags, properties); stack_parameter_count, flags, properties,
return_type);
} }
......
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --expose-gc
(function() {
var __v_6 = false;
function f(val, idx) {
if (idx === 1) {
gc();
__v_6 = (val === 0);
}
}
f(.1, 1);
})();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment