osprey-gcc/gcc/loop-invariant.c File Reference

#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "rtl.h"
#include "hard-reg-set.h"
#include "obstack.h"
#include "basic-block.h"
#include "cfgloop.h"
#include "expr.h"
#include "output.h"
#include "function.h"
#include "flags.h"
#include "df.h"

Include dependency graph for loop-invariant.c:

Go to the source code of this file.

Data Types

type  loop_data
type  use
type  def
type  invariant

Defines

#define LOOP_DATA(LOOP)   ((struct loop_data *) (LOOP)->aux)

Functions/Subroutines

static bool check_maybe_invariant (rtx x)
static void compute_always_reached (struct loop *loop, basic_block *body, bitmap may_exit, bitmap always_reached)
static void find_exits (struct loop *loop, basic_block *body, bitmap may_exit, bitmap has_exit)
static bool may_assign_reg_p (rtx x)
static void find_defs (struct loop *loop, basic_block *body, struct df *df)
static void create_new_invariant (struct def *def, rtx insn, bitmap depends_on, bool always_executed)
static void record_use (struct def *def, rtx *use, rtx insn)
static bool check_dependencies (rtx insn, struct df *df, bitmap depends_on)
static void find_invariant_insn (rtx insn, bool always_reached, bool always_executed, struct df *df)
static void record_uses (rtx insn, struct df *df)
static void find_invariants_insn (rtx insn, bool always_reached, bool always_executed, struct df *df)
static void find_invariants_bb (basic_block bb, bool always_reached, bool always_executed, struct df *df)
static void find_invariants_body (struct loop *loop, basic_block *body, bitmap always_reached, bitmap always_executed, struct df *df)
static void find_invariants (struct loop *loop, struct df *df)
static void free_use_list (struct use *use)
static void get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed)
static int gain_for_invariant (struct invariant *inv, unsigned *regs_needed, unsigned new_regs, unsigned regs_used, unsigned n_inv_uses)
static int best_gain_for_invariant (struct invariant **best, unsigned *regs_needed, unsigned new_regs, unsigned regs_used, unsigned n_inv_uses)
static void set_move_mark (unsigned invno)
static void find_invariants_to_move (struct df *df)
static void move_invariant_reg (struct loop *loop, unsigned invno, struct df *df)
static void move_invariants (struct loop *loop, struct df *df)
static void init_inv_motion_data (void)
static void free_inv_motion_data (struct df *df)
static void move_single_loop_invariants (struct loop *loop, struct df *df)
static void free_loop_data (struct loop *loop)
void move_loop_invariants (struct loops *loops)

Variables

static unsigned actual_stamp
static varray_type invariants


Define Documentation

#define LOOP_DATA ( LOOP   )     ((struct loop_data *) (LOOP)->aux)

Definition at line 61 of file loop-invariant.c.

Referenced by find_exits(), and free_loop_data().


Function Documentation

static int best_gain_for_invariant ( struct invariant **  best,
unsigned *  regs_needed,
unsigned  new_regs,
unsigned  regs_used,
unsigned  n_inv_uses 
) [static]

static bool check_dependencies ( rtx  insn,
struct df df,
bitmap  depends_on 
) [static]

static bool check_maybe_invariant ( rtx  x  )  [static]

Definition at line 128 of file loop-invariant.c.

References CONST, GET_CODE, GET_RTX_FORMAT, GET_RTX_LENGTH, i, MEM, MEM_READONLY_P, MEM_VOLATILE_P, PC, REG, XEXP, XVECEXP, and XVECLEN.

Referenced by find_invariant_insn(), and VEC().

static void compute_always_reached ( struct loop loop,
basic_block body,
bitmap  may_exit,
bitmap  always_reached 
) [static]

static void create_new_invariant ( struct def def,
rtx  insn,
bitmap  depends_on,
bool  always_executed 
) [static]

static void find_defs ( struct loop loop,
basic_block body,
struct df df 
) [static]

static void find_exits ( struct loop loop,
basic_block body,
bitmap  may_exit,
bitmap  has_exit 
) [static]

static void find_invariant_insn ( rtx  insn,
bool  always_reached,
bool  always_executed,
struct df df 
) [static]

static void find_invariants ( struct loop loop,
struct df df 
) [static]

static void find_invariants_bb ( basic_block  bb,
bool  always_reached,
bool  always_executed,
struct df df 
) [static]

static void find_invariants_body ( struct loop loop,
basic_block body,
bitmap  always_reached,
bitmap  always_executed,
struct df df 
) [static]

Definition at line 542 of file loop-invariant.c.

References bitmap_bit_p(), find_invariants_bb(), i, and loop::num_nodes.

Referenced by find_invariants().

static void find_invariants_insn ( rtx  insn,
bool  always_reached,
bool  always_executed,
struct df df 
) [static]

Definition at line 504 of file loop-invariant.c.

References find_invariant_insn(), and record_uses().

Referenced by find_invariants_bb().

static void find_invariants_to_move ( struct df df  )  [static]

static void free_inv_motion_data ( struct df df  )  [static]

static void free_loop_data ( struct loop loop  )  [static]

static void free_use_list ( struct use use  )  [static]

Definition at line 583 of file loop-invariant.c.

References free(), use::next, and next.

Referenced by free_inv_motion_data().

static int gain_for_invariant ( struct invariant inv,
unsigned *  regs_needed,
unsigned  new_regs,
unsigned  regs_used,
unsigned  n_inv_uses 
) [static]

Definition at line 647 of file loop-invariant.c.

References actual_stamp, get_inv_cost(), global_cost_for_size(), and size_cost.

Referenced by best_gain_for_invariant().

static void get_inv_cost ( struct invariant inv,
int *  comp_cost,
unsigned *  regs_needed 
) [static]

static void init_inv_motion_data ( void   )  [static]

Definition at line 831 of file loop-invariant.c.

References actual_stamp, invariants, and VARRAY_GENERIC_PTR_NOGC_INIT.

Referenced by move_single_loop_invariants().

static bool may_assign_reg_p ( rtx  x  )  [static]

Definition at line 287 of file loop-invariant.c.

References can_copy_p, and GET_MODE.

Referenced by find_invariant_insn().

static void move_invariant_reg ( struct loop loop,
unsigned  invno,
struct df df 
) [static]

static void move_invariants ( struct loop loop,
struct df df 
) [static]

void move_loop_invariants ( struct loops loops  ) 

Definition at line 900 of file loop-invariant.c.

static void move_single_loop_invariants ( struct loop loop,
struct df df 
) [static]

static void record_use ( struct def def,
rtx use,
rtx  insn 
) [static]

static void record_uses ( rtx  insn,
struct df df 
) [static]

static void set_move_mark ( unsigned  invno  )  [static]


Variable Documentation

unsigned actual_stamp [static]

Definition at line 119 of file loop-invariant.c.

Referenced by gain_for_invariant(), get_inv_cost(), and init_inv_motion_data().


Generated on Wed Apr 8 14:21:35 2009 for Open64 by  doxygen 1.5.6