LCOV - code coverage report
Current view: top level - gcc - addresses.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 90.0 % 10 9
Test Date: 2026-02-28 14:20:25 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Inline functions to test validity of reg classes for addressing modes.
       2              :    Copyright (C) 2006-2026 Free Software Foundation, Inc.
       3              : 
       4              : This file is part of GCC.
       5              : 
       6              : GCC is free software; you can redistribute it and/or modify it under
       7              : the terms of the GNU General Public License as published by the Free
       8              : Software Foundation; either version 3, or (at your option) any later
       9              : version.
      10              : 
      11              : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      12              : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      13              : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      14              : for more details.
      15              : 
      16              : You should have received a copy of the GNU General Public License
      17              : along with GCC; see the file COPYING3.  If not see
      18              : <http://www.gnu.org/licenses/>.  */
      19              : 
      20              : /* Wrapper function to unify target macros MODE_CODE_BASE_REG_CLASS,
      21              :    MODE_BASE_REG_REG_CLASS, MODE_BASE_REG_CLASS and BASE_REG_CLASS.
      22              :    Arguments as for the MODE_CODE_BASE_REG_CLASS macro.  */
      23              : 
      24              : #ifndef GCC_ADDRESSES_H
      25              : #define GCC_ADDRESSES_H
      26              : 
      27              : inline enum reg_class
      28    214517208 : base_reg_class (machine_mode mode ATTRIBUTE_UNUSED,
      29              :                 addr_space_t as ATTRIBUTE_UNUSED,
      30              :                 enum rtx_code outer_code ATTRIBUTE_UNUSED,
      31              :                 enum rtx_code index_code ATTRIBUTE_UNUSED,
      32              :                 rtx_insn *insn ATTRIBUTE_UNUSED = NULL)
      33              : {
      34              : #ifdef INSN_BASE_REG_CLASS
      35    214517208 :   return INSN_BASE_REG_CLASS (insn);
      36              : #else
      37              : #ifdef MODE_CODE_BASE_REG_CLASS
      38              :   return MODE_CODE_BASE_REG_CLASS (MACRO_MODE (mode), as, outer_code,
      39              :                                    index_code);
      40              : #else
      41              : #ifdef MODE_BASE_REG_REG_CLASS
      42              :   if (index_code == REG)
      43              :     return MODE_BASE_REG_REG_CLASS (MACRO_MODE (mode));
      44              : #endif
      45              : #ifdef MODE_BASE_REG_CLASS
      46              :   return MODE_BASE_REG_CLASS (MACRO_MODE (mode));
      47              : #else
      48              :   return BASE_REG_CLASS;
      49              : #endif
      50              : #endif
      51              : #endif
      52              : }
      53              : 
      54              : inline enum reg_class
      55     39412034 : index_reg_class (rtx_insn *insn ATTRIBUTE_UNUSED = NULL)
      56              : {
      57              : #ifdef INSN_INDEX_REG_CLASS
      58     39412034 :   return INSN_INDEX_REG_CLASS (insn);
      59              : #else
      60              :   return INDEX_REG_CLASS;
      61              : #endif
      62              : }
      63              : 
      64              : /* Wrapper function to unify target macros REGNO_MODE_CODE_OK_FOR_BASE_P,
      65              :    REGNO_MODE_OK_FOR_REG_BASE_P, REGNO_MODE_OK_FOR_BASE_P and
      66              :    REGNO_OK_FOR_BASE_P.
      67              :    Arguments as for the REGNO_MODE_CODE_OK_FOR_BASE_P macro.  */
      68              : 
      69              : inline bool
      70      1287243 : ok_for_base_p_1 (unsigned regno ATTRIBUTE_UNUSED,
      71              :                  machine_mode mode ATTRIBUTE_UNUSED,
      72              :                  addr_space_t as ATTRIBUTE_UNUSED,
      73              :                  enum rtx_code outer_code ATTRIBUTE_UNUSED,
      74              :                  enum rtx_code index_code ATTRIBUTE_UNUSED,
      75              :                  rtx_insn* insn ATTRIBUTE_UNUSED = NULL)
      76              : {
      77              : #ifdef REGNO_OK_FOR_INSN_BASE_P
      78      1287243 :   return REGNO_OK_FOR_INSN_BASE_P (regno, insn);
      79              : #else
      80              : #ifdef REGNO_MODE_CODE_OK_FOR_BASE_P
      81              :   return REGNO_MODE_CODE_OK_FOR_BASE_P (regno, MACRO_MODE (mode), as,
      82              :                                         outer_code, index_code);
      83              : #else
      84              : #ifdef REGNO_MODE_OK_FOR_REG_BASE_P
      85              :   if (index_code == REG)
      86              :     return REGNO_MODE_OK_FOR_REG_BASE_P (regno, MACRO_MODE (mode));
      87              : #endif
      88              : #ifdef REGNO_MODE_OK_FOR_BASE_P
      89              :   return REGNO_MODE_OK_FOR_BASE_P (regno, MACRO_MODE (mode));
      90              : #else
      91              :   return REGNO_OK_FOR_BASE_P (regno);
      92              : #endif
      93              : #endif
      94              : #endif
      95              : }
      96              : 
      97              : /* Wrapper around ok_for_base_p_1, for use after register allocation is
      98              :    complete.  Arguments as for the called function.  */
      99              : 
     100              : inline bool
     101      1139289 : regno_ok_for_base_p (unsigned regno, machine_mode mode, addr_space_t as,
     102              :                      enum rtx_code outer_code, enum rtx_code index_code,
     103              :                      rtx_insn *insn = NULL)
     104              : {
     105      1139289 :   if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] >= 0)
     106            0 :     regno = reg_renumber[regno];
     107              : 
     108      1139289 :   return ok_for_base_p_1 (regno, mode, as, outer_code, index_code, insn);
     109              : }
     110              : 
     111              : #endif /* GCC_ADDRESSES_H */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.