Reduct  v4.0.5-1-g4851deb
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_CSE = 1 << 2, ///< Common subexpression elimination.
28 REDUCT_OPTIMIZE_ALGEBRAIC_SIMPLIFICATION = 1 << 3, ///< Algebraic simplification.
29 REDUCT_OPTIMIZE_GAMMA_FOLDING = 1 << 4, ///< Branch folding for Gamma nodes.
30 REDUCT_OPTIMIZE_AUTO_PARALLELIZATION = 1 << 5, ///< Automatic parallelization of independent call nodes.
31 REDUCT_OPTIMIZE_ALL = 0xFFFFFFFF, ///< Enable all optimizations.
32
36 REDUCT_OPTIMIZE_O3 = REDUCT_OPTIMIZE_ALL, ///< Level 3 optimizations (maximum).
38
39/**
40 * @brief Global optimization-related state structure.
41 * @struct reduct_optimize_global_t
42 */
47
48/**
49 * @brief Initialize a global optimize state.
50 *
51 * @param global Pointer to the global optimize state to initialize.
52 */
54
55/**
56 * @brief Deinitialize a global optimize state.
57 *
58 * @param global Pointer to the global optimize state to deinitialize.
59 */
61
62/**
63 * @brief Optimize a built IR graph.
64 *
65 * @param reduct Pointer to the Reduct structure.
66 * @param handle Handle to the root node of the IR graph to optimize.
67 * @param flags Optimization flags to control which optimizations are applied.
68 */
69REDUCT_API void reduct_optimize(struct reduct* reduct, reduct_handle_t handle, reduct_optimize_flags_t flags);
70
71/** @} */
72
73#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:31
@ REDUCT_OPTIMIZE_CONSTANT_FOLDING
Constant folding.
Definition optimize.h:26
@ REDUCT_OPTIMIZE_NONE
No optimization flags.
Definition optimize.h:25
@ REDUCT_OPTIMIZE_O1
Level 1 optimizations.
Definition optimize.h:33
@ REDUCT_OPTIMIZE_O3
Level 3 optimizations (maximum).
Definition optimize.h:36
@ REDUCT_OPTIMIZE_O2
Level 2 optimizations.
Definition optimize.h:34
@ REDUCT_OPTIMIZE_ALGEBRAIC_SIMPLIFICATION
Algebraic simplification.
Definition optimize.h:28
@ REDUCT_OPTIMIZE_AUTO_PARALLELIZATION
Automatic parallelization of independent call nodes.
Definition optimize.h:30
@ REDUCT_OPTIMIZE_GAMMA_FOLDING
Branch folding for Gamma nodes.
Definition optimize.h:29
@ REDUCT_OPTIMIZE_CSE
Common subexpression elimination.
Definition optimize.h:27
Bytecode instruction format.
Handle type.
Definition defs.h:119
Global optimization-related state structure.
Definition optimize.h:44
reduct_optimize_flags_t lastFlags
Definition optimize.h:45