Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(254)

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 2448463002: [regexp] Remove unused code (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/crankshaft/hydrogen.h ('k') | src/full-codegen/full-codegen.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/allocation-site-scopes.h" 10 #include "src/allocation-site-scopes.h"
(...skipping 1826 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 JSIteratorResult::kValueOffset), 1837 JSIteratorResult::kValueOffset),
1838 value); 1838 value);
1839 Add<HStoreNamedField>(result, HObjectAccess::ForObservableJSObjectOffset( 1839 Add<HStoreNamedField>(result, HObjectAccess::ForObservableJSObjectOffset(
1840 JSIteratorResult::kDoneOffset), 1840 JSIteratorResult::kDoneOffset),
1841 done); 1841 done);
1842 STATIC_ASSERT(JSIteratorResult::kSize == 5 * kPointerSize); 1842 STATIC_ASSERT(JSIteratorResult::kSize == 5 * kPointerSize);
1843 return result; 1843 return result;
1844 } 1844 }
1845 1845
1846 1846
1847 HValue* HGraphBuilder::BuildRegExpConstructResult(HValue* length,
1848 HValue* index,
1849 HValue* input) {
1850 NoObservableSideEffectsScope scope(this);
1851 HConstant* max_length = Add<HConstant>(JSArray::kInitialMaxFastElementArray);
1852 Add<HBoundsCheck>(length, max_length);
1853
1854 // Generate size calculation code here in order to make it dominate
1855 // the JSRegExpResult allocation.
1856 ElementsKind elements_kind = FAST_ELEMENTS;
1857 HValue* size = BuildCalculateElementsSize(elements_kind, length);
1858
1859 // Allocate the JSRegExpResult and the FixedArray in one step.
1860 HValue* result =
1861 Add<HAllocate>(Add<HConstant>(JSRegExpResult::kSize), HType::JSArray(),
1862 NOT_TENURED, JS_ARRAY_TYPE, graph()->GetConstant0());
1863
1864 // Initialize the JSRegExpResult header.
1865 HValue* native_context = Add<HLoadNamedField>(
1866 context(), nullptr,
1867 HObjectAccess::ForContextSlot(Context::NATIVE_CONTEXT_INDEX));
1868 Add<HStoreNamedField>(
1869 result, HObjectAccess::ForMap(),
1870 Add<HLoadNamedField>(
1871 native_context, nullptr,
1872 HObjectAccess::ForContextSlot(Context::REGEXP_RESULT_MAP_INDEX)));
1873 HConstant* empty_fixed_array =
1874 Add<HConstant>(isolate()->factory()->empty_fixed_array());
1875 Add<HStoreNamedField>(
1876 result, HObjectAccess::ForJSArrayOffset(JSArray::kPropertiesOffset),
1877 empty_fixed_array);
1878 Add<HStoreNamedField>(
1879 result, HObjectAccess::ForJSArrayOffset(JSArray::kElementsOffset),
1880 empty_fixed_array);
1881 Add<HStoreNamedField>(
1882 result, HObjectAccess::ForJSArrayOffset(JSArray::kLengthOffset), length);
1883
1884 // Initialize the additional fields.
1885 Add<HStoreNamedField>(
1886 result, HObjectAccess::ForJSArrayOffset(JSRegExpResult::kIndexOffset),
1887 index);
1888 Add<HStoreNamedField>(
1889 result, HObjectAccess::ForJSArrayOffset(JSRegExpResult::kInputOffset),
1890 input);
1891
1892 // Allocate and initialize the elements header.
1893 HAllocate* elements = BuildAllocateElements(elements_kind, size);
1894 BuildInitializeElementsHeader(elements, elements_kind, length);
1895
1896 Add<HStoreNamedField>(
1897 result, HObjectAccess::ForJSArrayOffset(JSArray::kElementsOffset),
1898 elements);
1899
1900 // Initialize the elements contents with undefined.
1901 BuildFillElementsWithValue(
1902 elements, elements_kind, graph()->GetConstant0(), length,
1903 graph()->GetConstantUndefined());
1904
1905 return result;
1906 }
1907
1908 HValue* HGraphBuilder::BuildNumberToString(HValue* object, AstType* type) { 1847 HValue* HGraphBuilder::BuildNumberToString(HValue* object, AstType* type) {
1909 NoObservableSideEffectsScope scope(this); 1848 NoObservableSideEffectsScope scope(this);
1910 1849
1911 // Convert constant numbers at compile time. 1850 // Convert constant numbers at compile time.
1912 if (object->IsConstant() && HConstant::cast(object)->HasNumberValue()) { 1851 if (object->IsConstant() && HConstant::cast(object)->HasNumberValue()) {
1913 Handle<Object> number = HConstant::cast(object)->handle(isolate()); 1852 Handle<Object> number = HConstant::cast(object)->handle(isolate());
1914 Handle<String> result = isolate()->factory()->NumberToString(number); 1853 Handle<String> result = isolate()->factory()->NumberToString(number);
1915 return Add<HConstant>(result); 1854 return Add<HConstant>(result);
1916 } 1855 }
1917 1856
(...skipping 10243 matching lines...) Expand 10 before | Expand all | Expand 10 after
12161 HValue* subject = Pop(); 12100 HValue* subject = Pop();
12162 HValue* regexp_object = Pop(); 12101 HValue* regexp_object = Pop();
12163 HValue* stub = Add<HConstant>(callable.code()); 12102 HValue* stub = Add<HConstant>(callable.code());
12164 HValue* values[] = {regexp_object, subject, index, last_match_info}; 12103 HValue* values[] = {regexp_object, subject, index, last_match_info};
12165 HInstruction* result = New<HCallWithDescriptor>( 12104 HInstruction* result = New<HCallWithDescriptor>(
12166 stub, 0, callable.descriptor(), ArrayVector(values)); 12105 stub, 0, callable.descriptor(), ArrayVector(values));
12167 return ast_context()->ReturnInstruction(result, call->id()); 12106 return ast_context()->ReturnInstruction(result, call->id());
12168 } 12107 }
12169 12108
12170 12109
12171 void HOptimizedGraphBuilder::GenerateRegExpFlags(CallRuntime* call) {
12172 DCHECK_EQ(1, call->arguments()->length());
12173 CHECK_ALIVE(VisitExpressions(call->arguments()));
12174 HValue* regexp = Pop();
12175 HInstruction* result =
12176 New<HLoadNamedField>(regexp, nullptr, HObjectAccess::ForJSRegExpFlags());
12177 return ast_context()->ReturnInstruction(result, call->id());
12178 }
12179
12180
12181 void HOptimizedGraphBuilder::GenerateRegExpSource(CallRuntime* call) {
12182 DCHECK_EQ(1, call->arguments()->length());
12183 CHECK_ALIVE(VisitExpressions(call->arguments()));
12184 HValue* regexp = Pop();
12185 HInstruction* result =
12186 New<HLoadNamedField>(regexp, nullptr, HObjectAccess::ForJSRegExpSource());
12187 return ast_context()->ReturnInstruction(result, call->id());
12188 }
12189
12190
12191 // Construct a RegExp exec result with two in-object properties.
12192 void HOptimizedGraphBuilder::GenerateRegExpConstructResult(CallRuntime* call) {
12193 DCHECK_EQ(3, call->arguments()->length());
12194 CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
12195 CHECK_ALIVE(VisitForValue(call->arguments()->at(1)));
12196 CHECK_ALIVE(VisitForValue(call->arguments()->at(2)));
12197 HValue* input = Pop();
12198 HValue* index = Pop();
12199 HValue* length = Pop();
12200 HValue* result = BuildRegExpConstructResult(length, index, input);
12201 return ast_context()->ReturnValue(result);
12202 }
12203
12204
12205 // Fast support for number to string. 12110 // Fast support for number to string.
12206 void HOptimizedGraphBuilder::GenerateNumberToString(CallRuntime* call) { 12111 void HOptimizedGraphBuilder::GenerateNumberToString(CallRuntime* call) {
12207 DCHECK_EQ(1, call->arguments()->length()); 12112 DCHECK_EQ(1, call->arguments()->length());
12208 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); 12113 CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
12209 HValue* number = Pop(); 12114 HValue* number = Pop();
12210 HValue* result = BuildNumberToString(number, AstType::Any()); 12115 HValue* result = BuildNumberToString(number, AstType::Any());
12211 return ast_context()->ReturnValue(result); 12116 return ast_context()->ReturnValue(result);
12212 } 12117 }
12213 12118
12214 12119
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after
13082 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 12987 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13083 } 12988 }
13084 12989
13085 #ifdef DEBUG 12990 #ifdef DEBUG
13086 graph_->Verify(false); // No full verify. 12991 graph_->Verify(false); // No full verify.
13087 #endif 12992 #endif
13088 } 12993 }
13089 12994
13090 } // namespace internal 12995 } // namespace internal
13091 } // namespace v8 12996 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen.h ('k') | src/full-codegen/full-codegen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698