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

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

Issue 59023003: Generate TypedArrayInitialize builtin in hydrogen. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased and updated Created 7 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 | 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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 4606 matching lines...) Expand 10 before | Expand all | Expand 10 after
4617 }; 4617 };
4618 4618
4619 4619
4620 class HAdd V8_FINAL : public HArithmeticBinaryOperation { 4620 class HAdd V8_FINAL : public HArithmeticBinaryOperation {
4621 public: 4621 public:
4622 static HInstruction* New(Zone* zone, 4622 static HInstruction* New(Zone* zone,
4623 HValue* context, 4623 HValue* context,
4624 HValue* left, 4624 HValue* left,
4625 HValue* right); 4625 HValue* right);
4626 4626
4627 static HAdd* NewExternalPointerOffset(
danno 2013/11/18 14:26:17 This doesn't really work well the the Add<> templa
Dmitry Lomov (no reviews) 2013/11/18 16:43:54 Done, even though Add<> does not work with HAdd ev
4628 Zone* zone,
4629 HValue* context,
4630 HValue* base_pointer,
4631 HValue* offset);
4632
4627 // Add is only commutative if two integer values are added and not if two 4633 // Add is only commutative if two integer values are added and not if two
4628 // tagged values are added (because it might be a String concatenation). 4634 // tagged values are added (because it might be a String concatenation).
4635 // We also do not commute (pointer + offset).
4629 virtual bool IsCommutative() const V8_OVERRIDE { 4636 virtual bool IsCommutative() const V8_OVERRIDE {
4630 return !representation().IsTagged(); 4637 return !representation().IsTagged() && !representation().IsExternal();
4631 } 4638 }
4632 4639
4633 virtual HValue* EnsureAndPropagateNotMinusZero( 4640 virtual HValue* EnsureAndPropagateNotMinusZero(
4634 BitVector* visited) V8_OVERRIDE; 4641 BitVector* visited) V8_OVERRIDE;
4635 4642
4636 virtual HValue* Canonicalize() V8_OVERRIDE; 4643 virtual HValue* Canonicalize() V8_OVERRIDE;
4637 4644
4638 virtual bool TryDecompose(DecompositionResult* decomposition) V8_OVERRIDE { 4645 virtual bool TryDecompose(DecompositionResult* decomposition) V8_OVERRIDE {
4639 if (left()->IsInteger32Constant()) { 4646 if (left()->IsInteger32Constant()) {
4640 decomposition->Apply(right(), left()->GetInteger32Constant()); 4647 decomposition->Apply(right(), left()->GetInteger32Constant());
(...skipping 15 matching lines...) Expand all
4656 (left()->ToNumberCanBeObserved() || right()->ToNumberCanBeObserved() || 4663 (left()->ToNumberCanBeObserved() || right()->ToNumberCanBeObserved() ||
4657 left()->ToStringCanBeObserved() || right()->ToStringCanBeObserved())) { 4664 left()->ToStringCanBeObserved() || right()->ToStringCanBeObserved())) {
4658 SetAllSideEffects(); 4665 SetAllSideEffects();
4659 ClearFlag(kUseGVN); 4666 ClearFlag(kUseGVN);
4660 } else { 4667 } else {
4661 ClearAllSideEffects(); 4668 ClearAllSideEffects();
4662 SetFlag(kUseGVN); 4669 SetFlag(kUseGVN);
4663 } 4670 }
4664 } 4671 }
4665 4672
4673 virtual Representation RepresentationFromInputs() V8_OVERRIDE;
4674
4675 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE;
4676
4666 DECLARE_CONCRETE_INSTRUCTION(Add) 4677 DECLARE_CONCRETE_INSTRUCTION(Add)
4667 4678
4668 protected: 4679 protected:
4669 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } 4680 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
4670 4681
4671 virtual Range* InferRange(Zone* zone) V8_OVERRIDE; 4682 virtual Range* InferRange(Zone* zone) V8_OVERRIDE;
4672 4683
4673 private: 4684 private:
4674 HAdd(HValue* context, HValue* left, HValue* right) 4685 HAdd(HValue* context, HValue* left, HValue* right)
4675 : HArithmeticBinaryOperation(context, left, right) { 4686 : HArithmeticBinaryOperation(context, left, right) {
(...skipping 1697 matching lines...) Expand 10 before | Expand all | Expand 10 after
6373 } else if (index == 1) { 6384 } else if (index == 1) {
6374 if (field_representation().IsInteger8() || 6385 if (field_representation().IsInteger8() ||
6375 field_representation().IsUInteger8() || 6386 field_representation().IsUInteger8() ||
6376 field_representation().IsInteger16() || 6387 field_representation().IsInteger16() ||
6377 field_representation().IsUInteger16() || 6388 field_representation().IsUInteger16() ||
6378 field_representation().IsInteger32()) { 6389 field_representation().IsInteger32()) {
6379 return Representation::Integer32(); 6390 return Representation::Integer32();
6380 } else if (field_representation().IsDouble() || 6391 } else if (field_representation().IsDouble() ||
6381 field_representation().IsSmi()) { 6392 field_representation().IsSmi()) {
6382 return field_representation(); 6393 return field_representation();
6394 } else if (field_representation().IsExternal()) {
6395 return Representation::External();
6383 } 6396 }
6384 } 6397 }
6385 return Representation::Tagged(); 6398 return Representation::Tagged();
6386 } 6399 }
6387 virtual void HandleSideEffectDominator(GVNFlag side_effect, 6400 virtual void HandleSideEffectDominator(GVNFlag side_effect,
6388 HValue* dominator) V8_OVERRIDE { 6401 HValue* dominator) V8_OVERRIDE {
6389 ASSERT(side_effect == kChangesNewSpacePromotion); 6402 ASSERT(side_effect == kChangesNewSpacePromotion);
6390 new_space_dominator_ = dominator; 6403 new_space_dominator_ = dominator;
6391 } 6404 }
6392 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 6405 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after
7325 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7338 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
7326 }; 7339 };
7327 7340
7328 7341
7329 #undef DECLARE_INSTRUCTION 7342 #undef DECLARE_INSTRUCTION
7330 #undef DECLARE_CONCRETE_INSTRUCTION 7343 #undef DECLARE_CONCRETE_INSTRUCTION
7331 7344
7332 } } // namespace v8::internal 7345 } } // namespace v8::internal
7333 7346
7334 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7347 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698