libFirm
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
iroptimize.h
1 /*
2  * This file is part of libFirm.
3  * Copyright (C) 2012 University of Karlsruhe.
4  */
5 
10 #ifndef FIRM_IROPTIMIZE_H
11 #define FIRM_IROPTIMIZE_H
12 
13 #include "firm_types.h"
14 #include "begin.h"
15 
32 FIRM_API void optimize_cf(ir_graph *irg);
33 
39 FIRM_API void opt_jumpthreading(ir_graph* irg);
40 
47 FIRM_API void opt_bool(ir_graph *irg);
48 
54 FIRM_API void conv_opt(ir_graph *irg);
55 
60 typedef int (*check_alloc_entity_func)(ir_entity *ent);
61 
84 FIRM_API void optimize_funccalls(void);
85 
95 FIRM_API void do_gvn_pre(ir_graph *irg);
96 
108 typedef int (*arch_allow_ifconv_func)(ir_node *sel, ir_node *mux_false,
109  ir_node *mux_true);
110 
119 FIRM_API void opt_if_conv(ir_graph *irg);
120 
130 FIRM_API void opt_if_conv_cb(ir_graph *irg, arch_allow_ifconv_func callback);
131 
137 FIRM_API void opt_parallelize_mem(ir_graph *irg);
138 
150 FIRM_API ir_node *can_replace_load_by_const(const ir_node *load, ir_node *c);
151 
177 FIRM_API void optimize_load_store(ir_graph *irg);
178 
182 FIRM_API void combine_memops(ir_graph *irg);
183 
189 FIRM_API void opt_ldst(ir_graph *irg);
190 
201 FIRM_API void opt_frame_irg(ir_graph *irg);
202 
204 typedef enum osr_flags {
211 } osr_flags;
212 
214 #define osr_flag_default osr_flag_lftr_with_ov_check
215 
274 FIRM_API void opt_osr(ir_graph *irg, unsigned flags);
275 
286 FIRM_API void remove_phi_cycles(ir_graph *irg);
287 
289 #define DEFAULT_CLONE_THRESHOLD 20
290 
302 FIRM_API void proc_cloning(float threshold);
303 
318 FIRM_API void optimize_reassociation(ir_graph *irg);
319 
340 FIRM_API void normalize_one_return(ir_graph *irg);
341 
362 FIRM_API void normalize_n_returns(ir_graph *irg);
363 
371 FIRM_API void scalar_replacement_opt(ir_graph *irg);
372 
387 FIRM_API void opt_tail_rec_irg(ir_graph *irg);
388 
398 FIRM_API void combo(ir_graph *irg);
399 
401 typedef void (*opt_ptr)(ir_graph *irg);
402 
414 FIRM_API void inline_functions(unsigned maxsize, int inline_threshold,
415  opt_ptr after_inline_opt);
416 
422 FIRM_API void shape_blocks(ir_graph *irg);
423 
429 FIRM_API void do_loop_inversion(ir_graph *irg);
430 
436 FIRM_API void do_loop_unrolling(ir_graph *irg);
437 
441 FIRM_API void do_loop_peeling(ir_graph *irg);
442 
451 FIRM_API void garbage_collect_entities(void);
452 
472 FIRM_API void dead_node_elimination(ir_graph *irg);
473 
488 FIRM_API void place_code(ir_graph *irg);
489 
494 FIRM_API void occult_consts(ir_graph*);
495 
503 FIRM_API int value_not_null(const ir_node *n, const ir_node **confirm);
504 
512 FIRM_API ir_tarval *computed_value_Cmp_Confirm(ir_node *left, ir_node *right,
513  ir_relation relation);
514 
516 typedef ident *(*compilerlib_name_mangle_t)(ident *id, ir_type *mt);
517 
525 
528 
537 
540 #include "end.h"
541 
542 #endif
void opt_ldst(ir_graph *irg)
New experimental alternative to optimize_load_store.
struct ir_type ir_type
Type.
Definition: firm_types.h:71
do NOT increase register pressure by introducing new induction variables.
Definition: iroptimize.h:209
void occult_consts(ir_graph *)
This optimization finds values where the bits are either constant or irrelevant and exchanges them fo...
void do_loop_inversion(ir_graph *irg)
Perform loop inversion on a given graph.
void combo(ir_graph *irg)
CLiff Click's combo algorithm from "Combining Analyses, combining Optimizations". ...
struct ir_graph ir_graph
Procedure Graph.
Definition: firm_types.h:74
ir_tarval * computed_value_Cmp_Confirm(ir_node *left, ir_node *right, ir_relation relation)
Returns the value of a Cmp if one or both predecessors are Confirm nodes.
void place_code(ir_graph *irg)
Code Placement.
ir_entity * create_compilerlib_entity(ident *id, ir_type *mt)
Constructs the entity for a given function using the current compilerlib entity creation callback...
void combine_memops(ir_graph *irg)
Combine adjacent "small" load/store operations into bigger ones.
ident *(* compilerlib_name_mangle_t)(ident *id, ir_type *mt)
Type of callbacks for creating entities of the compiler library.
Definition: iroptimize.h:516
void set_compilerlib_name_mangle(compilerlib_name_mangle_t cb)
Sets the compilerlib entity creation callback that is used to create compilerlib function entities...
void opt_tail_rec_irg(ir_graph *irg)
Optimizes tail-recursion calls by converting them into loops.
void(* opt_ptr)(ir_graph *irg)
pointer to an optimization function
Definition: iroptimize.h:401
void normalize_n_returns(ir_graph *irg)
Normalize the Returns of a graph by moving the Returns upwards as much as possible.
void opt_frame_irg(ir_graph *irg)
Optimize the frame type of an irg by removing never touched entities.
int(* check_alloc_entity_func)(ir_entity *ent)
A callback that checks whether a entity is an allocation routine.
Definition: iroptimize.h:60
void opt_parallelize_mem(ir_graph *irg)
Tries to reduce dependencies for memory nodes where possible by parallelizing them and synchronizing ...
osr_flags
Possible flags for the Operator Scalar Replacement.
Definition: iroptimize.h:204
void normalize_one_return(ir_graph *irg)
Normalize the Returns of a graph by creating a new End block with One Return(Phi).
compilerlib_name_mangle_t get_compilerlib_name_mangle(void)
Returns the compilerlib entity creation callback.
ir_node * can_replace_load_by_const(const ir_node *load, ir_node *c)
Check if we can replace the load by a given const from the const code irg.
do linear function test replacement only if no overflow can occur.
Definition: iroptimize.h:206
void do_loop_peeling(ir_graph *irg)
Perform loop peeling on a given graph.
void proc_cloning(float threshold)
Performs procedure cloning.
void inline_functions(unsigned maxsize, int inline_threshold, opt_ptr after_inline_opt)
Heuristic inliner.
void optimize_reassociation(ir_graph *irg)
Reassociation.
void opt_if_conv_cb(ir_graph *irg, arch_allow_ifconv_func callback)
Perform If conversion on a graph - callback version.
struct ir_entity ir_entity
Entity.
Definition: firm_types.h:83
int(* arch_allow_ifconv_func)(ir_node *sel, ir_node *mux_false, ir_node *mux_true)
This function is called to evaluate, if a mux(sel, mux_false, mux_true) should be built for the curre...
Definition: iroptimize.h:108
void opt_bool(ir_graph *irg)
Simplifies boolean expression in the given ir graph.
void do_loop_unrolling(ir_graph *irg)
Perform loop unrolling on a given graph.
void opt_jumpthreading(ir_graph *irg)
Perform path-sensitive jump threading on the given graph.
void remove_phi_cycles(ir_graph *irg)
Removes useless Phi cycles, i.e cycles of Phi nodes with only one non-Phi node.
no additional flags
Definition: iroptimize.h:205
struct ir_tarval ir_tarval
Target Machine Value.
Definition: firm_types.h:68
void do_gvn_pre(ir_graph *irg)
Does Partial Redundancy Elimination combined with Global Value Numbering.
void garbage_collect_entities(void)
Removes all entities which are unused.
void shape_blocks(ir_graph *irg)
Combines congruent blocks into one.
ir_relation
Relations for comparing numbers.
Definition: firm_types.h:159
void scalar_replacement_opt(ir_graph *irg)
Performs the scalar replacement optimization.
void optimize_cf(ir_graph *irg)
Control flow optimization.
void optimize_funccalls(void)
Optimize function calls by handling const functions.
ignore Multiplications by 2, 4, 8
Definition: iroptimize.h:208
void optimize_load_store(ir_graph *irg)
Load/Store optimization.
void opt_osr(ir_graph *irg, unsigned flags)
Performs the Operator Scalar Replacement optimization and linear function test replacement for loop c...
struct ir_node ir_node
Procedure Graph Node.
Definition: firm_types.h:53
const char ident
Identifier.
Definition: firm_types.h:50
int value_not_null(const ir_node *n, const ir_node **confirm)
Returns true if the value n is known not be zero/null.
void conv_opt(ir_graph *irg)
Reduces the number of Conv nodes in the given ir graph.
void dead_node_elimination(ir_graph *irg)
Performs dead node elimination by copying the ir graph to a new obstack.
void opt_if_conv(ir_graph *irg)
Perform If conversion on a graph.