*** empty log message ***
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 24 Mar 2004 16:40:29 +0000 (16:40 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 24 Mar 2004 16:40:29 +0000 (16:40 +0000)
[r2562]

ir/ir/irflag_t.h [new file with mode: 0644]

diff --git a/ir/ir/irflag_t.h b/ir/ir/irflag_t.h
new file mode 100644 (file)
index 0000000..464ee68
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * Project:     libFIRM
+ * File name:   ir/ir/irgraph.c
+ * Purpose:     Flags to control optimizations, inline implementation.
+ * Author:      Michael Beck
+ * Created:
+ * CVS-ID:      $Id$
+ * Copyright:   (c) 1998-2004 Universität Karlsruhe
+ * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ */
+
+/**
+ * @file irflag_t.h
+ *
+ * Inline implementation of Optimization flags.
+ *
+ * @author Michael Beck
+ */
+#ifndef _IRFLAG_T_H_
+#define _IRFLAG_T_H_
+
+#include "irflag.h"
+
+/**
+ * current libFIRM optimizations
+ */
+typedef enum {
+  /** Common subexpression eliminations: Hash the nodes. */
+  OPT_CSE                                = 0x00000001,
+
+  /** Don't use block predecessor for comparison.
+   *  Default must be zero as code placement must
+   *  be run right after a local optimize walk with
+   *  opt_global_cse on. */
+  OPT_GLOBAL_CSE                         = 0x00000002,
+
+  /** Evaluate operations. */
+  OPT_CONSTANT_FOLDING                   = 0x00000004,
+
+  /** Bad node propagation. */
+  OPT_UNREACHABLE_CODE                   = 0x00000008,
+
+  /** */
+  OPT_CONTROL_FLOW_STRAIGHTENING         = 0x00000010,
+
+  /** */
+  OPT_CONTROL_FLOW_WEAK_SIMPLIFICATION   = 0x00000020,
+
+  /** */
+  OPT_CONTROL_FLOW_STRONG_SIMPLIFICATION = 0x00000040,
+
+  /** */
+  OPT_CRITICAL_EDGES                     = 0x00000080,
+
+  /** Reclaim memory. */
+  OPT_DEAD_NODE_ELIMINATION              = 0x00000100,
+
+  /** Reassociate nodes. */
+  OPT_REASSOCIATION                      = 0x00000200,
+
+  /** Do inlining transformation. */
+  OPT_INLINE                             = 0x00000400,
+
+  /** Remove dynamic method dispatch. */
+  OPT_DYN_METH_DISPATCH                  = 0x00000800,
+
+  /** Transformations that normalize the firm representation
+   *  as removing Ids and Tuples, useless Phis, SymConst(id) -> Const(entity) ...
+   */
+  OPT_NORMALIZE                          = 0x00001000,
+
+  /** Turn off all optimizations. */
+  OPT_OPTIMIZED                          = 0x40000000,
+} libfirm_opts_t;
+
+extern optimization_state_t libFIRM_opt;
+
+/** Returns constant folding optimization setting. */
+static INLINE int get_opt_cse(void)
+{
+  return libFIRM_opt & OPT_CSE;
+}
+
+/** Returns constant subexpression elimination setting. */
+static INLINE int get_opt_global_cse(void)
+{
+  return libFIRM_opt & OPT_GLOBAL_CSE;
+}
+
+/** Returns global constant subexpression elimination setting. */
+static INLINE int get_opt_constant_folding(void)
+{
+  return libFIRM_opt & OPT_CONSTANT_FOLDING;
+}
+
+/** Returns unreachable code elimination setting. */
+static INLINE int get_opt_unreachable_code(void)
+{
+  return libFIRM_opt & OPT_UNREACHABLE_CODE;
+}
+
+/** Returns Straightening setting. */
+static INLINE int get_opt_control_flow_straightening(void)
+{
+  return libFIRM_opt & OPT_CONTROL_FLOW_STRAIGHTENING;
+}
+
+/** Returns if simplifications in local optimizations setting. */
+static INLINE int get_opt_control_flow_weak_simplification(void)
+{
+  return libFIRM_opt & OPT_CONTROL_FLOW_WEAK_SIMPLIFICATION;
+}
+
+/** Returns strong if and loop simplification setting */
+static INLINE int get_opt_control_flow_strong_simplification(void)
+{
+  return libFIRM_opt & OPT_CONTROL_FLOW_STRONG_SIMPLIFICATION;
+}
+
+/** Returns whether critical edges are removed */
+static INLINE int get_opt_critical_edges(void)
+{
+  return libFIRM_opt & OPT_CRITICAL_EDGES;
+}
+
+/** Returns reassociation setting. */
+static INLINE int get_opt_reassociation(void)
+{
+  return libFIRM_opt & OPT_REASSOCIATION;
+}
+
+/** Returns dead node elimination setting. */
+static INLINE int get_opt_dead_node_elimination(void)
+{
+  return libFIRM_opt & OPT_DEAD_NODE_ELIMINATION;
+}
+
+/** Returns global optimization setting */
+static INLINE int get_opt_optimize(void)
+{
+  return libFIRM_opt & OPT_OPTIMIZED;
+}
+
+/** Returns inlining setting. */
+static INLINE int get_opt_inline(void)
+{
+  return libFIRM_opt & OPT_INLINE;
+}
+
+static INLINE int get_opt_dyn_meth_dispatch(void)
+{
+  return libFIRM_opt & OPT_DYN_METH_DISPATCH;
+}
+
+static INLINE int get_opt_normalize(void)
+{
+  return libFIRM_opt & OPT_NORMALIZE;
+}
+
+#endif /* _IRFLAG_T_H_ */