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 17 namespace 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 ProcessImplicitDefs()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