1 /* Representation of adjustment made to virtual clones in the symbol table. 2 Copyright (C) 2003-2022 Free Software Foundation, Inc. 3 Contributed by Jan Hubicka 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it under 8 the terms of the GNU General Public License as published by the Free 9 Software Foundation; either version 3, or (at your option) any later 10 version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21 #ifndef GCC_SYMTAB_CLONES_H 22 #define GCC_SYMTAB_CLONES_H 23 24 struct GTY(()) clone_info 25 { 26 /* Constructor. */ clone_infoclone_info27 clone_info () 28 : tree_map (NULL), 29 param_adjustments (NULL) 30 { 31 } 32 /* Constants discovered by IPA-CP, i.e. which parameter should be replaced 33 with what. */ 34 vec<ipa_replace_map *, va_gc> *tree_map; 35 /* Parameter modification that IPA-SRA decided to perform. */ 36 ipa_param_adjustments *param_adjustments; 37 38 /* Return clone_info, if available. */ 39 static clone_info *get (cgraph_node *node); 40 41 /* Return clone_info possibly creating new one. */ 42 static clone_info *get_create (cgraph_node *node); 43 44 /* Remove clone_info. */ 45 static void remove (cgraph_node *node); 46 47 /* Release all clone_infos. */ 48 static void release (void); 49 }; 50 51 /* Return clone_info, if available. */ 52 inline clone_info * get(cgraph_node * node)53clone_info::get (cgraph_node *node) 54 { 55 if (!symtab->m_clones) 56 return NULL; 57 return symtab->m_clones->get (node); 58 } 59 60 61 /* Remove clone_info association for NODE. */ 62 inline void remove(cgraph_node * node)63clone_info::remove (cgraph_node *node) 64 { 65 symtab->m_clones->remove (node); 66 } 67 68 /* Free clone info summaries. */ 69 inline void release()70clone_info::release () 71 { 72 if (symtab->m_clones) 73 ggc_delete (symtab->m_clones); 74 symtab->m_clones = NULL; 75 } 76 77 #endif /* GCC_SYMTAB_CLONES_H */ 78