bool constant_folding_old = constant_folding;
constant_folding = true;
+ int old_optimize = get_optimize();
+ int old_constant_folding = get_opt_constant_folding();
+ set_optimize(1);
+ set_opt_constant_folding(1);
init_ir_types();
ir_node *cnst = expression_to_firm(expression);
current_ir_graph = old_current_ir_graph;
+ set_optimize(old_optimize);
+ set_opt_constant_folding(old_constant_folding);
if (!is_Const(cnst)) {
panic("couldn't fold constant");
{
int i;
- set_optimize(1);
- set_opt_constant_folding(firm_opt.const_folding);
- set_opt_algebraic_simplification(firm_opt.const_folding);
- set_opt_cse(firm_opt.cse);
- set_opt_global_cse(0);
-
+ /* initialize implicit opts, just to be sure because really the frontend
+ * should have called it already before starting graph construction */
+ init_implicit_optimizations();
init_statistics();
do_node_verification((firm_verification_t) firm_opt.verify);
firm_opt.alias_analysis = false;
firm_opt.strict_alias = false;
firm_opt.no_alias = false;
+ firm_opt.const_folding = false;
FOR_EACH_OPT(config) {
if (config->flags & OPT_FLAG_ESSENTIAL) {
break;
}
}
+
+void init_implicit_optimizations(void)
+{
+ set_optimize(1);
+ set_opt_constant_folding(firm_opt.const_folding);
+ set_opt_algebraic_simplification(firm_opt.const_folding);
+ set_opt_cse(firm_opt.cse);
+ set_opt_global_cse(0);
+}
* switches) */
void choose_optimization_pack(int level);
+/**
+ * Initialize implicit optimization settings in firm. Frontends should call this
+ * before starting graph construction
+ */
+void init_implicit_optimizations(void);
+
#endif
-Subproject commit 332cda9a138297c9852e2ef0f649c92b640723f4
+Subproject commit 63ad74726b302ee843058f6c7d3e14f690415fb3
if (already_constructed_firm) {
panic("compiling multiple files/translation units not possible");
}
+ init_implicit_optimizations();
translation_unit_to_firm(unit);
already_constructed_firm = true;
timer_pop(t_construct);