Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/Transforms/InstCombine/InstCombine.h
Line
Count
Source
1
//===- InstCombine.h - InstCombine pass -------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
/// \file
9
///
10
/// This file provides the primary interface to the instcombine pass. This pass
11
/// is suitable for use in the new pass manager. For a pass that works with the
12
/// legacy pass manager, use \c createInstructionCombiningPass().
13
///
14
//===----------------------------------------------------------------------===//
15
16
#ifndef LLVM_TRANSFORMS_INSTCOMBINE_INSTCOMBINE_H
17
#define LLVM_TRANSFORMS_INSTCOMBINE_INSTCOMBINE_H
18
19
#include "llvm/IR/Function.h"
20
#include "llvm/IR/PassManager.h"
21
#include "llvm/Transforms/InstCombine/InstCombineWorklist.h"
22
23
namespace llvm {
24
25
class InstCombinePass : public PassInfoMixin<InstCombinePass> {
26
  InstCombineWorklist Worklist;
27
  bool ExpensiveCombines;
28
29
public:
30
546
  static StringRef name() { return "InstCombinePass"; }
31
32
  explicit InstCombinePass(bool ExpensiveCombines = true)
33
1.38k
      : ExpensiveCombines(ExpensiveCombines) {}
34
35
  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
36
};
37
38
/// The legacy pass manager's instcombine pass.
39
///
40
/// This is a basic whole-function wrapper around the instcombine utility. It
41
/// will try to combine all instructions in the function.
42
class InstructionCombiningPass : public FunctionPass {
43
  InstCombineWorklist Worklist;
44
  const bool ExpensiveCombines;
45
46
public:
47
  static char ID; // Pass identification, replacement for typeid
48
49
  InstructionCombiningPass(bool ExpensiveCombines = true)
50
107k
      : FunctionPass(ID), ExpensiveCombines(ExpensiveCombines) {
51
107k
    initializeInstructionCombiningPassPass(*PassRegistry::getPassRegistry());
52
107k
  }
53
54
  void getAnalysisUsage(AnalysisUsage &AU) const override;
55
  bool runOnFunction(Function &F) override;
56
};
57
58
//===----------------------------------------------------------------------===//
59
//
60
// InstructionCombining - Combine instructions to form fewer, simple
61
// instructions. This pass does not modify the CFG, and has a tendency to make
62
// instructions dead, so a subsequent DCE pass is useful.
63
//
64
// This pass combines things like:
65
//    %Y = add int 1, %X
66
//    %Z = add int 1, %Y
67
// into:
68
//    %Z = add int 2, %X
69
//
70
FunctionPass *createInstructionCombiningPass(bool ExpensiveCombines = true);
71
}
72
73
#endif