| 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_
|
|
|