GCC Middle and Back End API Reference
sched-rgn.cc File Reference
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "target.h"
#include "rtl.h"
#include "df.h"
#include "memmodel.h"
#include "tm_p.h"
#include "insn-config.h"
#include "emit-rtl.h"
#include "recog.h"
#include "profile.h"
#include "insn-attr.h"
#include "except.h"
#include "cfganal.h"
#include "sched-int.h"
#include "sel-sched.h"
#include "tree-pass.h"
#include "dbgcnt.h"
#include "pretty-print.h"
#include "print-rtl.h"
Include dependency graph for sched-rgn.cc:


static unsigned int rest_of_handle_live_range_shrinkage (void)
static unsigned int rest_of_handle_sched (void)
static unsigned int rest_of_handle_sched2 (void)
static unsigned int rest_of_handle_sched_fusion (void)
rtl_opt_passmake_pass_live_range_shrinkage (gcc::context *ctxt)
rtl_opt_passmake_pass_sched (gcc::context *ctxt)
rtl_opt_passmake_pass_sched2 (gcc::context *ctxt)
rtl_opt_passmake_pass_sched_fusion (gcc::context *ctxt)

Function Documentation

◆ make_pass_live_range_shrinkage()

rtl_opt_pass * make_pass_live_range_shrinkage ( gcc::context * ctxt)

◆ make_pass_sched()

rtl_opt_pass * make_pass_sched ( gcc::context * ctxt)

◆ make_pass_sched2()

rtl_opt_pass * make_pass_sched2 ( gcc::context * ctxt)

◆ make_pass_sched_fusion()

rtl_opt_pass * make_pass_sched_fusion ( gcc::context * ctxt)

◆ rest_of_handle_live_range_shrinkage()

static unsigned int rest_of_handle_live_range_shrinkage ( void )
Instruction scheduling pass.
   Copyright (C) 1992-2024 Free Software Foundation, Inc.
   Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
   and currently maintained by, Jim Wilson (wilson@cygnus.com)

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

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
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
This pass implements list scheduling within basic blocks.  It is
run twice: (1) after flow analysis, but before register allocation,
and (2) after register allocation.

The first run performs interblock scheduling, moving insns between
different blocks in the same "region", and the second runs only
basic block scheduling.

Interblock motions performed are useful motions and speculative
motions, including speculative loads.  Motions requiring code
duplication are not supported.  The identification of motion type
and the check for validity of speculative motions requires
construction and analysis of the function's control flow graph.

The main entry point for this pass is schedule_insns(), called for
each function.  The work of the scheduler is organized in three
levels: (1) function level: insns are subject to splitting,
control-flow-graph is constructed, regions are computed (after
reload, each region is of one block), (2) region level: control
flow graph attributes required for interblock scheduling are
computed (dominators, reachability, etc.), data dependences and
priorities are computed, and (3) block level: insns in the block
are actually scheduled.   
Disable warnings about quoting issues in the pp_xxx calls below
that (intentionally) don't follow GCC diagnostic conventions.   
Run instruction scheduler.   

References schedule_insns().

◆ rest_of_handle_sched()

static unsigned int rest_of_handle_sched ( void )

◆ rest_of_handle_sched2()

static unsigned int rest_of_handle_sched2 ( void )
Run second scheduling pass after reload.   

References maybe_skip_selective_scheduling(), run_selective_scheduling(), schedule_ebbs(), and schedule_insns().

◆ rest_of_handle_sched_fusion()

static unsigned int rest_of_handle_sched_fusion ( void )

References schedule_insns().