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

Side by Side Diff: src/compiler/access-builder.cc

Issue 1943743003: Revert of [turbofan] Restore basic write barrier elimination. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 months 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/compiler/access-builder.h ('k') | src/compiler/change-lowering.cc » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/compiler/access-builder.h" 5 #include "src/compiler/access-builder.h"
6 6
7 #include "src/contexts.h" 7 #include "src/contexts.h"
8 #include "src/frames.h" 8 #include "src/frames.h"
9 #include "src/handles-inl.h" 9 #include "src/handles-inl.h"
10 #include "src/heap/heap.h" 10 #include "src/heap/heap.h"
11 #include "src/type-cache.h" 11 #include "src/type-cache.h"
12 12
13 namespace v8 { 13 namespace v8 {
14 namespace internal { 14 namespace internal {
15 namespace compiler { 15 namespace compiler {
16 16
17 // static 17 // static
18 FieldAccess AccessBuilder::ForMap() { 18 FieldAccess AccessBuilder::ForMap() {
19 FieldAccess access = { 19 FieldAccess access = {kTaggedBase, HeapObject::kMapOffset,
20 kTaggedBase, HeapObject::kMapOffset, MaybeHandle<Name>(), 20 MaybeHandle<Name>(), Type::Any(),
21 Type::Any(), MachineType::AnyTagged(), kMapWriteBarrier}; 21 MachineType::AnyTagged()};
22 return access; 22 return access;
23 } 23 }
24 24
25 25
26 // static 26 // static
27 FieldAccess AccessBuilder::ForHeapNumberValue() { 27 FieldAccess AccessBuilder::ForHeapNumberValue() {
28 FieldAccess access = {kTaggedBase, 28 FieldAccess access = {kTaggedBase, HeapNumber::kValueOffset,
29 HeapNumber::kValueOffset, 29 MaybeHandle<Name>(), TypeCache::Get().kFloat64,
30 MaybeHandle<Name>(), 30 MachineType::Float64()};
31 TypeCache::Get().kFloat64,
32 MachineType::Float64(),
33 kNoWriteBarrier};
34 return access; 31 return access;
35 } 32 }
36 33
37 34
38 // static 35 // static
39 FieldAccess AccessBuilder::ForJSObjectProperties() { 36 FieldAccess AccessBuilder::ForJSObjectProperties() {
40 FieldAccess access = { 37 FieldAccess access = {kTaggedBase, JSObject::kPropertiesOffset,
41 kTaggedBase, JSObject::kPropertiesOffset, MaybeHandle<Name>(), 38 MaybeHandle<Name>(), Type::Internal(),
42 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier}; 39 MachineType::AnyTagged()};
43 return access; 40 return access;
44 } 41 }
45 42
46 43
47 // static 44 // static
48 FieldAccess AccessBuilder::ForJSObjectElements() { 45 FieldAccess AccessBuilder::ForJSObjectElements() {
49 FieldAccess access = { 46 FieldAccess access = {kTaggedBase, JSObject::kElementsOffset,
50 kTaggedBase, JSObject::kElementsOffset, MaybeHandle<Name>(), 47 MaybeHandle<Name>(), Type::Internal(),
51 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier}; 48 MachineType::AnyTagged()};
52 return access; 49 return access;
53 } 50 }
54 51
55 52
56 // static 53 // static
57 FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map, 54 FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map,
58 int index) { 55 int index) {
59 int const offset = map->GetInObjectPropertyOffset(index); 56 int const offset = map->GetInObjectPropertyOffset(index);
60 FieldAccess access = {kTaggedBase, 57 FieldAccess access = {kTaggedBase, offset, MaybeHandle<Name>(),
61 offset, 58 Type::Tagged(), MachineType::AnyTagged()};
62 MaybeHandle<Name>(),
63 Type::Tagged(),
64 MachineType::AnyTagged(),
65 kFullWriteBarrier};
66 return access; 59 return access;
67 } 60 }
68 61
69 62
70 // static 63 // static
71 FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() { 64 FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() {
72 FieldAccess access = {kTaggedBase, 65 FieldAccess access = {kTaggedBase, JSFunction::kPrototypeOrInitialMapOffset,
73 JSFunction::kPrototypeOrInitialMapOffset, 66 MaybeHandle<Name>(), Type::Any(),
74 MaybeHandle<Name>(), 67 MachineType::AnyTagged()};
75 Type::Any(),
76 MachineType::AnyTagged(),
77 kFullWriteBarrier};
78 return access; 68 return access;
79 } 69 }
80 70
81 // static 71 // static
82 FieldAccess AccessBuilder::ForJSFunctionContext() { 72 FieldAccess AccessBuilder::ForJSFunctionContext() {
83 FieldAccess access = { 73 FieldAccess access = {kTaggedBase, JSFunction::kContextOffset,
84 kTaggedBase, JSFunction::kContextOffset, MaybeHandle<Name>(), 74 MaybeHandle<Name>(), Type::Internal(),
85 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier}; 75 MachineType::AnyTagged()};
86 return access; 76 return access;
87 } 77 }
88 78
89 79
90 // static 80 // static
91 FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() { 81 FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() {
92 FieldAccess access = {kTaggedBase, 82 FieldAccess access = {kTaggedBase, JSFunction::kSharedFunctionInfoOffset,
93 JSFunction::kSharedFunctionInfoOffset, 83 Handle<Name>(), Type::Any(), MachineType::AnyTagged()};
94 Handle<Name>(),
95 Type::Any(),
96 MachineType::AnyTagged(),
97 kPointerWriteBarrier};
98 return access; 84 return access;
99 } 85 }
100 86
101 87
102 // static 88 // static
103 FieldAccess AccessBuilder::ForJSFunctionLiterals() { 89 FieldAccess AccessBuilder::ForJSFunctionLiterals() {
104 FieldAccess access = { 90 FieldAccess access = {kTaggedBase, JSFunction::kLiteralsOffset,
105 kTaggedBase, JSFunction::kLiteralsOffset, Handle<Name>(), 91 Handle<Name>(), Type::Internal(),
106 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier}; 92 MachineType::AnyTagged()};
107 return access; 93 return access;
108 } 94 }
109 95
110 // static 96 // static
111 FieldAccess AccessBuilder::ForJSFunctionCodeEntry() { 97 FieldAccess AccessBuilder::ForJSFunctionCodeEntry() {
112 FieldAccess access = {kTaggedBase, 98 FieldAccess access = {kTaggedBase, JSFunction::kCodeEntryOffset,
113 JSFunction::kCodeEntryOffset, 99 Handle<Name>(), Type::UntaggedPointer(),
114 Handle<Name>(), 100 MachineType::Pointer()};
115 Type::UntaggedPointer(),
116 MachineType::Pointer(),
117 kNoWriteBarrier};
118 return access; 101 return access;
119 } 102 }
120 103
121 // static 104 // static
122 FieldAccess AccessBuilder::ForJSFunctionNextFunctionLink() { 105 FieldAccess AccessBuilder::ForJSFunctionNextFunctionLink() {
123 FieldAccess access = {kTaggedBase, 106 FieldAccess access = {kTaggedBase, JSFunction::kNextFunctionLinkOffset,
124 JSFunction::kNextFunctionLinkOffset, 107 Handle<Name>(), Type::Any(), MachineType::AnyTagged()};
125 Handle<Name>(),
126 Type::Any(),
127 MachineType::AnyTagged(),
128 kPointerWriteBarrier};
129 return access; 108 return access;
130 } 109 }
131 110
132 // static 111 // static
133 FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) { 112 FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) {
134 TypeCache const& type_cache = TypeCache::Get(); 113 TypeCache const& type_cache = TypeCache::Get();
135 FieldAccess access = {kTaggedBase, 114 FieldAccess access = {kTaggedBase, JSArray::kLengthOffset, Handle<Name>(),
136 JSArray::kLengthOffset,
137 Handle<Name>(),
138 type_cache.kJSArrayLengthType, 115 type_cache.kJSArrayLengthType,
139 MachineType::AnyTagged(), 116 MachineType::AnyTagged()};
140 kFullWriteBarrier};
141 if (IsFastDoubleElementsKind(elements_kind)) { 117 if (IsFastDoubleElementsKind(elements_kind)) {
142 access.type = type_cache.kFixedDoubleArrayLengthType; 118 access.type = type_cache.kFixedDoubleArrayLengthType;
143 access.write_barrier_kind = kNoWriteBarrier;
144 } else if (IsFastElementsKind(elements_kind)) { 119 } else if (IsFastElementsKind(elements_kind)) {
145 access.type = type_cache.kFixedArrayLengthType; 120 access.type = type_cache.kFixedArrayLengthType;
146 access.write_barrier_kind = kNoWriteBarrier;
147 } 121 }
148 return access; 122 return access;
149 } 123 }
150 124
151 125
152 // static 126 // static
153 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { 127 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() {
154 FieldAccess access = {kTaggedBase, 128 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBackingStoreOffset,
155 JSArrayBuffer::kBackingStoreOffset, 129 MaybeHandle<Name>(), Type::UntaggedPointer(),
156 MaybeHandle<Name>(), 130 MachineType::Pointer()};
157 Type::UntaggedPointer(),
158 MachineType::Pointer(),
159 kNoWriteBarrier};
160 return access; 131 return access;
161 } 132 }
162 133
163 134
164 // static 135 // static
165 FieldAccess AccessBuilder::ForJSArrayBufferBitField() { 136 FieldAccess AccessBuilder::ForJSArrayBufferBitField() {
166 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset, 137 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset,
167 MaybeHandle<Name>(), TypeCache::Get().kInt8, 138 MaybeHandle<Name>(), TypeCache::Get().kInt8,
168 MachineType::Int8(), kNoWriteBarrier}; 139 MachineType::Int8()};
169 return access; 140 return access;
170 } 141 }
171 142
172 143
173 // static 144 // static
174 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { 145 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() {
175 FieldAccess access = {kTaggedBase, 146 FieldAccess access = {kTaggedBase, JSArrayBufferView::kBufferOffset,
176 JSArrayBufferView::kBufferOffset, 147 MaybeHandle<Name>(), Type::TaggedPointer(),
177 MaybeHandle<Name>(), 148 MachineType::AnyTagged()};
178 Type::TaggedPointer(),
179 MachineType::AnyTagged(),
180 kPointerWriteBarrier};
181 return access; 149 return access;
182 } 150 }
183 151
184 152
185 // static 153 // static
186 FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) { 154 FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) {
187 FieldAccess access = {kTaggedBase, 155 FieldAccess access = {
188 JSDate::kValueOffset + index * kPointerSize, 156 kTaggedBase, JSDate::kValueOffset + index * kPointerSize,
189 MaybeHandle<Name>(), 157 MaybeHandle<Name>(), Type::Number(), MachineType::AnyTagged()};
190 Type::Number(),
191 MachineType::AnyTagged(),
192 kFullWriteBarrier};
193 return access; 158 return access;
194 } 159 }
195 160
196 161
197 // static 162 // static
198 FieldAccess AccessBuilder::ForJSIteratorResultDone() { 163 FieldAccess AccessBuilder::ForJSIteratorResultDone() {
199 FieldAccess access = { 164 FieldAccess access = {kTaggedBase, JSIteratorResult::kDoneOffset,
200 kTaggedBase, JSIteratorResult::kDoneOffset, MaybeHandle<Name>(), 165 MaybeHandle<Name>(), Type::Any(),
201 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier}; 166 MachineType::AnyTagged()};
202 return access; 167 return access;
203 } 168 }
204 169
205 170
206 // static 171 // static
207 FieldAccess AccessBuilder::ForJSIteratorResultValue() { 172 FieldAccess AccessBuilder::ForJSIteratorResultValue() {
208 FieldAccess access = { 173 FieldAccess access = {kTaggedBase, JSIteratorResult::kValueOffset,
209 kTaggedBase, JSIteratorResult::kValueOffset, MaybeHandle<Name>(), 174 MaybeHandle<Name>(), Type::Any(),
210 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier}; 175 MachineType::AnyTagged()};
211 return access; 176 return access;
212 } 177 }
213 178
214 179
215 // static 180 // static
216 FieldAccess AccessBuilder::ForJSRegExpFlags() { 181 FieldAccess AccessBuilder::ForJSRegExpFlags() {
217 FieldAccess access = { 182 FieldAccess access = {kTaggedBase, JSRegExp::kFlagsOffset,
218 kTaggedBase, JSRegExp::kFlagsOffset, MaybeHandle<Name>(), 183 MaybeHandle<Name>(), Type::Tagged(),
219 Type::Tagged(), MachineType::AnyTagged(), kFullWriteBarrier}; 184 MachineType::AnyTagged()};
220 return access; 185 return access;
221 } 186 }
222 187
223 188
224 // static 189 // static
225 FieldAccess AccessBuilder::ForJSRegExpSource() { 190 FieldAccess AccessBuilder::ForJSRegExpSource() {
226 FieldAccess access = { 191 FieldAccess access = {kTaggedBase, JSRegExp::kSourceOffset,
227 kTaggedBase, JSRegExp::kSourceOffset, MaybeHandle<Name>(), 192 MaybeHandle<Name>(), Type::Tagged(),
228 Type::Tagged(), MachineType::AnyTagged(), kFullWriteBarrier}; 193 MachineType::AnyTagged()};
229 return access; 194 return access;
230 } 195 }
231 196
232 197
233 // static 198 // static
234 FieldAccess AccessBuilder::ForFixedArrayLength() { 199 FieldAccess AccessBuilder::ForFixedArrayLength() {
235 FieldAccess access = {kTaggedBase, 200 FieldAccess access = {
236 FixedArray::kLengthOffset, 201 kTaggedBase, FixedArray::kLengthOffset, MaybeHandle<Name>(),
237 MaybeHandle<Name>(), 202 TypeCache::Get().kFixedArrayLengthType, MachineType::AnyTagged()};
238 TypeCache::Get().kFixedArrayLengthType,
239 MachineType::AnyTagged(),
240 kNoWriteBarrier};
241 return access; 203 return access;
242 } 204 }
243 205
244 206
245 // static 207 // static
246 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { 208 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() {
247 FieldAccess access = {kTaggedBase, 209 FieldAccess access = {kTaggedBase, DescriptorArray::kEnumCacheOffset,
248 DescriptorArray::kEnumCacheOffset, 210 Handle<Name>(), Type::TaggedPointer(),
249 Handle<Name>(), 211 MachineType::AnyTagged()};
250 Type::TaggedPointer(),
251 MachineType::AnyTagged(),
252 kPointerWriteBarrier};
253 return access; 212 return access;
254 } 213 }
255 214
256 215
257 // static 216 // static
258 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { 217 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() {
259 FieldAccess access = {kTaggedBase, 218 FieldAccess access = {
260 DescriptorArray::kEnumCacheBridgeCacheOffset, 219 kTaggedBase, DescriptorArray::kEnumCacheBridgeCacheOffset, Handle<Name>(),
261 Handle<Name>(), 220 Type::TaggedPointer(), MachineType::AnyTagged()};
262 Type::TaggedPointer(),
263 MachineType::AnyTagged(),
264 kPointerWriteBarrier};
265 return access; 221 return access;
266 } 222 }
267 223
268 224
269 // static 225 // static
270 FieldAccess AccessBuilder::ForMapBitField() { 226 FieldAccess AccessBuilder::ForMapBitField() {
271 FieldAccess access = {kTaggedBase, Map::kBitFieldOffset, 227 FieldAccess access = {kTaggedBase, Map::kBitFieldOffset, Handle<Name>(),
272 Handle<Name>(), TypeCache::Get().kUint8, 228 TypeCache::Get().kUint8, MachineType::Uint8()};
273 MachineType::Uint8(), kNoWriteBarrier};
274 return access; 229 return access;
275 } 230 }
276 231
277 232
278 // static 233 // static
279 FieldAccess AccessBuilder::ForMapBitField3() { 234 FieldAccess AccessBuilder::ForMapBitField3() {
280 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, 235 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, Handle<Name>(),
281 Handle<Name>(), TypeCache::Get().kInt32, 236 TypeCache::Get().kInt32, MachineType::Int32()};
282 MachineType::Int32(), kNoWriteBarrier};
283 return access; 237 return access;
284 } 238 }
285 239
286 240
287 // static 241 // static
288 FieldAccess AccessBuilder::ForMapDescriptors() { 242 FieldAccess AccessBuilder::ForMapDescriptors() {
289 FieldAccess access = { 243 FieldAccess access = {kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(),
290 kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(), 244 Type::TaggedPointer(), MachineType::AnyTagged()};
291 Type::TaggedPointer(), MachineType::AnyTagged(), kPointerWriteBarrier};
292 return access; 245 return access;
293 } 246 }
294 247
295 248
296 // static 249 // static
297 FieldAccess AccessBuilder::ForMapInstanceType() { 250 FieldAccess AccessBuilder::ForMapInstanceType() {
298 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, 251 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(),
299 Handle<Name>(), TypeCache::Get().kUint8, 252 TypeCache::Get().kUint8, MachineType::Uint8()};
300 MachineType::Uint8(), kNoWriteBarrier};
301 return access; 253 return access;
302 } 254 }
303 255
304 256
305 // static 257 // static
306 FieldAccess AccessBuilder::ForMapPrototype() { 258 FieldAccess AccessBuilder::ForMapPrototype() {
307 FieldAccess access = { 259 FieldAccess access = {kTaggedBase, Map::kPrototypeOffset, Handle<Name>(),
308 kTaggedBase, Map::kPrototypeOffset, Handle<Name>(), 260 Type::TaggedPointer(), MachineType::AnyTagged()};
309 Type::TaggedPointer(), MachineType::AnyTagged(), kPointerWriteBarrier};
310 return access; 261 return access;
311 } 262 }
312 263
313 264
314 // static 265 // static
315 FieldAccess AccessBuilder::ForStringLength() { 266 FieldAccess AccessBuilder::ForStringLength() {
316 FieldAccess access = {kTaggedBase, 267 FieldAccess access = {kTaggedBase, String::kLengthOffset, Handle<Name>(),
317 String::kLengthOffset,
318 Handle<Name>(),
319 TypeCache::Get().kStringLengthType, 268 TypeCache::Get().kStringLengthType,
320 MachineType::AnyTagged(), 269 MachineType::AnyTagged()};
321 kNoWriteBarrier};
322 return access; 270 return access;
323 } 271 }
324 272
325 273
326 // static 274 // static
327 FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() { 275 FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() {
328 FieldAccess access = {kTaggedBase, 276 FieldAccess access = {kTaggedBase, JSGlobalObject::kGlobalProxyOffset,
329 JSGlobalObject::kGlobalProxyOffset, 277 Handle<Name>(), Type::Receiver(),
330 Handle<Name>(), 278 MachineType::AnyTagged()};
331 Type::Receiver(),
332 MachineType::AnyTagged(),
333 kPointerWriteBarrier};
334 return access; 279 return access;
335 } 280 }
336 281
337 282
338 // static 283 // static
339 FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() { 284 FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() {
340 FieldAccess access = {kTaggedBase, 285 FieldAccess access = {kTaggedBase, JSGlobalObject::kNativeContextOffset,
341 JSGlobalObject::kNativeContextOffset, 286 Handle<Name>(), Type::Internal(),
342 Handle<Name>(), 287 MachineType::AnyTagged()};
343 Type::Internal(),
344 MachineType::AnyTagged(),
345 kPointerWriteBarrier};
346 return access; 288 return access;
347 } 289 }
348 290
349 291
350 // static 292 // static
351 FieldAccess AccessBuilder::ForValue() { 293 FieldAccess AccessBuilder::ForValue() {
352 FieldAccess access = { 294 FieldAccess access = {kTaggedBase, JSValue::kValueOffset, Handle<Name>(),
353 kTaggedBase, JSValue::kValueOffset, Handle<Name>(), 295 Type::Any(), MachineType::AnyTagged()};
354 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier};
355 return access; 296 return access;
356 } 297 }
357 298
358 299
359 // static 300 // static
360 FieldAccess AccessBuilder::ForArgumentsLength() { 301 FieldAccess AccessBuilder::ForArgumentsLength() {
361 FieldAccess access = { 302 FieldAccess access = {kTaggedBase, JSArgumentsObject::kLengthOffset,
362 kTaggedBase, JSArgumentsObject::kLengthOffset, Handle<Name>(), 303 Handle<Name>(), Type::Any(), MachineType::AnyTagged()};
363 Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier};
364 return access; 304 return access;
365 } 305 }
366 306
367 307
368 // static 308 // static
369 FieldAccess AccessBuilder::ForArgumentsCallee() { 309 FieldAccess AccessBuilder::ForArgumentsCallee() {
370 FieldAccess access = {kTaggedBase, 310 FieldAccess access = {kTaggedBase, JSSloppyArgumentsObject::kCalleeOffset,
371 JSSloppyArgumentsObject::kCalleeOffset, 311 Handle<Name>(), Type::Any(), MachineType::AnyTagged()};
372 Handle<Name>(),
373 Type::Any(),
374 MachineType::AnyTagged(),
375 kPointerWriteBarrier};
376 return access; 312 return access;
377 } 313 }
378 314
379 315
380 // static 316 // static
381 FieldAccess AccessBuilder::ForFixedArraySlot(size_t index) { 317 FieldAccess AccessBuilder::ForFixedArraySlot(size_t index) {
382 int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index)); 318 int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index));
383 FieldAccess access = {kTaggedBase, 319 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(),
384 offset, 320 MachineType::AnyTagged()};
385 Handle<Name>(),
386 Type::Any(),
387 MachineType::AnyTagged(),
388 kFullWriteBarrier};
389 return access; 321 return access;
390 } 322 }
391 323
392 324
393 // static 325 // static
394 FieldAccess AccessBuilder::ForContextSlot(size_t index) { 326 FieldAccess AccessBuilder::ForContextSlot(size_t index) {
395 int offset = Context::kHeaderSize + static_cast<int>(index) * kPointerSize; 327 int offset = Context::kHeaderSize + static_cast<int>(index) * kPointerSize;
396 DCHECK_EQ(offset, 328 DCHECK_EQ(offset,
397 Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag); 329 Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag);
398 FieldAccess access = {kTaggedBase, 330 FieldAccess access = {kTaggedBase, offset, Handle<Name>(), Type::Any(),
399 offset, 331 MachineType::AnyTagged()};
400 Handle<Name>(),
401 Type::Any(),
402 MachineType::AnyTagged(),
403 kFullWriteBarrier};
404 return access; 332 return access;
405 } 333 }
406 334
407 335
408 // static 336 // static
409 FieldAccess AccessBuilder::ForPropertyCellValue() { 337 FieldAccess AccessBuilder::ForPropertyCellValue() {
410 return ForPropertyCellValue(Type::Tagged()); 338 return ForPropertyCellValue(Type::Tagged());
411 } 339 }
412 340
413 341
414 // static 342 // static
415 FieldAccess AccessBuilder::ForPropertyCellValue(Type* type) { 343 FieldAccess AccessBuilder::ForPropertyCellValue(Type* type) {
416 FieldAccess access = { 344 FieldAccess access = {kTaggedBase, PropertyCell::kValueOffset, Handle<Name>(),
417 kTaggedBase, PropertyCell::kValueOffset, Handle<Name>(), 345 type, MachineType::AnyTagged()};
418 type, MachineType::AnyTagged(), kFullWriteBarrier};
419 return access; 346 return access;
420 } 347 }
421 348
422 349
423 // static 350 // static
424 FieldAccess AccessBuilder::ForSharedFunctionInfoTypeFeedbackVector() { 351 FieldAccess AccessBuilder::ForSharedFunctionInfoTypeFeedbackVector() {
425 FieldAccess access = {kTaggedBase, 352 FieldAccess access = {kTaggedBase, SharedFunctionInfo::kFeedbackVectorOffset,
426 SharedFunctionInfo::kFeedbackVectorOffset, 353 Handle<Name>(), Type::Any(), MachineType::AnyTagged()};
427 Handle<Name>(),
428 Type::Any(),
429 MachineType::AnyTagged(),
430 kPointerWriteBarrier};
431 return access; 354 return access;
432 } 355 }
433 356
434 357
435 // static 358 // static
436 ElementAccess AccessBuilder::ForFixedArrayElement() { 359 ElementAccess AccessBuilder::ForFixedArrayElement() {
437 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Tagged(), 360 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Tagged(),
438 MachineType::AnyTagged(), kFullWriteBarrier}; 361 MachineType::AnyTagged()};
439 return access; 362 return access;
440 } 363 }
441 364
442 365
443 // static 366 // static
444 ElementAccess AccessBuilder::ForFixedDoubleArrayElement() { 367 ElementAccess AccessBuilder::ForFixedDoubleArrayElement() {
445 ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize, 368 ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize,
446 TypeCache::Get().kFloat64, MachineType::Float64(), 369 TypeCache::Get().kFloat64, MachineType::Float64()};
447 kNoWriteBarrier};
448 return access; 370 return access;
449 } 371 }
450 372
451 373
452 // static 374 // static
453 ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type, 375 ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type,
454 bool is_external) { 376 bool is_external) {
455 BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase; 377 BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase;
456 int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset; 378 int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset;
457 switch (type) { 379 switch (type) {
458 case kExternalInt8Array: { 380 case kExternalInt8Array: {
459 ElementAccess access = {taggedness, header_size, Type::Signed32(), 381 ElementAccess access = {taggedness, header_size, Type::Signed32(),
460 MachineType::Int8(), kNoWriteBarrier}; 382 MachineType::Int8()};
461 return access; 383 return access;
462 } 384 }
463 case kExternalUint8Array: 385 case kExternalUint8Array:
464 case kExternalUint8ClampedArray: { 386 case kExternalUint8ClampedArray: {
465 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), 387 ElementAccess access = {taggedness, header_size, Type::Unsigned32(),
466 MachineType::Uint8(), kNoWriteBarrier}; 388 MachineType::Uint8()};
467 return access; 389 return access;
468 } 390 }
469 case kExternalInt16Array: { 391 case kExternalInt16Array: {
470 ElementAccess access = {taggedness, header_size, Type::Signed32(), 392 ElementAccess access = {taggedness, header_size, Type::Signed32(),
471 MachineType::Int16(), kNoWriteBarrier}; 393 MachineType::Int16()};
472 return access; 394 return access;
473 } 395 }
474 case kExternalUint16Array: { 396 case kExternalUint16Array: {
475 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), 397 ElementAccess access = {taggedness, header_size, Type::Unsigned32(),
476 MachineType::Uint16(), kNoWriteBarrier}; 398 MachineType::Uint16()};
477 return access; 399 return access;
478 } 400 }
479 case kExternalInt32Array: { 401 case kExternalInt32Array: {
480 ElementAccess access = {taggedness, header_size, Type::Signed32(), 402 ElementAccess access = {taggedness, header_size, Type::Signed32(),
481 MachineType::Int32(), kNoWriteBarrier}; 403 MachineType::Int32()};
482 return access; 404 return access;
483 } 405 }
484 case kExternalUint32Array: { 406 case kExternalUint32Array: {
485 ElementAccess access = {taggedness, header_size, Type::Unsigned32(), 407 ElementAccess access = {taggedness, header_size, Type::Unsigned32(),
486 MachineType::Uint32(), kNoWriteBarrier}; 408 MachineType::Uint32()};
487 return access; 409 return access;
488 } 410 }
489 case kExternalFloat32Array: { 411 case kExternalFloat32Array: {
490 ElementAccess access = {taggedness, header_size, Type::Number(), 412 ElementAccess access = {taggedness, header_size, Type::Number(),
491 MachineType::Float32(), kNoWriteBarrier}; 413 MachineType::Float32()};
492 return access; 414 return access;
493 } 415 }
494 case kExternalFloat64Array: { 416 case kExternalFloat64Array: {
495 ElementAccess access = {taggedness, header_size, Type::Number(), 417 ElementAccess access = {taggedness, header_size, Type::Number(),
496 MachineType::Float64(), kNoWriteBarrier}; 418 MachineType::Float64()};
497 return access; 419 return access;
498 } 420 }
499 } 421 }
500 UNREACHABLE(); 422 UNREACHABLE();
501 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None(), 423 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None()};
502 kNoWriteBarrier};
503 return access; 424 return access;
504 } 425 }
505 426
427
428 // static
429 FieldAccess AccessBuilder::ForStatsCounter() {
430 FieldAccess access = {kUntaggedBase, 0, MaybeHandle<Name>(),
431 TypeCache::Get().kInt32, MachineType::Int32()};
432 return access;
433 }
434
506 } // namespace compiler 435 } // namespace compiler
507 } // namespace internal 436 } // namespace internal
508 } // namespace v8 437 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/access-builder.h ('k') | src/compiler/change-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698