LCOV - code coverage report
Current view: top level - include/llvm/MC - MachineLocation.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 3 3 100.0 %
Date: 2017-09-14 15:23:50 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- llvm/MC/MachineLocation.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             : // The MachineLocation class is used to represent a simple location in a machine
      10             : // frame.  Locations will be one of two forms; a register or an address formed
      11             : // from a base address plus an offset.  Register indirection can be specified by
      12             : // explicitly passing an offset to the constructor.
      13             : //===----------------------------------------------------------------------===//
      14             : 
      15             : #ifndef LLVM_MC_MACHINELOCATION_H
      16             : #define LLVM_MC_MACHINELOCATION_H
      17             : 
      18             : #include <cstdint>
      19             : #include <cassert>
      20             : 
      21             : namespace llvm {
      22             : 
      23             : class MachineLocation {
      24             : private:
      25             :   bool IsRegister = false;              ///< True if location is a register.
      26             :   unsigned Register = 0;                ///< gcc/gdb register number.
      27             : 
      28             : public:
      29             :   enum : uint32_t {
      30             :     // The target register number for an abstract frame pointer. The value is
      31             :     // an arbitrary value that doesn't collide with any real target register.
      32             :     VirtualFP = ~0U
      33             :   };
      34             : 
      35         434 :   MachineLocation() = default;
      36             :   /// Create a direct register location.
      37             :   explicit MachineLocation(unsigned R, bool Indirect = false)
      38       36286 :       : IsRegister(!Indirect), Register(R) {}
      39             : 
      40             :   bool operator==(const MachineLocation &Other) const {
      41       23487 :     return IsRegister == Other.IsRegister && Register == Other.Register;
      42             :   }
      43             : 
      44             :   // Accessors.
      45             :   /// \return true iff this is a register-indirect location.
      46             :   bool isIndirect()      const { return !IsRegister; }
      47             :   bool isReg()           const { return IsRegister; }
      48             :   unsigned getReg()      const { return Register; }
      49             :   void setIsRegister(bool Is)  { IsRegister = Is; }
      50             :   void setRegister(unsigned R) { Register = R; }
      51             : };
      52             : 
      53             : inline bool operator!=(const MachineLocation &LHS, const MachineLocation &RHS) {
      54             :   return !(LHS == RHS);
      55             : }
      56             : 
      57             : } // end namespace llvm
      58             : 
      59             : #endif // LLVM_MC_MACHINELOCATION_H

Generated by: LCOV version 1.13