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