summaryrefslogtreecommitdiff
path: root/deps/v8/src/crankshaft/hydrogen-instructions.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/crankshaft/hydrogen-instructions.cc')
-rw-r--r--deps/v8/src/crankshaft/hydrogen-instructions.cc30
1 files changed, 14 insertions, 16 deletions
diff --git a/deps/v8/src/crankshaft/hydrogen-instructions.cc b/deps/v8/src/crankshaft/hydrogen-instructions.cc
index 1e49202fe0..e2e026fb5f 100644
--- a/deps/v8/src/crankshaft/hydrogen-instructions.cc
+++ b/deps/v8/src/crankshaft/hydrogen-instructions.cc
@@ -776,7 +776,6 @@ bool HInstruction::CanDeoptimize() {
case HValue::kBlockEntry:
case HValue::kBoundsCheckBaseIndexInformation:
case HValue::kCallFunction:
- case HValue::kCallNew:
case HValue::kCallNewArray:
case HValue::kCallStub:
case HValue::kCapturedObject:
@@ -803,8 +802,6 @@ bool HInstruction::CanDeoptimize() {
case HValue::kHasInstanceTypeAndBranch:
case HValue::kInnerAllocatedObject:
case HValue::kInstanceOf:
- case HValue::kIsConstructCallAndBranch:
- case HValue::kHasInPrototypeChainAndBranch:
case HValue::kIsSmiAndBranch:
case HValue::kIsStringAndBranch:
case HValue::kIsUndetectableAndBranch:
@@ -819,7 +816,6 @@ bool HInstruction::CanDeoptimize() {
case HValue::kParameter:
case HValue::kPhi:
case HValue::kPushArguments:
- case HValue::kRegExpLiteral:
case HValue::kReturn:
case HValue::kSeqStringGetChar:
case HValue::kStoreCodeEntry:
@@ -853,11 +849,11 @@ bool HInstruction::CanDeoptimize() {
case HValue::kCheckSmi:
case HValue::kCheckValue:
case HValue::kClampToUint8:
- case HValue::kDateField:
case HValue::kDeoptimize:
case HValue::kDiv:
case HValue::kForInCacheArray:
case HValue::kForInPrepareMap:
+ case HValue::kHasInPrototypeChainAndBranch:
case HValue::kInvokeFunction:
case HValue::kLoadContextSlot:
case HValue::kLoadFunctionPrototype:
@@ -1526,7 +1522,7 @@ HValue* HChange::Canonicalize() {
HValue* HWrapReceiver::Canonicalize() {
if (HasNoUses()) return NULL;
- if (receiver()->type().IsJSObject()) {
+ if (receiver()->type().IsJSReceiver()) {
return receiver();
}
return this;
@@ -1622,7 +1618,7 @@ HValue* HUnaryMathOperation::Canonicalize() {
HValue* HCheckInstanceType::Canonicalize() {
- if ((check_ == IS_SPEC_OBJECT && value()->type().IsJSObject()) ||
+ if ((check_ == IS_JS_RECEIVER && value()->type().IsJSReceiver()) ||
(check_ == IS_JS_ARRAY && value()->type().IsJSArray()) ||
(check_ == IS_STRING && value()->type().IsString())) {
return value();
@@ -1641,9 +1637,9 @@ void HCheckInstanceType::GetCheckInterval(InstanceType* first,
InstanceType* last) {
DCHECK(is_interval_check());
switch (check_) {
- case IS_SPEC_OBJECT:
- *first = FIRST_SPEC_OBJECT_TYPE;
- *last = LAST_SPEC_OBJECT_TYPE;
+ case IS_JS_RECEIVER:
+ *first = FIRST_JS_RECEIVER_TYPE;
+ *last = LAST_JS_RECEIVER_TYPE;
return;
case IS_JS_ARRAY:
*first = *last = JS_ARRAY_TYPE;
@@ -1718,7 +1714,7 @@ HValue* HCheckValue::Canonicalize() {
const char* HCheckInstanceType::GetCheckName() const {
switch (check_) {
- case IS_SPEC_OBJECT: return "object";
+ case IS_JS_RECEIVER: return "object";
case IS_JS_ARRAY: return "array";
case IS_JS_DATE:
return "date";
@@ -3278,7 +3274,7 @@ bool HIsStringAndBranch::KnownSuccessorBlock(HBasicBlock** block) {
value()->type().IsNull() ||
value()->type().IsBoolean() ||
value()->type().IsUndefined() ||
- value()->type().IsJSObject()) {
+ value()->type().IsJSReceiver()) {
*block = SecondSuccessor();
return true;
}
@@ -4081,11 +4077,13 @@ HInstruction* HUnaryMathOperation::New(Isolate* isolate, Zone* zone,
}
switch (op) {
case kMathExp:
- return H_CONSTANT_DOUBLE(fast_exp(d));
+ lazily_initialize_fast_exp(isolate);
+ return H_CONSTANT_DOUBLE(fast_exp(d, isolate));
case kMathLog:
return H_CONSTANT_DOUBLE(std::log(d));
case kMathSqrt:
- return H_CONSTANT_DOUBLE(fast_sqrt(d));
+ lazily_initialize_fast_sqrt(isolate);
+ return H_CONSTANT_DOUBLE(fast_sqrt(d, isolate));
case kMathPowHalf:
return H_CONSTANT_DOUBLE(power_double_double(d, 0.5));
case kMathAbs:
@@ -4157,8 +4155,8 @@ HInstruction* HPower::New(Isolate* isolate, Zone* zone, HValue* context,
HConstant* c_left = HConstant::cast(left);
HConstant* c_right = HConstant::cast(right);
if (c_left->HasNumberValue() && c_right->HasNumberValue()) {
- double result = power_helper(c_left->DoubleValue(),
- c_right->DoubleValue());
+ double result =
+ power_helper(isolate, c_left->DoubleValue(), c_right->DoubleValue());
return H_CONSTANT_DOUBLE(std::isnan(result)
? std::numeric_limits<double>::quiet_NaN()
: result);