1//===--- HexagonBitTracker.h ----------------------------------------------===// 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#ifndef HEXAGONBITTRACKER_H 11#define HEXAGONBITTRACKER_H 12 13#include "BitTracker.h" 14#include "llvm/ADT/DenseMap.h" 15 16namespace llvm { 17 class HexagonInstrInfo; 18 class HexagonRegisterInfo; 19 20struct HexagonEvaluator : public BitTracker::MachineEvaluator { 21 typedef BitTracker::CellMapType CellMapType; 22 typedef BitTracker::RegisterRef RegisterRef; 23 typedef BitTracker::RegisterCell RegisterCell; 24 typedef BitTracker::BranchTargetList BranchTargetList; 25 26 HexagonEvaluator(const HexagonRegisterInfo &tri, MachineRegisterInfo &mri, 27 const HexagonInstrInfo &tii, MachineFunction &mf); 28 29 bool evaluate(const MachineInstr *MI, const CellMapType &Inputs, 30 CellMapType &Outputs) const override; 31 bool evaluate(const MachineInstr *BI, const CellMapType &Inputs, 32 BranchTargetList &Targets, bool &FallsThru) const override; 33 34 BitTracker::BitMask mask(unsigned Reg, unsigned Sub) const override; 35 36 MachineFunction &MF; 37 MachineFrameInfo &MFI; 38 const HexagonInstrInfo &TII; 39 40private: 41 bool evaluateLoad(const MachineInstr *MI, const CellMapType &Inputs, 42 CellMapType &Outputs) const; 43 bool evaluateFormalCopy(const MachineInstr *MI, const CellMapType &Inputs, 44 CellMapType &Outputs) const; 45 46 unsigned getNextPhysReg(unsigned PReg, unsigned Width) const; 47 unsigned getVirtRegFor(unsigned PReg) const; 48 49 // Type of formal parameter extension. 50 struct ExtType { 51 enum { SExt, ZExt }; 52 char Type; 53 uint16_t Width; 54 ExtType() : Type(0), Width(0) {} 55 ExtType(char t, uint16_t w) : Type(t), Width(w) {} 56 }; 57 // Map VR -> extension type. 58 typedef DenseMap<unsigned, ExtType> RegExtMap; 59 RegExtMap VRX; 60}; 61 62} // end namespace llvm 63 64#endif 65