1b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang/* 2b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * Copyright (C) 2016 The Android Open Source Project 3b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * 4b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * Licensed under the Apache License, Version 2.0 (the "License"); 5b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * you may not use this file except in compliance with the License. 6b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * You may obtain a copy of the License at 7b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * 8b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * http://www.apache.org/licenses/LICENSE-2.0 9b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * 10b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * Unless required by applicable law or agreed to in writing, software 11b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * distributed under the License is distributed on an "AS IS" BASIS, 12b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * See the License for the specific language governing permissions and 14b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * limitations under the License. 15b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang */ 16b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 17b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang#ifndef ART_COMPILER_OPTIMIZING_CHA_GUARD_OPTIMIZATION_H_ 18b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang#define ART_COMPILER_OPTIMIZING_CHA_GUARD_OPTIMIZATION_H_ 19b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 20b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang#include "optimization.h" 21b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 22b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yangnamespace art { 23b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 24b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang/** 25b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang * Optimize CHA guards by removing/moving them. 26b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang */ 27b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yangclass CHAGuardOptimization : public HOptimization { 28b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang public: 292ca10eb3f47ef3c2535c137853f7a63d10bb908bAart Bik explicit CHAGuardOptimization(HGraph* graph, 302ca10eb3f47ef3c2535c137853f7a63d10bb908bAart Bik const char* name = kCHAGuardOptimizationPassName) 312ca10eb3f47ef3c2535c137853f7a63d10bb908bAart Bik : HOptimization(graph, name) {} 32b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 33b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang void Run() OVERRIDE; 34b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 35b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang static constexpr const char* kCHAGuardOptimizationPassName = "cha_guard_optimization"; 36b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 37b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang private: 38b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang DISALLOW_COPY_AND_ASSIGN(CHAGuardOptimization); 39b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang}; 40b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 41b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang} // namespace art 42b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang 43b0b051ad6c9fab511346882650d5d689f805a980Mingyao Yang#endif // ART_COMPILER_OPTIMIZING_CHA_GUARD_OPTIMIZATION_H_ 44