Compiler projects using llvm
#ifndef INCLUDE_UNIT_LICM_H
#define INCLUDE_UNIT_LICM_H

#include "llvm/IR/PassManager.h"

namespace llvm {
    class Function;
}

using namespace llvm;

namespace ece479k
{
/// Loop Invariant Code Motion Optimization Pass
///
/// Implements the relaxed-case:
///     - We move pure expressions even if they don't dominate all exits
///     - We move expressions with side effects if they dominate all exits
struct UnitLICM : PassInfoMixin<UnitLICM> {
    PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
};
} // namespace

#endif // INCLUDE_UNIT_LICM_H