Index: src/a64/instrument-a64.h |
diff --git a/src/hydrogen-bce.h b/src/a64/instrument-a64.h |
similarity index 51% |
copy from src/hydrogen-bce.h |
copy to src/a64/instrument-a64.h |
index c55dea7b7a5133b62b0e4fa81f1e4b3fa3022279..08dc1b2ad17308ccb5cbd4ff8042ead090c06746 100644 |
--- a/src/hydrogen-bce.h |
+++ b/src/a64/instrument-a64.h |
@@ -25,50 +25,84 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-#ifndef V8_HYDROGEN_BCE_H_ |
-#define V8_HYDROGEN_BCE_H_ |
+#ifndef V8_A64_INSTRUMENT_A64_H_ |
+#define V8_A64_INSTRUMENT_A64_H_ |
-#include "hydrogen.h" |
+#include "globals.h" |
+#include "utils.h" |
+#include "a64/decoder-a64.h" |
+#include "a64/constants-a64.h" |
+#include "a64/instrument-a64.h" |
namespace v8 { |
namespace internal { |
+const int kCounterNameMaxLength = 256; |
+const uint64_t kDefaultInstrumentationSamplingPeriod = 1 << 22; |
-class BoundsCheckBbData; |
-class BoundsCheckKey; |
-class BoundsCheckTable : private ZoneHashMap { |
- public: |
- explicit BoundsCheckTable(Zone* zone); |
- INLINE(BoundsCheckBbData** LookupOrInsert(BoundsCheckKey* key, Zone* zone)); |
- INLINE(void Insert(BoundsCheckKey* key, BoundsCheckBbData* data, Zone* zone)); |
- INLINE(void Delete(BoundsCheckKey* key)); |
+enum InstrumentState { |
+ InstrumentStateDisable = 0, |
+ InstrumentStateEnable = 1 |
+}; |
- private: |
- DISALLOW_COPY_AND_ASSIGN(BoundsCheckTable); |
+ |
+enum CounterType { |
+ Gauge = 0, // Gauge counters reset themselves after reading. |
+ Cumulative = 1 // Cumulative counters keep their value after reading. |
}; |
-class HBoundsCheckEliminationPhase : public HPhase { |
+class Counter { |
public: |
- explicit HBoundsCheckEliminationPhase(HGraph* graph) |
- : HPhase("H_Bounds checks elimination", graph), table_(zone()) { } |
+ Counter(const char* name, CounterType type = Gauge); |
- void Run() { |
- EliminateRedundantBoundsChecks(graph()->entry_block()); |
- } |
+ void Increment(); |
+ void Enable(); |
+ void Disable(); |
+ bool IsEnabled(); |
+ uint64_t count(); |
+ const char* name(); |
+ CounterType type(); |
private: |
- void EliminateRedundantBoundsChecks(HBasicBlock* bb); |
- BoundsCheckBbData* PreProcessBlock(HBasicBlock* bb); |
- void PostProcessBlock(HBasicBlock* bb, BoundsCheckBbData* data); |
+ char name_[kCounterNameMaxLength]; |
+ uint64_t count_; |
+ bool enabled_; |
+ CounterType type_; |
+}; |
- BoundsCheckTable table_; |
- DISALLOW_COPY_AND_ASSIGN(HBoundsCheckEliminationPhase); |
-}; |
+class Instrument: public DecoderVisitor { |
+ public: |
+ explicit Instrument(const char* datafile = NULL, |
+ uint64_t sample_period = kDefaultInstrumentationSamplingPeriod); |
+ ~Instrument(); |
+ |
+ // Declare all Visitor functions. |
+ #define DECLARE(A) void Visit##A(Instruction* instr); |
+ VISITOR_LIST(DECLARE) |
+ #undef DECLARE |
+ private: |
+ void Update(); |
+ void Enable(); |
+ void Disable(); |
+ void DumpCounters(); |
+ void DumpCounterNames(); |
+ void DumpEventMarker(unsigned marker); |
+ void HandleInstrumentationEvent(unsigned event); |
+ Counter* GetCounter(const char* name); |
+ |
+ void InstrumentLoadStore(Instruction* instr); |
+ void InstrumentLoadStorePair(Instruction* instr); |
+ |
+ std::list<Counter*> counters_; |
+ |
+ FILE *output_stream_; |
+ uint64_t sample_period_; |
+}; |
} } // namespace v8::internal |
-#endif // V8_HYDROGEN_BCE_H_ |
+#endif // V8_A64_INSTRUMENT_A64_H_ |