1//===-------------- llvm/CodeGen/ProcessImplicitDefs.h ----------*- 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
10
11#ifndef LLVM_CODEGEN_PROCESSIMPLICITDEFS_H
12#define LLVM_CODEGEN_PROCESSIMPLICITDEFS_H
13
14#include "llvm/CodeGen/MachineFunctionPass.h"
15#include "llvm/ADT/SmallSet.h"
16
17namespace llvm {
18
19  class MachineInstr;
20  class TargetInstrInfo;
21  class TargetRegisterInfo;
22  class MachineRegisterInfo;
23  class LiveVariables;
24
25  /// Process IMPLICIT_DEF instructions and make sure there is one implicit_def
26  /// for each use. Add isUndef marker to implicit_def defs and their uses.
27  class ProcessImplicitDefs : public MachineFunctionPass {
28    const TargetInstrInfo *TII;
29    const TargetRegisterInfo *TRI;
30    MachineRegisterInfo *MRI;
31    LiveVariables *LV;
32
33    bool CanTurnIntoImplicitDef(MachineInstr *MI, unsigned Reg,
34                                unsigned OpIdx,
35                                SmallSet<unsigned, 8> &ImpDefRegs);
36
37  public:
38    static char ID;
39
40    ProcessImplicitDefs() : MachineFunctionPass(ID) {
41      initializeProcessImplicitDefsPass(*PassRegistry::getPassRegistry());
42    }
43
44    virtual void getAnalysisUsage(AnalysisUsage &au) const;
45
46    virtual bool runOnMachineFunction(MachineFunction &fn);
47  };
48
49}
50
51#endif // LLVM_CODEGEN_PROCESSIMPLICITDEFS_H
52