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

Side by Side Diff: src/hydrogen-instructions.h

Issue 272513004: Reland r20974: Unify and simplify the FastCloneShallowArrayStub (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixes Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_
6 #define V8_HYDROGEN_INSTRUCTIONS_H_ 6 #define V8_HYDROGEN_INSTRUCTIONS_H_
7 7
8 #include "v8.h" 8 #include "v8.h"
9 9
10 #include "allocation.h" 10 #include "allocation.h"
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 // Set after an instruction is killed. 611 // Set after an instruction is killed.
612 kIsDead, 612 kIsDead,
613 // Instructions that are allowed to produce full range unsigned integer 613 // Instructions that are allowed to produce full range unsigned integer
614 // values are marked with kUint32 flag. If arithmetic shift or a load from 614 // values are marked with kUint32 flag. If arithmetic shift or a load from
615 // EXTERNAL_UINT32_ELEMENTS array is not marked with this flag 615 // EXTERNAL_UINT32_ELEMENTS array is not marked with this flag
616 // it will deoptimize if result does not fit into signed integer range. 616 // it will deoptimize if result does not fit into signed integer range.
617 // HGraph::ComputeSafeUint32Operations is responsible for setting this 617 // HGraph::ComputeSafeUint32Operations is responsible for setting this
618 // flag. 618 // flag.
619 kUint32, 619 kUint32,
620 kHasNoObservableSideEffects, 620 kHasNoObservableSideEffects,
621 // Indicates an instruction shouldn't be replaced by optimization.
mvstanton 2014/05/09 13:16:49 Or alternatively, instead of commenting the usage
danno 2014/05/09 15:51:25 Done.
622 kCantBeReplaced,
621 // Indicates the instruction is live during dead code elimination. 623 // Indicates the instruction is live during dead code elimination.
622 kIsLive, 624 kIsLive,
623 625
624 // HEnvironmentMarkers are deleted before dead code 626 // HEnvironmentMarkers are deleted before dead code
625 // elimination takes place, so they can repurpose the kIsLive flag: 627 // elimination takes place, so they can repurpose the kIsLive flag:
626 kEndsLiveRange = kIsLive, 628 kEndsLiveRange = kIsLive,
627 629
628 // TODO(everyone): Don't forget to update this! 630 // TODO(everyone): Don't forget to update this!
629 kLastFlag = kIsLive 631 kLastFlag = kIsLive
630 }; 632 };
(...skipping 5607 matching lines...) Expand 10 before | Expand all | Expand 10 after
6238 if (index == 0 && access().IsExternalMemory()) { 6240 if (index == 0 && access().IsExternalMemory()) {
6239 // object must be external in case of external memory access 6241 // object must be external in case of external memory access
6240 return Representation::External(); 6242 return Representation::External();
6241 } 6243 }
6242 return Representation::Tagged(); 6244 return Representation::Tagged();
6243 } 6245 }
6244 virtual Range* InferRange(Zone* zone) V8_OVERRIDE; 6246 virtual Range* InferRange(Zone* zone) V8_OVERRIDE;
6245 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 6247 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
6246 6248
6247 bool CanBeReplacedWith(HValue* other) const { 6249 bool CanBeReplacedWith(HValue* other) const {
6250 if (!CheckFlag(HValue::kCantBeReplaced)) return false;
6248 if (!type().Equals(other->type())) return false; 6251 if (!type().Equals(other->type())) return false;
6249 if (!representation().Equals(other->representation())) return false; 6252 if (!representation().Equals(other->representation())) return false;
6250 if (!other->IsLoadNamedField()) return true; 6253 if (!other->IsLoadNamedField()) return true;
6251 HLoadNamedField* that = HLoadNamedField::cast(other); 6254 HLoadNamedField* that = HLoadNamedField::cast(other);
6252 if (this->maps_ == that->maps_) return true; 6255 if (this->maps_ == that->maps_) return true;
6253 if (this->maps_ == NULL || that->maps_ == NULL) return false; 6256 if (this->maps_ == NULL || that->maps_ == NULL) return false;
6254 return this->maps_->IsSubset(that->maps_); 6257 return this->maps_->IsSubset(that->maps_);
6255 } 6258 }
6256 6259
6257 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField) 6260 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
6301 set_representation(Representation::Tagged()); 6304 set_representation(Representation::Tagged());
6302 } 6305 }
6303 access.SetGVNFlags(this, LOAD); 6306 access.SetGVNFlags(this, LOAD);
6304 } 6307 }
6305 6308
6306 HLoadNamedField(HValue* object, 6309 HLoadNamedField(HValue* object,
6307 HValue* dependency, 6310 HValue* dependency,
6308 HObjectAccess access, 6311 HObjectAccess access,
6309 const UniqueSet<Map>* maps, 6312 const UniqueSet<Map>* maps,
6310 HType type) 6313 HType type)
6311 : HTemplateInstruction<2>(type), access_(access), maps_(maps) { 6314 : HTemplateInstruction<2>(type),
6315 access_(access),
6316 maps_(maps) {
6312 ASSERT_NOT_NULL(maps); 6317 ASSERT_NOT_NULL(maps);
6313 ASSERT_NE(0, maps->size()); 6318 ASSERT_NE(0, maps->size());
6314 6319
6315 ASSERT_NOT_NULL(object); 6320 ASSERT_NOT_NULL(object);
6316 SetOperandAt(0, object); 6321 SetOperandAt(0, object);
6317 SetOperandAt(1, dependency ? dependency : object); 6322 SetOperandAt(1, dependency ? dependency : object);
6318 6323
6319 ASSERT(access.representation().IsHeapObject()); 6324 ASSERT(access.representation().IsHeapObject());
6320 // TODO(bmeurer): This is probably broken. What we actually want to to 6325 // TODO(bmeurer): This is probably broken. What we actually want to to
6321 // instead is set_representation(Representation::HeapObject()). 6326 // instead is set_representation(Representation::HeapObject()).
(...skipping 1329 matching lines...) Expand 10 before | Expand all | Expand 10 after
7651 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7656 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
7652 }; 7657 };
7653 7658
7654 7659
7655 #undef DECLARE_INSTRUCTION 7660 #undef DECLARE_INSTRUCTION
7656 #undef DECLARE_CONCRETE_INSTRUCTION 7661 #undef DECLARE_CONCRETE_INSTRUCTION
7657 7662
7658 } } // namespace v8::internal 7663 } } // namespace v8::internal
7659 7664
7660 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7665 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698