[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}
This commit is contained in:
parent
386dee8552
commit
d5893cad6b
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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());
|
||||
|
@ -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++) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
16
test/mjsunit/compiler/regress-469089.js
Normal file
16
test/mjsunit/compiler/regress-469089.js
Normal file
@ -0,0 +1,16 @@
|
||||
// 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);
|
||||
})();
|
Loading…
Reference in New Issue
Block a user