182091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray/* 282091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * Copyright (C) 2015 The Android Open Source Project 382091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * 482091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * Licensed under the Apache License, Version 2.0 (the "License"); 582091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * you may not use this file except in compliance with the License. 682091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * You may obtain a copy of the License at 782091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * 882091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * http://www.apache.org/licenses/LICENSE-2.0 982091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * 1082091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * Unless required by applicable law or agreed to in writing, software 1182091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * distributed under the License is distributed on an "AS IS" BASIS, 1282091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * See the License for the specific language governing permissions and 1482091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray * limitations under the License. 1582091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray */ 1682091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 1782091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray#ifndef ART_COMPILER_OPTIMIZING_LICM_H_ 1882091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray#define ART_COMPILER_OPTIMIZING_LICM_H_ 1982091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 2082091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray#include "nodes.h" 2182091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray#include "optimization.h" 2282091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 2382091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffraynamespace art { 2482091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 2582091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffrayclass SideEffectsAnalysis; 2682091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 2782091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffrayclass LICM : public HOptimization { 2882091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray public: 2938e9e8046ea2196284bdb4638771c31108a30a4aJean-Philippe Halimi LICM(HGraph* graph, const SideEffectsAnalysis& side_effects, OptimizingCompilerStats* stats) 3038e9e8046ea2196284bdb4638771c31108a30a4aJean-Philippe Halimi : HOptimization(graph, kLoopInvariantCodeMotionPassName, stats), 3138e9e8046ea2196284bdb4638771c31108a30a4aJean-Philippe Halimi side_effects_(side_effects) {} 3282091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 3382091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray void Run() OVERRIDE; 3482091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 357c3952f423b8213083d60596a5f0bf4237ca3f7bAndreas Gampe static constexpr const char* kLoopInvariantCodeMotionPassName = "licm"; 367c3952f423b8213083d60596a5f0bf4237ca3f7bAndreas Gampe 3782091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray private: 3882091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray const SideEffectsAnalysis& side_effects_; 3982091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 4082091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray DISALLOW_COPY_AND_ASSIGN(LICM); 4182091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray}; 4282091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 4382091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray} // namespace art 4482091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray 4582091dad38f3e5bfaf3b6984c9ab73069fb68310Nicolas Geoffray#endif // ART_COMPILER_OPTIMIZING_LICM_H_ 46