(root)/
gcc-13.2.0/
gcc/
lower-subreg.h
       1  /* Target-dependent costs for lower-subreg.cc.
       2     Copyright (C) 2012-2023 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  #ifndef LOWER_SUBREG_H
      21  #define LOWER_SUBREG_H 1
      22  
      23  /* Information about whether, and where, lower-subreg should be applied.  */
      24  struct lower_subreg_choices {
      25    /* A boolean vector for move splitting that is indexed by mode and is
      26       true for each mode that is to have its copies split.  */
      27    bool move_modes_to_split[MAX_MACHINE_MODE];
      28  
      29    /* True if zero-extensions from word_mode to twice_word_mode should
      30       be split.  */
      31    bool splitting_zext;
      32  
      33    /* Index X is true if twice_word_mode shifts by X + BITS_PER_WORD
      34       should be split.  */
      35    bool splitting_ashift[MAX_BITS_PER_WORD];
      36    bool splitting_lshiftrt[MAX_BITS_PER_WORD];
      37    bool splitting_ashiftrt[MAX_BITS_PER_WORD];
      38  
      39    /* True if there is at least one mode that is worth splitting.  */
      40    bool something_to_do;
      41  };
      42  
      43  /* Target-specific information for the subreg lowering pass.  */
      44  struct target_lower_subreg {
      45    /* An integer mode that is twice as wide as word_mode.  */
      46    scalar_int_mode_pod x_twice_word_mode;
      47  
      48    /* What we have decided to do when optimizing for size (index 0)
      49       and speed (index 1).  */
      50    struct lower_subreg_choices x_choices[2];
      51  };
      52  
      53  extern struct target_lower_subreg default_target_lower_subreg;
      54  #if SWITCHABLE_TARGET
      55  extern struct target_lower_subreg *this_target_lower_subreg;
      56  #else
      57  #define this_target_lower_subreg (&default_target_lower_subreg)
      58  #endif
      59  
      60  #endif