| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 50e3b2124df60ddc29331f0d9d4feb8f753c6a54..3d3575fb5d4041d5c8113b4edca319156dbc85a7 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -10488,16 +10488,21 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| return AddUncasted<HInvokeFunction>(function, 2);
|
| }
|
|
|
| - // Fast path for empty constant strings.
|
| - if (left->IsConstant() &&
|
| - HConstant::cast(left)->HasStringValue() &&
|
| - HConstant::cast(left)->StringValue()->length() == 0) {
|
| - return right;
|
| - }
|
| - if (right->IsConstant() &&
|
| - HConstant::cast(right)->HasStringValue() &&
|
| - HConstant::cast(right)->StringValue()->length() == 0) {
|
| - return left;
|
| + // Fast paths for empty constant strings.
|
| + Handle<String> left_string =
|
| + left->IsConstant() && HConstant::cast(left)->HasStringValue()
|
| + ? HConstant::cast(left)->StringValue()
|
| + : Handle<String>();
|
| + Handle<String> right_string =
|
| + right->IsConstant() && HConstant::cast(right)->HasStringValue()
|
| + ? HConstant::cast(right)->StringValue()
|
| + : Handle<String>();
|
| + if (!left_string.is_null() && left_string->length() == 0) return right;
|
| + if (!right_string.is_null() && right_string->length() == 0) return left;
|
| + if (!left_string.is_null() && !right_string.is_null()) {
|
| + return AddUncasted<HStringAdd>(
|
| + left, right, allocation_mode.GetPretenureMode(),
|
| + STRING_ADD_CHECK_NONE, allocation_mode.feedback_site());
|
| }
|
|
|
| // Register the dependent code with the allocation site.
|
|
|