AntiDepBreaker.h revision 8450a9090b38c0faf1401326dd7ec95358e995cc
1//=- llvm/CodeGen/AntiDepBreaker.h - Anti-Dependence Breaking -*- 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// This file implements the AntiDepBreaker class, which implements 11// anti-dependence breaking heuristics for post-register-allocation scheduling. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_CODEGEN_ANTIDEPBREAKER_H 16#define LLVM_CODEGEN_ANTIDEPBREAKER_H 17 18#include "llvm/CodeGen/MachineBasicBlock.h" 19#include "llvm/CodeGen/MachineFrameInfo.h" 20#include "llvm/CodeGen/MachineFunction.h" 21#include "llvm/CodeGen/MachineRegisterInfo.h" 22#include "llvm/CodeGen/ScheduleDAG.h" 23#include "llvm/Target/TargetRegisterInfo.h" 24#include "llvm/ADT/SmallSet.h" 25#include "llvm/ADT/SmallVector.h" 26#include <map> 27 28namespace llvm { 29 30/// AntiDepBreaker - This class works into conjunction with the 31/// post-RA scheduler to rename registers to break register 32/// anti-dependencies. 33class AntiDepBreaker { 34public: 35 typedef SmallSet<unsigned, 4> AntiDepRegSet; 36 typedef SmallVector<unsigned, 4> AntiDepRegVector; 37 typedef std::map<SUnit *, AntiDepRegVector> CandidateMap; 38 39 virtual ~AntiDepBreaker(); 40 41 /// GetMaxTrials - Return the maximum number of anti-dependence 42 /// breaking attempts that will be made for a block. 43 virtual unsigned GetMaxTrials() =0; 44 45 /// NeedCandidates - Return true if the schedule must provide 46 /// candidates with BreakAntiDependencies(). 47 virtual bool NeedCandidates() =0; 48 49 /// Start - Initialize anti-dep breaking for a new basic block. 50 virtual void StartBlock(MachineBasicBlock *BB) =0; 51 52 /// BreakAntiDependencies - Identifiy anti-dependencies within a 53 /// basic-block region and break them by renaming registers. Return 54 /// the number of anti-dependencies broken. 55 /// 56 virtual unsigned BreakAntiDependencies(std::vector<SUnit>& SUnits, 57 CandidateMap& Candidates, 58 MachineBasicBlock::iterator& Begin, 59 MachineBasicBlock::iterator& End, 60 unsigned InsertPosIndex) =0; 61 62 /// Observe - Update liveness information to account for the current 63 /// instruction, which will not be scheduled. 64 /// 65 virtual void Observe(MachineInstr *MI, unsigned Count, 66 unsigned InsertPosIndex) =0; 67 68 /// Finish - Finish anti-dep breaking for a basic block. 69 virtual void FinishBlock() =0; 70}; 71 72} 73 74#endif 75