175be28332b278cff9039b54bfb228ac72f539cccRoland Levillain/* 275be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * Copyright (C) 2014 The Android Open Source Project 375be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * 475be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * Licensed under the Apache License, Version 2.0 (the "License"); 575be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * you may not use this file except in compliance with the License. 675be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * You may obtain a copy of the License at 775be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * 875be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * http://www.apache.org/licenses/LICENSE-2.0 975be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * 1075be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * Unless required by applicable law or agreed to in writing, software 1175be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * distributed under the License is distributed on an "AS IS" BASIS, 1275be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1375be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * See the License for the specific language governing permissions and 1475be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * limitations under the License. 1575be28332b278cff9039b54bfb228ac72f539cccRoland Levillain */ 1675be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 1775be28332b278cff9039b54bfb228ac72f539cccRoland Levillain#ifndef ART_COMPILER_OPTIMIZING_OPTIMIZATION_H_ 1875be28332b278cff9039b54bfb228ac72f539cccRoland Levillain#define ART_COMPILER_OPTIMIZING_OPTIMIZATION_H_ 1975be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 20a3a3c5943522e7325d60cfcbdd17aff1e138f53dVladimir Marko#include "base/arena_object.h" 2175be28332b278cff9039b54bfb228ac72f539cccRoland Levillain#include "nodes.h" 22acf735c13998ad2a175f5a17e7bfce220073279dCalin Juravle#include "optimizing_compiler_stats.h" 2375be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 2475be28332b278cff9039b54bfb228ac72f539cccRoland Levillainnamespace art { 2575be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 2675be28332b278cff9039b54bfb228ac72f539cccRoland Levillain/** 2775be28332b278cff9039b54bfb228ac72f539cccRoland Levillain * Abstraction to implement an optimization pass. 2875be28332b278cff9039b54bfb228ac72f539cccRoland Levillain */ 29f9f6441c665b5ff9004d3ed55014f46d416fb1bbVladimir Markoclass HOptimization : public ArenaObject<kArenaAllocOptimization> { 3075be28332b278cff9039b54bfb228ac72f539cccRoland Levillain public: 3175be28332b278cff9039b54bfb228ac72f539cccRoland Levillain HOptimization(HGraph* graph, 32acf735c13998ad2a175f5a17e7bfce220073279dCalin Juravle const char* pass_name, 33acf735c13998ad2a175f5a17e7bfce220073279dCalin Juravle OptimizingCompilerStats* stats = nullptr) 3475be28332b278cff9039b54bfb228ac72f539cccRoland Levillain : graph_(graph), 35acf735c13998ad2a175f5a17e7bfce220073279dCalin Juravle stats_(stats), 365e6916cea259897baaca019c5c7a5d05746306edNicolas Geoffray pass_name_(pass_name) {} 3775be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 3875be28332b278cff9039b54bfb228ac72f539cccRoland Levillain virtual ~HOptimization() {} 3975be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 4075be28332b278cff9039b54bfb228ac72f539cccRoland Levillain // Return the name of the pass. 4175be28332b278cff9039b54bfb228ac72f539cccRoland Levillain const char* GetPassName() const { return pass_name_; } 4275be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 43854a02b1b488327f80c544ca1119b386b8715c26Aart Bik // Perform the analysis itself. 4475be28332b278cff9039b54bfb228ac72f539cccRoland Levillain virtual void Run() = 0; 4575be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 4675be28332b278cff9039b54bfb228ac72f539cccRoland Levillain protected: 472d7352ba5311b8f57427b91b7a891e61497373c1David Brazdil void MaybeRecordStat(MethodCompilationStat compilation_stat, size_t count = 1) const; 48acf735c13998ad2a175f5a17e7bfce220073279dCalin Juravle 4975be28332b278cff9039b54bfb228ac72f539cccRoland Levillain HGraph* const graph_; 50acf735c13998ad2a175f5a17e7bfce220073279dCalin Juravle // Used to record stats about the optimization. 51acf735c13998ad2a175f5a17e7bfce220073279dCalin Juravle OptimizingCompilerStats* const stats_; 5275be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 5375be28332b278cff9039b54bfb228ac72f539cccRoland Levillain private: 5475be28332b278cff9039b54bfb228ac72f539cccRoland Levillain // Optimization pass name. 5575be28332b278cff9039b54bfb228ac72f539cccRoland Levillain const char* pass_name_; 5675be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 5775be28332b278cff9039b54bfb228ac72f539cccRoland Levillain DISALLOW_COPY_AND_ASSIGN(HOptimization); 5875be28332b278cff9039b54bfb228ac72f539cccRoland Levillain}; 5975be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 6075be28332b278cff9039b54bfb228ac72f539cccRoland Levillain} // namespace art 6175be28332b278cff9039b54bfb228ac72f539cccRoland Levillain 6275be28332b278cff9039b54bfb228ac72f539cccRoland Levillain#endif // ART_COMPILER_OPTIMIZING_OPTIMIZATION_H_ 63