Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/Transforms/Utils/SimplifyIndVar.h
Line
Count
Source (jump to first uncovered line)
1
//===-- llvm/Transforms/Utils/SimplifyIndVar.h - Indvar Utils ---*- 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
//
9
// This file defines in interface for induction variable simplification. It does
10
// not define any actual pass or policy, but provides a single function to
11
// simplify a loop's induction variables based on ScalarEvolution.
12
//
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_TRANSFORMS_UTILS_SIMPLIFYINDVAR_H
16
#define LLVM_TRANSFORMS_UTILS_SIMPLIFYINDVAR_H
17
18
#include "llvm/IR/ValueHandle.h"
19
20
namespace llvm {
21
22
class CastInst;
23
class DominatorTree;
24
class Loop;
25
class LoopInfo;
26
class PHINode;
27
class ScalarEvolution;
28
class SCEVExpander;
29
30
/// Interface for visiting interesting IV users that are recognized but not
31
/// simplified by this utility.
32
class IVVisitor {
33
protected:
34
  const DominatorTree *DT = nullptr;
35
36
  virtual void anchor();
37
38
public:
39
322k
  IVVisitor() = default;
40
322k
  virtual ~IVVisitor() = default;
41
42
0
  const DominatorTree *getDomTree() const { return DT; }
43
  virtual void visitCast(CastInst *Cast) = 0;
44
};
45
46
/// simplifyUsersOfIV - Simplify instructions that use this induction variable
47
/// by using ScalarEvolution to analyze the IV's recurrence.
48
bool simplifyUsersOfIV(PHINode *CurrIV, ScalarEvolution *SE, DominatorTree *DT,
49
                       LoopInfo *LI, SmallVectorImpl<WeakTrackingVH> &Dead,
50
                       SCEVExpander &Rewriter, IVVisitor *V = nullptr);
51
52
/// SimplifyLoopIVs - Simplify users of induction variables within this
53
/// loop. This does not actually change or add IVs.
54
bool simplifyLoopIVs(Loop *L, ScalarEvolution *SE, DominatorTree *DT,
55
                     LoopInfo *LI, SmallVectorImpl<WeakTrackingVH> &Dead);
56
57
} // end namespace llvm
58
59
#endif // LLVM_TRANSFORMS_UTILS_SIMPLIFYINDVAR_H