GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
GCC Middle and Back End API Reference
Namespaces
Data Structures
Files
File List
addresses.h
alias.c
alias.h
alloc-pool.c
alloc-pool.h
asan.c
asan.h
attribs.c
auto-inc-dec.c
basic-block.h
bb-reorder.c
bb-reorder.h
bitmap.c
bitmap.h
bt-load.c
builtins.c
builtins.h
caller-save.c
calls.c
cfg.c
cfganal.c
cfgbuild.c
cfgcleanup.c
cfgexpand.c
cfghooks.c
cfghooks.h
cfgloop.c
cfgloop.h
cfgloopanal.c
cfgloopmanip.c
cfgrtl.c
cgraph.c
cgraph.h
cgraphbuild.c
cgraphclones.c
cgraphunit.c
cilk-common.c
cilk.h
collect2-aix.c
collect2-aix.h
collect2.c
collect2.h
combine-stack-adj.c
combine.c
compare-elim.c
conditions.h
context.c
context.h
convert.c
convert.h
coretypes.h
coverage.c
coverage.h
cppbuiltin.c
cppbuiltin.h
cppdefault.c
cppdefault.h
cprop.c
cse.c
cselib.c
cselib.h
data-streamer-in.c
data-streamer-out.c
data-streamer.c
data-streamer.h
dbgcnt.c
dbgcnt.h
dbxout.c
dbxout.h
dce.c
dce.h
ddg.c
ddg.h
debug.c
debug.h
defaults.h
df-core.c
df-problems.c
df-scan.c
df.h
dfp.c
dfp.h
diagnostic-color.c
diagnostic-color.h
diagnostic-core.h
diagnostic.c
diagnostic.h
dojump.c
dominance.c
domwalk.c
domwalk.h
double-int.c
double-int.h
dse.c
dumpfile.c
dumpfile.h
dwarf2asm.c
dwarf2asm.h
dwarf2cfi.c
dwarf2out.c
dwarf2out.h
emit-rtl.c
emit-rtl.h
errors.c
errors.h
et-forest.c
et-forest.h
except.c
except.h
explow.c
expmed.c
expmed.h
expr.c
expr.h
file-find.c
file-find.h
final.c
fixed-value.c
fixed-value.h
flag-types.h
flags.h
fold-const.c
foo.c
fp-test.c
function.c
function.h
fwprop.c
gcc-ar.c
gcc-plugin.h
gcc.c
gcc.h
gcov-dump.c
gcov-io.c
gcov-io.h
gcov-iov.c
gcov.c
gcse.c
gcse.h
gdbhooks.py
genattr-common.c
genattr.c
genattrtab.c
genautomata.c
gencheck.c
genchecksum.c
gencodes.c
genconditions.c
genconfig.c
genconstants.c
genemit.c
genenums.c
genextract.c
genflags.c
gengenrtl.c
gengtype-parse.c
gengtype-state.c
gengtype.c
gengtype.h
genhooks.c
genmddeps.c
genmddump.c
genmodes.c
genopinit.c
genoutput.c
genpeep.c
genpreds.c
genrecog.c
gensupport.c
gensupport.h
ggc-common.c
ggc-internal.h
ggc-none.c
ggc-page.c
ggc.h
gimple-builder.c
gimple-builder.h
gimple-fold.c
gimple-fold.h
gimple-iterator.c
gimple-low.c
gimple-low.h
gimple-pretty-print.c
gimple-pretty-print.h
gimple-ssa-strength-reduction.c
gimple-ssa.h
gimple-streamer-in.c
gimple-streamer-out.c
gimple-streamer.h
gimple.c
gimple.h
gimplify.c
glimits.h
godump.c
graph.c
graph.h
graphds.c
graphds.h
graphite-blocking.c
graphite-clast-to-gimple.c
graphite-clast-to-gimple.h
graphite-dependences.c
graphite-htab.h
graphite-interchange.c
graphite-optimize-isl.c
graphite-poly.c
graphite-poly.h
graphite-scop-detection.c
graphite-scop-detection.h
graphite-sese-to-poly.c
graphite-sese-to-poly.h
graphite.c
gstab.h
gsyms.h
gsyslimits.h
haifa-sched.c
hard-reg-set.h
hash-table.c
hash-table.h
highlev-plugin-common.h
hooks.c
hooks.h
host-default.c
hosthooks-def.h
hosthooks.h
hw-doloop.c
hw-doloop.h
hwint.c
hwint.h
ifcvt.c
incpath.c
incpath.h
init-regs.c
input.c
input.h
insn-addr.h
internal-fn.c
internal-fn.h
intl.c
intl.h
ipa-cp.c
ipa-devirt.c
ipa-inline-analysis.c
ipa-inline-transform.c
ipa-inline.c
ipa-inline.h
ipa-profile.c
ipa-prop.c
ipa-prop.h
ipa-pure-const.c
ipa-ref-inline.h
ipa-ref.c
ipa-ref.h
ipa-reference.c
ipa-reference.h
ipa-split.c
ipa-utils.c
ipa-utils.h
ipa.c
ira-build.c
ira-color.c
ira-conflicts.c
ira-costs.c
ira-emit.c
ira-int.h
ira-lives.c
ira.c
ira.h
is-a.h
jump.c
langhooks-def.h
langhooks.c
langhooks.h
lcm.c
libfuncs.h
limitx.h
limity.h
lists.c
loop-doloop.c
loop-init.c
loop-invariant.c
loop-iv.c
loop-unroll.c
loop-unswitch.c
lower-subreg.c
lower-subreg.h
lra-assigns.c
lra-coalesce.c
lra-constraints.c
lra-eliminations.c
lra-int.h
lra-lives.c
lra-spills.c
lra.c
lra.h
lto-cgraph.c
lto-compress.c
lto-compress.h
lto-opts.c
lto-section-in.c
lto-section-out.c
lto-streamer-in.c
lto-streamer-out.c
lto-streamer.c
lto-streamer.h
lto-wrapper.c
machmode.h
main.c
mcf.c
mode-switching.c
modulo-sched.c
omega.c
omega.h
omp-low.c
omp-low.h
optabs.c
optabs.h
opts-common.c
opts-diagnostic.h
opts-global.c
opts.c
opts.h
output.h
params.c
params.h
pass_manager.h
passes.c
plugin.c
plugin.h
pointer-set.c
pointer-set.h
postreload-gcse.c
postreload.c
predict.c
predict.h
prefix.c
prefix.h
pretty-print.c
pretty-print.h
print-rtl.c
print-tree.c
profile.c
profile.h
read-md.c
read-md.h
read-rtl.c
real.c
real.h
realmpfr.c
realmpfr.h
recog.c
recog.h
ree.c
reg-stack.c
regcprop.c
reginfo.c
regrename.c
regrename.h
regs.h
regset.h
regstat.c
reload.c
reload.h
reload1.c
reorg.c
resource.c
resource.h
rtl-error.c
rtl-error.h
rtl.c
rtl.h
rtlanal.c
rtlhooks-def.h
rtlhooks.c
sbitmap.c
sbitmap.h
sched-deps.c
sched-ebb.c
sched-int.h
sched-rgn.c
sched-vis.c
sdbout.c
sdbout.h
sel-sched-dump.c
sel-sched-dump.h
sel-sched-ir.c
sel-sched-ir.h
sel-sched.c
sel-sched.h
sese.c
sese.h
simplify-rtx.c
sparseset.c
sparseset.h
sreal.c
sreal.h
ssa-iterators.h
stack-ptr-mod.c
statistics.c
statistics.h
stmt.c
stor-layout.c
store-motion.c
streamer-hooks.c
streamer-hooks.h
stringpool.c
symtab.c
system.h
target-def.h
target-globals.c
target-globals.h
target-hooks-macros.h
target.h
targhooks.c
targhooks.h
timevar.c
timevar.h
tlink.c
toplev.c
toplev.h
tracer.c
trans-mem.c
trans-mem.h
tree-affine.c
tree-affine.h
tree-browser.c
tree-call-cdce.c
tree-cfg.c
tree-cfg.h
tree-cfgcleanup.c
tree-cfgcleanup.h
tree-chrec.c
tree-chrec.h
tree-complex.c
tree-core.h
tree-data-ref.c
tree-data-ref.h
tree-dfa.c
tree-dfa.h
tree-diagnostic.c
tree-diagnostic.h
tree-dump.c
tree-dump.h
tree-eh.c
tree-eh.h
tree-emutls.c
tree-hasher.h
tree-if-conv.c
tree-inline.c
tree-inline.h
tree-into-ssa.c
tree-into-ssa.h
tree-iterator.c
tree-iterator.h
tree-loop-distribution.c
tree-nested.c
tree-nrv.c
tree-object-size.c
tree-outof-ssa.c
tree-outof-ssa.h
tree-parloops.c
tree-parloops.h
tree-pass.h
tree-phinodes.c
tree-phinodes.h
tree-predcom.c
tree-pretty-print.c
tree-pretty-print.h
tree-profile.c
tree-scalar-evolution.c
tree-scalar-evolution.h
tree-sra.c
tree-ssa-address.c
tree-ssa-address.h
tree-ssa-alias.c
tree-ssa-alias.h
tree-ssa-ccp.c
tree-ssa-coalesce.c
tree-ssa-coalesce.h
tree-ssa-copy.c
tree-ssa-copyrename.c
tree-ssa-dce.c
tree-ssa-dom.c
tree-ssa-dom.h
tree-ssa-dse.c
tree-ssa-forwprop.c
tree-ssa-ifcombine.c
tree-ssa-live.c
tree-ssa-live.h
tree-ssa-loop-ch.c
tree-ssa-loop-im.c
tree-ssa-loop-ivcanon.c
tree-ssa-loop-ivopts.c
tree-ssa-loop-ivopts.h
tree-ssa-loop-manip.c
tree-ssa-loop-manip.h
tree-ssa-loop-niter.c
tree-ssa-loop-niter.h
tree-ssa-loop-prefetch.c
tree-ssa-loop-unswitch.c
tree-ssa-loop.c
tree-ssa-loop.h
tree-ssa-math-opts.c
tree-ssa-operands.c
tree-ssa-operands.h
tree-ssa-phiopt.c
tree-ssa-phiprop.c
tree-ssa-pre.c
tree-ssa-propagate.c
tree-ssa-propagate.h
tree-ssa-reassoc.c
tree-ssa-sccvn.c
tree-ssa-sccvn.h
tree-ssa-sink.c
tree-ssa-strlen.c
tree-ssa-structalias.c
tree-ssa-tail-merge.c
tree-ssa-ter.c
tree-ssa-ter.h
tree-ssa-threadedge.c
tree-ssa-threadedge.h
tree-ssa-threadupdate.c
tree-ssa-threadupdate.h
tree-ssa-uncprop.c
tree-ssa-uninit.c
tree-ssa.c
tree-ssa.h
tree-ssanames.c
tree-ssanames.h
tree-stdarg.c
tree-stdarg.h
tree-streamer-in.c
tree-streamer-out.c
tree-streamer.c
tree-streamer.h
tree-switch-conversion.c
tree-tailcall.c
tree-vect-data-refs.c
tree-vect-generic.c
tree-vect-loop-manip.c
tree-vect-loop.c
tree-vect-patterns.c
tree-vect-slp.c
tree-vect-stmts.c
tree-vectorizer.c
tree-vectorizer.h
tree-vrp.c
tree.c
tree.h
tsan.c
tsan.h
tsystem.h
typeclass.h
ubsan.c
ubsan.h
valtrack.c
valtrack.h
value-prof.c
value-prof.h
var-tracking.c
varasm.c
varpool.c
vec.c
vec.h
version.c
version.h
vmsdbg.h
vmsdbgout.c
vtable-verify.c
vtable-verify.h
web.c
xcoff.h
xcoffout.c
xcoffout.h
Globals
cselib.h
Go to the documentation of this file.
1
/* Common subexpression elimination for GNU compiler.
2
Copyright (C) 1987-2013 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
/* Describe a value. */
21
typedef
struct
cselib_val_struct
{
22
/* The hash value. */
23
unsigned
int
hash
;
24
25
/* A unique id assigned to values. */
26
int
uid
;
27
28
/* A VALUE rtx that points back to this structure. */
29
rtx
val_rtx
;
30
31
/* All rtl expressions that hold this value at the current time during a
32
scan. */
33
struct
elt_loc_list
*
locs
;
34
35
/* If this value is used as an address, points to a list of values that
36
use it as an address in a MEM. */
37
struct
elt_list
*
addr_list
;
38
39
struct
cselib_val_struct
*
next_containing_mem
;
40
}
cselib_val
;
41
42
/* A list of rtl expressions that hold the same value. */
43
struct
elt_loc_list
{
44
/* Next element in the list. */
45
struct
elt_loc_list
*
next
;
46
/* An rtl expression that holds the value. */
47
rtx
loc
;
48
/* The insn that made the equivalence. */
49
rtx
setting_insn
;
50
};
51
52
/* Describe a single set that is part of an insn. */
53
struct
cselib_set
54
{
55
rtx
src
;
56
rtx
dest
;
57
cselib_val
*
src_elt
;
58
cselib_val
*
dest_addr_elt
;
59
};
60
61
enum
cselib_record_what
62
{
63
CSELIB_RECORD_MEMORY
= 1,
64
CSELIB_PRESERVE_CONSTANTS
= 2
65
};
66
67
extern
void (*
cselib_discard_hook
) (
cselib_val
*);
68
extern
void (*
cselib_record_sets_hook
) (
rtx
insn,
struct
cselib_set
*sets,
69
int
n_sets);
70
71
extern
cselib_val
*
cselib_lookup
(
rtx
,
enum
machine_mode,
72
int
,
enum
machine_mode);
73
extern
cselib_val
*
cselib_lookup_from_insn
(
rtx
,
enum
machine_mode,
74
int
,
enum
machine_mode,
rtx
);
75
extern
void
cselib_init
(
int
);
76
extern
void
cselib_clear_table
(
void
);
77
extern
void
cselib_finish
(
void
);
78
extern
void
cselib_process_insn
(
rtx
);
79
extern
bool
fp_setter_insn
(
rtx
);
80
extern
enum
machine_mode
cselib_reg_set_mode
(
const_rtx
);
81
extern
int
rtx_equal_for_cselib_p
(
rtx
,
rtx
);
82
extern
int
references_value_p
(
const_rtx
,
int
);
83
extern
rtx
cselib_expand_value_rtx
(
rtx
,
bitmap
,
int
);
84
typedef
rtx
(*
cselib_expand_callback
)(
rtx
,
bitmap
, int,
void
*);
85
extern
rtx
cselib_expand_value_rtx_cb
(
rtx
,
bitmap
,
int
,
86
cselib_expand_callback
,
void
*);
87
extern
bool
cselib_dummy_expand_value_rtx_cb
(
rtx
,
bitmap
,
int
,
88
cselib_expand_callback
,
void
*);
89
extern
rtx
cselib_subst_to_values
(
rtx
,
enum
machine_mode);
90
extern
rtx
cselib_subst_to_values_from_insn
(
rtx
,
enum
machine_mode,
rtx
);
91
extern
void
cselib_invalidate_rtx
(
rtx
);
92
93
extern
void
cselib_reset_table
(
unsigned
int
);
94
extern
unsigned
int
cselib_get_next_uid
(
void
);
95
extern
void
cselib_preserve_value
(
cselib_val
*);
96
extern
bool
cselib_preserved_value_p
(
cselib_val
*);
97
extern
void
cselib_preserve_only_values
(
void
);
98
extern
void
cselib_preserve_cfa_base_value
(
cselib_val
*,
unsigned
int
);
99
extern
void
cselib_add_permanent_equiv
(
cselib_val
*,
rtx
,
rtx
);
100
extern
bool
cselib_have_permanent_equivalences
(
void
);
101
extern
void
cselib_set_value_sp_based
(
cselib_val
*);
102
extern
bool
cselib_sp_based_value_p
(
cselib_val
*);
103
104
extern
void
dump_cselib_table
(FILE *);
105
106
/* Return the canonical value for VAL, following the equivalence chain
107
towards the earliest (== lowest uid) equivalent value. */
108
109
static
inline
cselib_val
*
110
canonical_cselib_val
(
cselib_val
*val)
111
{
112
cselib_val
*canon;
113
114
if
(!val->
locs
|| val->
locs
->
next
115
|| !val->
locs
->
loc
|| GET_CODE (val->
locs
->
loc
) != VALUE
116
|| val->
uid
< CSELIB_VAL_PTR (val->
locs
->
loc
)->uid)
117
return
val;
118
119
canon = CSELIB_VAL_PTR (val->
locs
->
loc
);
120
gcc_checking_assert (
canonical_cselib_val
(canon) == canon);
121
return
canon;
122
}
gcc
cselib.h
Generated by
1.8.1.1