1 //===- InstCombine.h - InstCombine pass -------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// \file 10 /// 11 /// This file provides the primary interface to the instcombine pass. This pass 12 /// is suitable for use in the new pass manager. For a pass that works with the 13 /// legacy pass manager, please look for \c createInstructionCombiningPass() in 14 /// Scalar.h. 15 /// 16 //===----------------------------------------------------------------------===// 17 18 #ifndef LLVM_TRANSFORMS_INSTCOMBINE_INSTCOMBINE_H 19 #define LLVM_TRANSFORMS_INSTCOMBINE_INSTCOMBINE_H 20 21 #include "llvm/IR/Function.h" 22 #include "llvm/IR/PassManager.h" 23 #include "llvm/Transforms/InstCombine/InstCombineWorklist.h" 24 25 namespace llvm { 26 27 class InstCombinePass { 28 InstCombineWorklist Worklist; 29 30 public: 31 static StringRef name() { return "InstCombinePass"; } 32 33 // Explicitly define constructors for MSVC. 34 InstCombinePass() {} 35 InstCombinePass(InstCombinePass &&Arg) : Worklist(std::move(Arg.Worklist)) {} 36 InstCombinePass &operator=(InstCombinePass &&RHS) { 37 Worklist = std::move(RHS.Worklist); 38 return *this; 39 } 40 41 PreservedAnalyses run(Function &F, AnalysisManager<Function> *AM); 42 }; 43 44 } 45 46 #endif 47