LCOV - code coverage report
Current view: top level - lib/Target/AVR - AVRInstrInfo.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 1 1 100.0 %
Date: 2018-10-20 13:21:21 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- AVRInstrInfo.h - AVR Instruction Information ------------*- 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 contains the AVR implementation of the TargetInstrInfo class.
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #ifndef LLVM_AVR_INSTR_INFO_H
      15             : #define LLVM_AVR_INSTR_INFO_H
      16             : 
      17             : #include "llvm/CodeGen/TargetInstrInfo.h"
      18             : 
      19             : #include "AVRRegisterInfo.h"
      20             : 
      21             : #define GET_INSTRINFO_HEADER
      22             : #include "AVRGenInstrInfo.inc"
      23             : #undef GET_INSTRINFO_HEADER
      24             : 
      25             : namespace llvm {
      26             : 
      27             : namespace AVRCC {
      28             : 
      29             : /// AVR specific condition codes.
      30             : /// These correspond to `AVR_*_COND` in `AVRInstrInfo.td`.
      31             : /// They must be kept in synch.
      32             : enum CondCodes {
      33             :   COND_EQ, //!< Equal
      34             :   COND_NE, //!< Not equal
      35             :   COND_GE, //!< Greater than or equal
      36             :   COND_LT, //!< Less than
      37             :   COND_SH, //!< Unsigned same or higher
      38             :   COND_LO, //!< Unsigned lower
      39             :   COND_MI, //!< Minus
      40             :   COND_PL, //!< Plus
      41             :   COND_INVALID
      42             : };
      43             : 
      44             : } // end of namespace AVRCC
      45             : 
      46             : namespace AVRII {
      47             : 
      48             : /// Specifies a target operand flag.
      49             : enum TOF {
      50             :   MO_NO_FLAG,
      51             : 
      52             :   /// On a symbol operand, this represents the lo part.
      53             :   MO_LO = (1 << 1),
      54             : 
      55             :   /// On a symbol operand, this represents the hi part.
      56             :   MO_HI = (1 << 2),
      57             : 
      58             :   /// On a symbol operand, this represents it has to be negated.
      59             :   MO_NEG = (1 << 3)
      60             : };
      61             : 
      62             : } // end of namespace AVRII
      63             : 
      64             : /// Utilities related to the AVR instruction set.
      65             : class AVRInstrInfo : public AVRGenInstrInfo {
      66             : public:
      67             :   explicit AVRInstrInfo();
      68             : 
      69       57793 :   const AVRRegisterInfo &getRegisterInfo() const { return RI; }
      70             :   const MCInstrDesc &getBrCond(AVRCC::CondCodes CC) const;
      71             :   AVRCC::CondCodes getCondFromBranchOpc(unsigned Opc) const;
      72             :   AVRCC::CondCodes getOppositeCondition(AVRCC::CondCodes CC) const;
      73             :   unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
      74             : 
      75             :   void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
      76             :                    const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
      77             :                    bool KillSrc) const override;
      78             :   void storeRegToStackSlot(MachineBasicBlock &MBB,
      79             :                            MachineBasicBlock::iterator MI, unsigned SrcReg,
      80             :                            bool isKill, int FrameIndex,
      81             :                            const TargetRegisterClass *RC,
      82             :                            const TargetRegisterInfo *TRI) const override;
      83             :   void loadRegFromStackSlot(MachineBasicBlock &MBB,
      84             :                             MachineBasicBlock::iterator MI, unsigned DestReg,
      85             :                             int FrameIndex, const TargetRegisterClass *RC,
      86             :                             const TargetRegisterInfo *TRI) const override;
      87             :   unsigned isLoadFromStackSlot(const MachineInstr &MI,
      88             :                                int &FrameIndex) const override;
      89             :   unsigned isStoreToStackSlot(const MachineInstr &MI,
      90             :                               int &FrameIndex) const override;
      91             : 
      92             :   // Branch analysis.
      93             :   bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
      94             :                      MachineBasicBlock *&FBB,
      95             :                      SmallVectorImpl<MachineOperand> &Cond,
      96             :                      bool AllowModify = false) const override;
      97             :   unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
      98             :                         MachineBasicBlock *FBB, ArrayRef<MachineOperand> Cond,
      99             :                         const DebugLoc &DL,
     100             :                         int *BytesAdded = nullptr) const override;
     101             :   unsigned removeBranch(MachineBasicBlock &MBB,
     102             :                         int *BytesRemoved = nullptr) const override;
     103             :   bool
     104             :   reverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const override;
     105             : 
     106             :   MachineBasicBlock *getBranchDestBlock(const MachineInstr &MI) const override;
     107             : 
     108             :   bool isBranchOffsetInRange(unsigned BranchOpc,
     109             :                              int64_t BrOffset) const override;
     110             : 
     111             :   unsigned insertIndirectBranch(MachineBasicBlock &MBB,
     112             :                                 MachineBasicBlock &NewDestBB,
     113             :                                 const DebugLoc &DL,
     114             :                                 int64_t BrOffset,
     115             :                                 RegScavenger *RS) const override;
     116             : private:
     117             :   const AVRRegisterInfo RI;
     118             : };
     119             : 
     120             : } // end namespace llvm
     121             : 
     122             : #endif // LLVM_AVR_INSTR_INFO_H

Generated by: LCOV version 1.13