LCOV - code coverage report
Current view: top level - gcc - gimple-expr.h (source / functions) Hit Total Coverage
Test: gcc.info Lines: 7 7 100.0 %
Date: 2023-07-19 08:18:47 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* Header file for gimple decl, type and expressions.
       2             :    Copyright (C) 2013-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 GCC_GIMPLE_EXPR_H
      21             : #define GCC_GIMPLE_EXPR_H
      22             : 
      23             : extern bool useless_type_conversion_p (tree, tree);
      24             : 
      25             : 
      26             : extern void gimple_set_body (tree, gimple_seq);
      27             : extern gimple_seq gimple_body (tree);
      28             : extern bool gimple_has_body_p (tree);
      29             : extern const char *gimple_decl_printable_name (tree, int);
      30             : extern tree copy_var_decl (tree, tree, tree);
      31             : extern tree create_tmp_var_name (const char *);
      32             : extern tree create_tmp_var_raw (tree, const char * = NULL);
      33             : extern tree create_tmp_var (tree, const char * = NULL);
      34             : extern tree create_tmp_reg (tree, const char * = NULL);
      35             : extern tree create_tmp_reg_fn (struct function *, tree, const char *);
      36             : 
      37             : 
      38             : extern void extract_ops_from_tree (tree, enum tree_code *, tree *, tree *,
      39             :                                    tree *);
      40             : extern void gimple_cond_get_ops_from_tree (tree, enum tree_code *, tree *,
      41             :                                            tree *);
      42             : extern bool is_gimple_lvalue (tree);
      43             : extern bool is_gimple_condexpr_for_cond (tree);
      44             : extern bool is_gimple_address (const_tree);
      45             : extern bool is_gimple_invariant_address (const_tree);
      46             : extern bool is_gimple_ip_invariant_address (const_tree);
      47             : extern bool is_gimple_min_invariant (const_tree);
      48             : extern bool is_gimple_ip_invariant (const_tree);
      49             : extern bool is_gimple_reg (tree);
      50             : extern bool is_gimple_val (tree);
      51             : extern bool is_gimple_asm_val (tree);
      52             : extern bool is_gimple_min_lval (tree);
      53             : extern bool is_gimple_call_addr (tree);
      54             : extern bool is_gimple_mem_ref_addr (tree);
      55             : extern void flush_mark_addressable_queue (void);
      56             : extern void mark_addressable (tree);
      57             : extern bool is_gimple_reg_rhs (tree);
      58             : extern tree canonicalize_cond_expr_cond (tree);
      59             : 
      60             : /* Return true if a conversion from either type of TYPE1 and TYPE2
      61             :    to the other is not required.  Otherwise return false.  */
      62             : 
      63             : inline bool
      64             : types_compatible_p (tree type1, tree type2)
      65             : {
      66             :   return (type1 == type2
      67             :           || (useless_type_conversion_p (type1, type2)
      68             :               && useless_type_conversion_p (type2, type1)));
      69             : }
      70             : 
      71             : /* Return true if TYPE is a suitable type for a scalar register variable.  */
      72             : 
      73             : inline bool
      74      454863 : is_gimple_reg_type (tree type)
      75             : {
      76      454863 :   return !AGGREGATE_TYPE_P (type);
      77             : }
      78             : 
      79             : /* Return true if T is a variable.  */
      80             : 
      81             : inline bool
      82      247750 : is_gimple_variable (tree t)
      83             : {
      84      247750 :   return (VAR_P (t)
      85      247750 :           || TREE_CODE (t) == PARM_DECL
      86      177734 :           || TREE_CODE (t) == RESULT_DECL
      87      415909 :           || TREE_CODE (t) == SSA_NAME);
      88             : }
      89             : 
      90             : /*  Return true if T is a GIMPLE identifier (something with an address).  */
      91             : 
      92             : inline bool
      93             : is_gimple_id (tree t)
      94             : {
      95             :   return (is_gimple_variable (t)
      96             :           || TREE_CODE (t) == FUNCTION_DECL
      97             :           || TREE_CODE (t) == LABEL_DECL
      98             :           || TREE_CODE (t) == CONST_DECL
      99             :           /* Allow string constants, since they are addressable.  */
     100             :           || TREE_CODE (t) == STRING_CST);
     101             : }
     102             : 
     103             : /* Return true if OP, an SSA name or a DECL is a virtual operand.  */
     104             : 
     105             : inline bool
     106             : virtual_operand_p (tree op)
     107             : {
     108             :   if (TREE_CODE (op) == SSA_NAME)
     109             :     return SSA_NAME_IS_VIRTUAL_OPERAND (op);
     110             : 
     111             :   if (VAR_P (op))
     112             :     return VAR_DECL_IS_VIRTUAL_OPERAND (op);
     113             : 
     114             :   return false;
     115             : }
     116             : 
     117             : /*  Return true if T is something whose address can be taken.  */
     118             : 
     119             : inline bool
     120             : is_gimple_addressable (tree t)
     121             : {
     122             :   return (is_gimple_id (t) || handled_component_p (t)
     123             :           || TREE_CODE (t) == TARGET_MEM_REF
     124             :           || TREE_CODE (t) == MEM_REF);
     125             : }
     126             : 
     127             : /* Return true if T is a valid gimple constant.  */
     128             : 
     129             : inline bool
     130             : is_gimple_constant (const_tree t)
     131             : {
     132             :   switch (TREE_CODE (t))
     133             :     {
     134             :     case INTEGER_CST:
     135             :     case POLY_INT_CST:
     136             :     case REAL_CST:
     137             :     case FIXED_CST:
     138             :     case COMPLEX_CST:
     139             :     case VECTOR_CST:
     140             :     case STRING_CST:
     141             :       return true;
     142             : 
     143             :     default:
     144             :       return false;
     145             :     }
     146             : }
     147             : 
     148             : /* A wrapper around extract_ops_from_tree with 3 ops, for callers which
     149             :    expect to see only a maximum of two operands.  */
     150             : 
     151             : inline void
     152             : extract_ops_from_tree (tree expr, enum tree_code *code, tree *op0,
     153             :                        tree *op1)
     154             : {
     155             :   tree op2;
     156             :   extract_ops_from_tree (expr, code, op0, op1, &op2);
     157             :   gcc_assert (op2 == NULL_TREE);
     158             : }
     159             : 
     160             : /* Given a valid GIMPLE_CALL function address return the FUNCTION_DECL
     161             :    associated with the callee if known.  Otherwise return NULL_TREE.  */
     162             : 
     163             : inline tree
     164             : gimple_call_addr_fndecl (const_tree fn)
     165             : {
     166             :   if (fn && TREE_CODE (fn) == ADDR_EXPR)
     167             :     {
     168             :       tree fndecl = TREE_OPERAND (fn, 0);
     169             :       if (TREE_CODE (fndecl) == MEM_REF
     170             :           && TREE_CODE (TREE_OPERAND (fndecl, 0)) == ADDR_EXPR
     171             :           && integer_zerop (TREE_OPERAND (fndecl, 1)))
     172             :         fndecl = TREE_OPERAND (TREE_OPERAND (fndecl, 0), 0);
     173             :       if (TREE_CODE (fndecl) == FUNCTION_DECL)
     174             :         return fndecl;
     175             :     }
     176             :   return NULL_TREE;
     177             : }
     178             : 
     179             : #endif /* GCC_GIMPLE_EXPR_H */

Generated by: LCOV version 1.16