Reduct  v4.1.3-1-gd06c383
A functional and immutable language.
Loading...
Searching...
No Matches
optimize.h
Go to the documentation of this file.
1#ifndef REDUCT_OPTIMIZE_H
2#define REDUCT_OPTIMIZE_H 1
3
4#include <reduct/defs.h>
5#include <reduct/inst.h>
6
7#include <stdio.h>
8
9struct reduct;
10
11/**
12 * @file optimize.h
13 * @brief Bytecode optimization.
14 * @defgroup optimize Optimization
15 *
16 * @{
17 */
18
19/**
20 * @brief Optimization flags.
21 * @enum reduct_optimize_flags_t
22 */
23typedef enum reduct_optimize_flags
24{
25 REDUCT_OPTIMIZE_NONE = 0, ///< No optimization flags.
26 REDUCT_OPTIMIZE_CONSTANT_FOLDING = 1 << 1, ///< Constant folding.
27 REDUCT_OPTIMIZE_FUNCTION_INLINING = 1 << 2, ///< Function inlining.
28 REDUCT_OPTIMIZE_COMMON_NODE_ELIMINATION = 1 << 3, ///< Common node elimination.
29 REDUCT_OPTIMIZE_ALGEBRAIC_SIMPLIFICATION = 1 << 4, ///< Algebraic simplification.
30 REDUCT_OPTIMIZE_GAMMA_FOLDING = 1 << 5, ///< Branch folding for Gamma nodes.
31 REDUCT_OPTIMIZE_AUTO_PARALLELIZATION = 1 << 6, ///< Automatic parallelization of independent call nodes.
32 REDUCT_OPTIMIZE_INVARIANT_CODE_MOTION = 1 << 7, ///< Invariant code motion.
33 REDUCT_OPTIMIZE_DEAD_PORT_ELIMINATION = 1 << 8, ///< Dead port elimination.
34 REDUCT_OPTIMIZE_ALL = 0xFFFFFFFF, ///< Enable all optimizations.
35 REDUCT_OPTIMIZE_COMMUTATIVE_SWAP = 1 << 9, ///< Commutative argument swapping.
36
37 REDUCT_OPTIMIZE_O0 = REDUCT_OPTIMIZE_NONE, ///< Level 0 optimizations.
42 REDUCT_OPTIMIZE_O3 = REDUCT_OPTIMIZE_ALL, ///< Level 3 optimizations (maximum).
44
45/**
46 * @brief Global optimization-related state structure.
47 * @struct reduct_optimize_global_t
48 */
53
54/**
55 * @brief Initialize a global optimize state.
56 *
57 * @param global Pointer to the global optimize state to initialize.
58 */
60
61/**
62 * @brief Deinitialize a global optimize state.
63 *
64 * @param global Pointer to the global optimize state to deinitialize.
65 */
67
68/**
69 * @brief Optimize a built IR graph.
70 *
71 * @param reduct Pointer to the Reduct structure.
72 * @param handle Handle to the root node of the IR graph to optimize.
73 * @param flags Optimization flags to control which optimizations are applied.
74 */
75REDUCT_API void reduct_optimize(struct reduct* reduct, reduct_handle_t handle, reduct_optimize_flags_t flags);
76
77/** @} */
78
79#endif
#define REDUCT_API
Definition defs.h:24
REDUCT_API void reduct_optimize(struct reduct *reduct, reduct_handle_t handle, reduct_optimize_flags_t flags)
Optimize a built IR graph.
REDUCT_API void reduct_optimize_global_deinit(reduct_optimize_global_t *global)
Deinitialize a global optimize state.
reduct_optimize_flags_t
Optimization flags.
Definition optimize.h:24
REDUCT_API void reduct_optimize_global_init(reduct_optimize_global_t *global)
Initialize a global optimize state.
@ REDUCT_OPTIMIZE_ALL
Enable all optimizations.
Definition optimize.h:34
@ REDUCT_OPTIMIZE_CONSTANT_FOLDING
Constant folding.
Definition optimize.h:26
@ REDUCT_OPTIMIZE_FUNCTION_INLINING
Function inlining.
Definition optimize.h:27
@ REDUCT_OPTIMIZE_NONE
No optimization flags.
Definition optimize.h:25
@ REDUCT_OPTIMIZE_O1
Level 1 optimizations.
Definition optimize.h:38
@ REDUCT_OPTIMIZE_O3
Level 3 optimizations (maximum).
Definition optimize.h:42
@ REDUCT_OPTIMIZE_O2
Level 2 optimizations.
Definition optimize.h:39
@ REDUCT_OPTIMIZE_INVARIANT_CODE_MOTION
Invariant code motion.
Definition optimize.h:32
@ REDUCT_OPTIMIZE_ALGEBRAIC_SIMPLIFICATION
Algebraic simplification.
Definition optimize.h:29
@ REDUCT_OPTIMIZE_AUTO_PARALLELIZATION
Automatic parallelization of independent call nodes.
Definition optimize.h:31
@ REDUCT_OPTIMIZE_GAMMA_FOLDING
Branch folding for Gamma nodes.
Definition optimize.h:30
@ REDUCT_OPTIMIZE_DEAD_PORT_ELIMINATION
Dead port elimination.
Definition optimize.h:33
@ REDUCT_OPTIMIZE_COMMUTATIVE_SWAP
Commutative argument swapping.
Definition optimize.h:35
@ REDUCT_OPTIMIZE_COMMON_NODE_ELIMINATION
Common node elimination.
Definition optimize.h:28
@ REDUCT_OPTIMIZE_O0
Level 0 optimizations.
Definition optimize.h:37
Bytecode instruction format.
Handle type.
Definition defs.h:121
Global optimization-related state structure.
Definition optimize.h:50
reduct_optimize_flags_t lastFlags
Definition optimize.h:51