| //===--- HexagonBitTracker.h ----------------------------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef HEXAGONBITTRACKER_H |
| #define HEXAGONBITTRACKER_H |
| |
| #include "BitTracker.h" |
| #include "llvm/ADT/DenseMap.h" |
| |
| namespace llvm { |
| class HexagonInstrInfo; |
| class HexagonRegisterInfo; |
| |
| struct HexagonEvaluator : public BitTracker::MachineEvaluator { |
| typedef BitTracker::CellMapType CellMapType; |
| typedef BitTracker::RegisterRef RegisterRef; |
| typedef BitTracker::RegisterCell RegisterCell; |
| typedef BitTracker::BranchTargetList BranchTargetList; |
| |
| HexagonEvaluator(const HexagonRegisterInfo &tri, MachineRegisterInfo &mri, |
| const HexagonInstrInfo &tii, MachineFunction &mf); |
| |
| bool evaluate(const MachineInstr *MI, const CellMapType &Inputs, |
| CellMapType &Outputs) const override; |
| bool evaluate(const MachineInstr *BI, const CellMapType &Inputs, |
| BranchTargetList &Targets, bool &FallsThru) const override; |
| |
| BitTracker::BitMask mask(unsigned Reg, unsigned Sub) const override; |
| |
| MachineFunction &MF; |
| MachineFrameInfo &MFI; |
| const HexagonInstrInfo &TII; |
| |
| private: |
| bool evaluateLoad(const MachineInstr *MI, const CellMapType &Inputs, |
| CellMapType &Outputs) const; |
| bool evaluateFormalCopy(const MachineInstr *MI, const CellMapType &Inputs, |
| CellMapType &Outputs) const; |
| |
| unsigned getNextPhysReg(unsigned PReg, unsigned Width) const; |
| unsigned getVirtRegFor(unsigned PReg) const; |
| |
| // Type of formal parameter extension. |
| struct ExtType { |
| enum { SExt, ZExt }; |
| char Type; |
| uint16_t Width; |
| ExtType() : Type(0), Width(0) {} |
| ExtType(char t, uint16_t w) : Type(t), Width(w) {} |
| }; |
| // Map VR -> extension type. |
| typedef DenseMap<unsigned, ExtType> RegExtMap; |
| RegExtMap VRX; |
| }; |
| |
| } // end namespace llvm |
| |
| #endif |