LCOV - code coverage report
Current view: top level - gcc - tree-ssa-operands.h Coverage Total Hit
Test: gcc.info Lines: 100.0 % 4 4
Test Date: 2026-02-28 14:20:25 Functions: - 0 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* SSA operand management for trees.
       2              :    Copyright (C) 2003-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              : #ifndef GCC_TREE_SSA_OPERANDS_H
      21              : #define GCC_TREE_SSA_OPERANDS_H
      22              : 
      23              : /* Interface to SSA operands.  */
      24              : 
      25              : 
      26              : /* This represents a pointer to a DEF operand.  */
      27              : typedef tree *def_operand_p;
      28              : 
      29              : /* This represents a pointer to a USE operand.  */
      30              : typedef ssa_use_operand_t *use_operand_p;
      31              : 
      32              : /* NULL operand types.  */
      33              : #define NULL_USE_OPERAND_P              ((use_operand_p)NULL)
      34              : #define NULL_DEF_OPERAND_P              ((def_operand_p)NULL)
      35              : 
      36              : /* This represents the USE operands of a stmt.  */
      37              : struct use_optype_d
      38              : {
      39              :   struct use_optype_d *next;
      40              :   struct ssa_use_operand_t use_ptr;
      41              : };
      42              : typedef struct use_optype_d *use_optype_p;
      43              : 
      44              : /* This structure represents a variable sized buffer which is allocated by the
      45              :    operand memory manager.  Operands are suballocated out of this block.  The
      46              :    MEM array varies in size.  */
      47              : 
      48              : struct GTY((chain_next("%h.next"))) ssa_operand_memory_d {
      49              :   struct ssa_operand_memory_d *next;
      50              :   char mem[1];
      51              : };
      52              : 
      53              : /* Per-function operand caches.  */
      54              : struct GTY(()) ssa_operands {
      55              :    struct ssa_operand_memory_d *operand_memory;
      56              :    unsigned operand_memory_index;
      57              :    /* Current size of the operand memory buffer.  */
      58              :    unsigned int ssa_operand_mem_size;
      59              : 
      60              :    bool ops_active;
      61              : 
      62              :    struct use_optype_d * GTY ((skip (""))) free_uses;
      63              : };
      64              : 
      65              : #define USE_FROM_PTR(PTR)       get_use_from_ptr (PTR)
      66              : #define DEF_FROM_PTR(PTR)       get_def_from_ptr (PTR)
      67              : #define SET_USE(USE, V)         set_ssa_use_from_ptr (USE, V)
      68              : #define SET_DEF(DEF, V)         ((*(DEF)) = (V))
      69              : 
      70              : #define USE_STMT(USE)           (USE)->loc.stmt
      71              : 
      72              : #define USE_OP_PTR(OP)          (&((OP)->use_ptr))
      73              : #define USE_OP(OP)              (USE_FROM_PTR (USE_OP_PTR (OP)))
      74              : 
      75              : #define PHI_RESULT(PHI)         gimple_phi_result (PHI)
      76              : #define SET_PHI_RESULT(PHI, V)  SET_DEF (gimple_phi_result_ptr (PHI), (V))
      77              : #define PHI_ARG_DEF_PTR(PHI, I) gimple_phi_arg_imm_use_ptr ((PHI), (I))
      78              : #define PHI_ARG_DEF(PHI, I)     gimple_phi_arg_def ((PHI), (I))
      79              : #define SET_PHI_ARG_DEF(PHI, I, V)                                      \
      80              :                                 SET_USE (PHI_ARG_DEF_PTR ((PHI), (I)), (V))
      81              : #define SET_PHI_ARG_DEF_ON_EDGE(PHI, E, V)                                    \
      82              :                                 SET_USE (gimple_phi_arg_imm_use_ptr_from_edge \
      83              :                                            ((PHI), (E)), (V))
      84              : #define PHI_ARG_DEF_FROM_EDGE(PHI, E)                                   \
      85              :                                 gimple_phi_arg_def_from_edge ((PHI), (E))
      86              : #define PHI_ARG_DEF_PTR_FROM_EDGE(PHI, E)                               \
      87              :                                 gimple_phi_arg_imm_use_ptr_from_edge ((PHI), (E))
      88              : #define PHI_ARG_INDEX_FROM_USE(USE)   phi_arg_index_from_use (USE)
      89              : 
      90              : 
      91              : extern bool ssa_operands_active (struct function *);
      92              : extern void init_ssa_operands (struct function *fn);
      93              : extern void fini_ssa_operands (struct function *);
      94              : extern bool verify_ssa_operands (struct function *, gimple *stmt);
      95              : extern void free_stmt_operands (struct function *, gimple *);
      96              : extern void update_stmt_operands (struct function *, gimple *);
      97              : extern void swap_ssa_operands (gimple *, tree *, tree *);
      98              : extern bool verify_imm_links (FILE *f, tree var);
      99              : 
     100              : extern void dump_immediate_uses_for (FILE *file, tree var);
     101              : extern void dump_immediate_uses (FILE *file);
     102              : extern void debug_immediate_uses (void);
     103              : extern void debug_immediate_uses_for (tree var);
     104              : 
     105              : extern void unlink_stmt_vdef (gimple *);
     106              : 
     107              : /* Return the tree pointed-to by USE.  */
     108              : inline tree
     109  35225240688 : get_use_from_ptr (use_operand_p use)
     110              : {
     111  35225240688 :   return *(use->use);
     112              : }
     113              : 
     114              : /* Return the tree pointed-to by DEF.  */
     115              : inline tree
     116    424491043 : get_def_from_ptr (def_operand_p def)
     117              : {
     118    424491043 :   return *def;
     119              : }
     120              : 
     121              : #endif  /* GCC_TREE_SSA_OPERANDS_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.