GCC Middle and Back End API Reference
lcm.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

struct edge_listpre_edge_lcm_avs (int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)
 
struct edge_listpre_edge_lcm (int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)
 
void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *)
 
struct edge_listpre_edge_rev_lcm (int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)
 
void compute_antinout_edge (sbitmap *, sbitmap *, sbitmap *, sbitmap *)
 
void compute_earliest (struct edge_list *, int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap *)
 

Function Documentation

◆ compute_antinout_edge()

void compute_antinout_edge ( sbitmap * antloc,
sbitmap * transp,
sbitmap * antin,
sbitmap * antout )
extern
Edge based lcm routines.   
Compute expression anticipatability at entrance and exit of each block.
This is done based on the flow graph, and not on the pred-succ lists.
Other than that, its pretty much identical to compute_antinout.   

References antloc, basic_block_def::aux, BASIC_BLOCK_FOR_FN, bitmap_clear(), bitmap_intersection_of_succs(), bitmap_or_and(), bitmap_vector_ones(), cfun, clear_aux_for_blocks(), clear_aux_for_edges(), ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, free(), ggc_alloc(), i, basic_block_def::index, inverted_rev_post_order_compute(), last_basic_block_for_fn, n_basic_blocks_for_fn, NULL, NUM_FIXED_BLOCKS, basic_block_def::preds, transp, and worklist.

Referenced by pre_edge_lcm_avs(), and pre_edge_rev_lcm().

◆ compute_available()

◆ compute_earliest()

void compute_earliest ( struct edge_list * edge_list,
int n_exprs,
sbitmap * antin,
sbitmap * antout,
sbitmap * avout,
sbitmap * kill,
sbitmap * earliest )
extern

◆ pre_edge_lcm()

struct edge_list * pre_edge_lcm ( int n_exprs,
sbitmap * transp,
sbitmap * avloc,
sbitmap * antloc,
sbitmap * kill,
sbitmap ** insert,
sbitmap ** del )
extern
Wrapper to allocate avin/avout and call pre_edge_lcm_avs.   

References antloc, cfun, edge_list, ggc_alloc(), insert(), kill, last_basic_block_for_fn, pre_edge_lcm_avs(), sbitmap_vector_alloc(), sbitmap_vector_free(), and transp.

Referenced by compute_pre_data().

◆ pre_edge_lcm_avs()

struct edge_list * pre_edge_lcm_avs ( int n_exprs,
sbitmap * transp,
sbitmap * avloc,
sbitmap * antloc,
sbitmap * kill,
sbitmap * avin,
sbitmap * avout,
sbitmap ** insert,
sbitmap ** del )
extern
Generic partial redundancy elimination with lazy code motion header file.
   Copyright (C) 2014-2024 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.   
Given local properties TRANSP, ANTLOC, AVLOC, KILL return the insert and
delete vectors for edge based LCM  and return the AVIN, AVOUT bitmap.
map the insert vector to what edge an expression should be inserted on.   

References antloc, bitmap_vector_clear(), cfun, compute_antinout_edge(), compute_available(), compute_earliest(), compute_insert_delete(), compute_laterin(), create_edge_list(), dump_bitmap_vector(), dump_file, edge_list, ggc_alloc(), insert(), kill, last_basic_block_for_fn, NUM_EDGES, edge_list::num_edges, print_edge_list(), sbitmap_vector_alloc(), sbitmap_vector_free(), transp, and verify_edge_list().

Referenced by pre_edge_lcm().

◆ pre_edge_rev_lcm()

struct edge_list * pre_edge_rev_lcm ( int n_exprs,
sbitmap * transp,
sbitmap * st_avloc,
sbitmap * st_antloc,
sbitmap * kill,
sbitmap ** insert,
sbitmap ** del )
extern
Given local properties TRANSP, ST_AVLOC, ST_ANTLOC, KILL return the
insert and delete vectors for edge based reverse LCM.  Returns an
edgelist which is used to map the insert vector to what edge
an expression should be inserted on.   

References bitmap_vector_clear(), cfun, compute_antinout_edge(), compute_available(), compute_farthest(), compute_nearerout(), compute_rev_insert_delete(), create_edge_list(), dump_bitmap_vector(), dump_file, edge_list, ggc_alloc(), insert(), kill, last_basic_block_for_fn, NUM_EDGES, edge_list::num_edges, print_edge_list(), sbitmap_vector_alloc(), sbitmap_vector_free(), st_antloc, st_avloc, transp, and verify_edge_list().

Referenced by one_store_motion_pass().