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

Side by Side Diff: runtime/vm/object.h

Issue 2994283002: [VM-Compiler] Don't inline if we don't have inlining budget enough to fully inline.
Patch Set: Created 3 years, 4 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_OBJECT_H_ 5 #ifndef RUNTIME_VM_OBJECT_H_
6 #define RUNTIME_VM_OBJECT_H_ 6 #define RUNTIME_VM_OBJECT_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 2552 matching lines...) Expand 10 before | Expand all | Expand 10 after
2563 } 2563 }
2564 intptr_t NumOptionalNamedParameters() const { 2564 intptr_t NumOptionalNamedParameters() const {
2565 const intptr_t num_opt_params = raw_ptr()->num_optional_parameters_; 2565 const intptr_t num_opt_params = raw_ptr()->num_optional_parameters_;
2566 return (num_opt_params < 0) ? -num_opt_params : 0; 2566 return (num_opt_params < 0) ? -num_opt_params : 0;
2567 } 2567 }
2568 2568
2569 intptr_t NumParameters() const; 2569 intptr_t NumParameters() const;
2570 2570
2571 intptr_t NumImplicitParameters() const; 2571 intptr_t NumImplicitParameters() const;
2572 2572
2573 static intptr_t usage_counter_offset() {
2574 #if defined(DART_PRECOMPILED_RUNTIME) 2573 #if defined(DART_PRECOMPILED_RUNTIME)
2575 UNREACHABLE(); 2574 #define DEFINE_GETTERS_AND_SETTERS(return_type, type, name) \
2576 return 0; 2575 static intptr_t name##_offset() { \
2576 UNREACHABLE(); \
2577 return 0; \
2578 } \
2579 return_type name() const { return 0; } \
2580 \
2581 void set_##name(type value) const { UNREACHABLE(); }
2577 #else 2582 #else
2578 return OFFSET_OF(RawFunction, usage_counter_); 2583 #define DEFINE_GETTERS_AND_SETTERS(return_type, type, name) \
2584 static intptr_t name##_offset() { return OFFSET_OF(RawFunction, name##_); } \
2585 return_type name() const { return raw_ptr()->name##_; } \
2586 \
2587 void set_##name(type value) const { \
2588 StoreNonPointer(&raw_ptr()->name##_, value); \
2589 }
2579 #endif 2590 #endif
2580 } 2591
2581 intptr_t usage_counter() const { 2592 JIT_FUNCTION_COUNTERS(DEFINE_GETTERS_AND_SETTERS)
2582 #if defined(DART_PRECOMPILED_RUNTIME) 2593
2583 return 0; 2594 #undef DEFINE_GETTERS_AND_SETTERS
2584 #else 2595
2585 return raw_ptr()->usage_counter_; 2596 static const intptr_t kMaxInstructionCount = (1 << 16) - 1;
2586 #endif 2597
2587 } 2598 void SetOptimizedInstructionCountClamped(uintptr_t value) const {
2588 void set_usage_counter(intptr_t value) const { 2599 if (value > kMaxInstructionCount) value = kMaxInstructionCount;
2589 #if defined(DART_PRECOMPILED_RUNTIME) 2600 set_optimized_instruction_count(value);
2590 UNREACHABLE();
2591 #else
2592 // TODO(Srdjan): Assert that this is thread-safe, i.e., only
2593 // set from mutator-thread or while at a safepoint (e.g., during marking).
2594 StoreNonPointer(&raw_ptr()->usage_counter_, value);
2595 #endif
2596 } 2601 }
2597 2602
2598 int8_t deoptimization_counter() const { 2603 void SetOptimizedCallSiteCountClamped(uintptr_t value) const {
2599 #if defined(DART_PRECOMPILED_RUNTIME) 2604 if (value > kMaxInstructionCount) value = kMaxInstructionCount;
2600 return 0; 2605 set_optimized_call_site_count(value);
2601 #else
2602 return raw_ptr()->deoptimization_counter_;
2603 #endif
2604 }
2605 void set_deoptimization_counter(int8_t value) const {
2606 #if defined(DART_PRECOMPILED_RUNTIME)
2607 UNREACHABLE();
2608 #else
2609 ASSERT(value >= 0);
2610 StoreNonPointer(&raw_ptr()->deoptimization_counter_, value);
2611 #endif
2612 }
2613
2614 static const intptr_t kMaxInstructionCount = (1 << 16) - 1;
2615 intptr_t optimized_instruction_count() const {
2616 #if defined(DART_PRECOMPILED_RUNTIME)
2617 UNREACHABLE();
2618 return 0;
2619 #else
2620 return raw_ptr()->optimized_instruction_count_;
2621 #endif
2622 }
2623 void set_optimized_instruction_count(intptr_t value) const {
2624 #if defined(DART_PRECOMPILED_RUNTIME)
2625 UNREACHABLE();
2626 #else
2627 ASSERT(value >= 0);
2628 if (value > kMaxInstructionCount) {
2629 value = kMaxInstructionCount;
2630 }
2631 StoreNonPointer(&raw_ptr()->optimized_instruction_count_,
2632 static_cast<uint16_t>(value));
2633 #endif
2634 }
2635
2636 intptr_t optimized_call_site_count() const {
2637 #if defined(DART_PRECOMPILED_RUNTIME)
2638 return 0;
2639 #else
2640 return raw_ptr()->optimized_call_site_count_;
2641 #endif
2642 }
2643 void set_optimized_call_site_count(intptr_t value) const {
2644 #if defined(DART_PRECOMPILED_RUNTIME)
2645 UNREACHABLE();
2646 #else
2647 ASSERT(value >= 0);
2648 if (value > kMaxInstructionCount) {
2649 value = kMaxInstructionCount;
2650 }
2651 StoreNonPointer(&raw_ptr()->optimized_call_site_count_,
2652 static_cast<uint16_t>(value));
2653 #endif
2654 }
2655
2656 intptr_t kernel_offset() const {
2657 #if defined(DART_PRECOMPILED_RUNTIME)
2658 return 0;
2659 #else
2660 return raw_ptr()->kernel_offset_;
2661 #endif
2662 }
2663
2664 void set_kernel_offset(intptr_t kernel_offset) const {
2665 #if !defined(DART_PRECOMPILED_RUNTIME)
2666 StoreNonPointer(&raw_ptr()->kernel_offset_, kernel_offset);
2667 #endif
2668 } 2606 }
2669 2607
2670 RawTypedData* kernel_data() const { return raw_ptr()->kernel_data_; } 2608 RawTypedData* kernel_data() const { return raw_ptr()->kernel_data_; }
2671 void set_kernel_data(const TypedData& data) const; 2609 void set_kernel_data(const TypedData& data) const;
2672 2610
2673 bool IsOptimizable() const; 2611 bool IsOptimizable() const;
2674 void SetIsOptimizable(bool value) const; 2612 void SetIsOptimizable(bool value) const;
2675 2613
2676 bool CanBeInlined() const; 2614 bool CanBeInlined() const;
2677 2615
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
2944 bool clone_ic_data) const; 2882 bool clone_ic_data) const;
2945 2883
2946 RawArray* ic_data_array() const; 2884 RawArray* ic_data_array() const;
2947 void ClearICDataArray() const; 2885 void ClearICDataArray() const;
2948 2886
2949 // Sets deopt reason in all ICData-s with given deopt_id. 2887 // Sets deopt reason in all ICData-s with given deopt_id.
2950 void SetDeoptReasonForAll(intptr_t deopt_id, ICData::DeoptReasonId reason); 2888 void SetDeoptReasonForAll(intptr_t deopt_id, ICData::DeoptReasonId reason);
2951 2889
2952 void set_modifier(RawFunction::AsyncModifier value) const; 2890 void set_modifier(RawFunction::AsyncModifier value) const;
2953 2891
2954 // 'was_compiled' is true if the function was compiled once in this 2892 // 'WasCompiled' is true if the function was compiled once in this
2955 // VM instantiation. It is independent from presence of type feedback 2893 // VM instantiation. It is independent from presence of type feedback
2956 // (ic_data_array) and code, which may be loaded from a snapshot. 2894 // (ic_data_array) and code, which may be loaded from a snapshot.
2957 void set_was_compiled(bool value) const { 2895 void SetWasCompiled(bool value) const {
2958 #if defined(DART_PRECOMPILED_RUNTIME) 2896 set_was_compiled_numeric(value ? 1 : 0);
2959 UNREACHABLE();
2960 #else
2961 StoreNonPointer(&raw_ptr()->was_compiled_, value ? 1 : 0);
2962 #endif
2963 } 2897 }
2964 bool was_compiled() const { 2898
2965 #if defined(DART_PRECOMPILED_RUNTIME) 2899 bool WasCompiled() const { return was_compiled_numeric() != 0; }
2966 UNREACHABLE();
2967 return true;
2968 #else
2969 return raw_ptr()->was_compiled_ == 1;
2970 #endif
2971 }
2972 2900
2973 // static: Considered during class-side or top-level resolution rather than 2901 // static: Considered during class-side or top-level resolution rather than
2974 // instance-side resolution. 2902 // instance-side resolution.
2975 // const: Valid target of a const constructor call. 2903 // const: Valid target of a const constructor call.
2976 // abstract: Skipped during instance-side resolution. 2904 // abstract: Skipped during instance-side resolution.
2977 // reflectable: Enumerated by mirrors, invocable by mirrors. False for private 2905 // reflectable: Enumerated by mirrors, invocable by mirrors. False for private
2978 // functions of dart: libraries. 2906 // functions of dart: libraries.
2979 // debuggable: Valid location of a breakpoint. Synthetic code is not 2907 // debuggable: Valid location of a breakpoint. Synthetic code is not
2980 // debuggable. 2908 // debuggable.
2981 // visible: Frame is included in stack traces. Synthetic code such as 2909 // visible: Frame is included in stack traces. Synthetic code such as
(...skipping 6024 matching lines...) Expand 10 before | Expand all | Expand 10 after
9006 8934
9007 inline void TypeArguments::SetHash(intptr_t value) const { 8935 inline void TypeArguments::SetHash(intptr_t value) const {
9008 // This is only safe because we create a new Smi, which does not cause 8936 // This is only safe because we create a new Smi, which does not cause
9009 // heap allocation. 8937 // heap allocation.
9010 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); 8938 StoreSmi(&raw_ptr()->hash_, Smi::New(value));
9011 } 8939 }
9012 8940
9013 } // namespace dart 8941 } // namespace dart
9014 8942
9015 #endif // RUNTIME_VM_OBJECT_H_ 8943 #endif // RUNTIME_VM_OBJECT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698