#ifndef LLVM_TRANSFORMS_SCALAR_STORELOADFORWARD_H
#define LLVM_TRANSFORMS_SCALAR_STORELOADFORWARD_H

#include "llvm/IR/PassManager.h"
#include "llvm/IR/Function.h"
#include <set>
namespace llvm {
namespace aocc {
  struct StoreLoadForwardPass : llvm::PassInfoMixin<StoreLoadForwardPass> {
    bool isLTO;
    std::set<StringRef> SafeLibFuncs;
    std::set<Intrinsic::ID> SafeIntrinsics;
    void buildSafeLibFuncs(std::set<StringRef> &, std::set<Intrinsic::ID>&);
    StoreLoadForwardPass(bool _isLTO = false) : isLTO(_isLTO) {
      buildSafeLibFuncs(SafeLibFuncs, SafeIntrinsics);
    }
    llvm::PreservedAnalyses run(llvm::Function &F, llvm::FunctionAnalysisManager &);
  };
}
}

#endif
