LCOV - code coverage report
Current view: top level - include/llvm/Transforms/InstCombine - InstCombine.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 6 6 100.0 %
Date: 2018-10-20 13:21:21 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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, use \c createInstructionCombiningPass().
      14             : ///
      15             : //===----------------------------------------------------------------------===//
      16             : 
      17             : #ifndef LLVM_TRANSFORMS_INSTCOMBINE_INSTCOMBINE_H
      18             : #define LLVM_TRANSFORMS_INSTCOMBINE_INSTCOMBINE_H
      19             : 
      20             : #include "llvm/IR/Function.h"
      21             : #include "llvm/IR/PassManager.h"
      22             : #include "llvm/Transforms/InstCombine/InstCombineWorklist.h"
      23             : 
      24             : namespace llvm {
      25             : 
      26        1324 : class InstCombinePass : public PassInfoMixin<InstCombinePass> {
      27             :   InstCombineWorklist Worklist;
      28             :   bool ExpensiveCombines;
      29             : 
      30             : public:
      31             :   static StringRef name() { return "InstCombinePass"; }
      32             : 
      33             :   explicit InstCombinePass(bool ExpensiveCombines = true)
      34         662 :       : ExpensiveCombines(ExpensiveCombines) {}
      35             : 
      36             :   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
      37             : };
      38             : 
      39             : /// The legacy pass manager's instcombine pass.
      40             : ///
      41             : /// This is a basic whole-function wrapper around the instcombine utility. It
      42             : /// will try to combine all instructions in the function.
      43             : class InstructionCombiningPass : public FunctionPass {
      44             :   InstCombineWorklist Worklist;
      45             :   const bool ExpensiveCombines;
      46             : 
      47             : public:
      48             :   static char ID; // Pass identification, replacement for typeid
      49             : 
      50       13317 :   InstructionCombiningPass(bool ExpensiveCombines = true)
      51       26634 :       : FunctionPass(ID), ExpensiveCombines(ExpensiveCombines) {
      52       13317 :     initializeInstructionCombiningPassPass(*PassRegistry::getPassRegistry());
      53       13317 :   }
      54             : 
      55             :   void getAnalysisUsage(AnalysisUsage &AU) const override;
      56             :   bool runOnFunction(Function &F) override;
      57             : };
      58             : 
      59             : //===----------------------------------------------------------------------===//
      60             : //
      61             : // InstructionCombining - Combine instructions to form fewer, simple
      62             : // instructions. This pass does not modify the CFG, and has a tendency to make
      63             : // instructions dead, so a subsequent DCE pass is useful.
      64             : //
      65             : // This pass combines things like:
      66             : //    %Y = add int 1, %X
      67             : //    %Z = add int 1, %Y
      68             : // into:
      69             : //    %Z = add int 2, %X
      70             : //
      71             : FunctionPass *createInstructionCombiningPass(bool ExpensiveCombines = true);
      72             : }
      73             : 
      74             : #endif

Generated by: LCOV version 1.13