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