#include "firm_cmdline.h"
#include "firm_timing.h"
+#ifdef _WIN32
+#define snprintf _snprintf
+#endif
+
#if defined(_DEBUG) || defined(FIRM_DEBUG)
#define DBG(x) dbg_printf x
#else
#define CHECK_ALL(cond) \
do { \
if (cond) { \
- int i; \
+ int ii; \
timer_push(TV_VERIFY); \
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) \
- irg_verify(get_irp_irg(i), VRFY_ENFORCE_SSA); \
+ for (ii = get_irp_n_irgs() - 1; ii >= 0; --ii) \
+ irg_verify(get_irp_irg(ii), VRFY_ENFORCE_SSA); \
timer_pop(); \
} \
} while (0)
static create_intrinsic_fkt *arch_create_intrinsic = NULL;
static void *create_intrinsic_ctx = NULL;
static const ir_settings_if_conv_t *if_conv_info = NULL;
-static unsigned char be_support_inline_asm = FALSE;
/* entities of runtime functions */
ir_entity_ptr rts_entities[rts_max];
*/
static void do_firm_optimizations(const char *input_filename, int firm_const_exists)
{
- ir_entity **keep_methods;
- int i, arr_len;
+ int i;
ir_graph *irg;
unsigned aa_opt;
+ /* FIXME: cloning might ADD new graphs. */
irg_dump_no = calloc(get_irp_last_idx(), sizeof(*irg_dump_no));
set_opt_strength_red(firm_opt.strength_red);
timer_start(TV_ALL_OPT);
if (firm_opt.remove_unused) {
+ ir_entity **keep_methods;
+ int arr_len;
+
/* Analysis that finds the free methods,
i.e. methods that are dereferenced.
Optimizes polymorphic calls :-). */
if (firm_opt.func_calls) {
timer_push(TV_REAL_FUNC_CALL);
- optimize_funccalls(firm_const_exists);
+ optimize_funccalls(firm_const_exists, NULL);
timer_pop();
DUMP_ALL_C(firm_dump.ir_graph && firm_dump.all_phases, "func_call");
CHECK_ALL(firm_opt.check_all);
CHECK_ALL(firm_opt.check_all);
}
+ /* do lowering on the const code irg */
+ lower_const_code();
+
for (i = 0; i < get_irp_n_irgs(); i++) {
irg = current_ir_graph = get_irp_irg(i);
if (firm_opt.luffig) {
opt_ldst2(irg);
DUMP_ONE_C(firm_dump.ir_graph && firm_dump.all_phases, irg, "ldst2");
+ CHECK_ONE(firm_opt.check_all, irg);
}
timer_push(TV_CF_OPT);
CHECK_ONE(firm_opt.check_all, irg);
}
- lower_highlevel_graph(irg);
+ lower_highlevel_graph(irg, firm_opt.lower_bitfields);
if (firm_opt.deconv) {
timer_push(TV_DECONV);
}
timer_push(TV_OSR);
- opt_osr(current_ir_graph, osr_flag_default /*| osr_flag_ignore_x86_shift*/);
+ opt_osr(current_ir_graph, osr_flag_default | osr_flag_keep_reg_pressure | osr_flag_ignore_x86_shift);
timer_pop();
DUMP_ONE_C(firm_dump.ir_graph && firm_dump.all_phases, irg, "stred");
CHECK_ONE(firm_opt.check_all, irg);
if (firm_opt.cloning) {
proc_cloning((float)firm_opt.clone_threshold);
DUMP_ALL_C(firm_dump.ir_graph && firm_dump.all_phases, "clone");
+ CHECK_ALL(firm_opt.check_all);
}
if (firm_dump.ir_graph) {
ir_node *upper = get_array_upper_bound(ty, i);
ir_graph *rem = current_ir_graph;
tarval *tv_lower, *tv_upper;
+ long val_lower, val_upper;
current_ir_graph = get_const_code_irg();
local_optimize_node(lower);
return 0;
}
- size *= get_tarval_long(tv_upper) - get_tarval_long(tv_lower);
+ val_upper = get_tarval_long(tv_upper);
+ val_lower = get_tarval_long(tv_lower);
+ size *= val_upper - val_lower;
}
restore_optimization_state(&state);
if (firm_be_opt.selection == BE_FIRM_BE) {
const backend_params *be_params = be_init();
- be_support_inline_asm = be_params->support_inline_asm;
-
- firm_opt.lower_ll = be_params->do_dw_lowering;
+ firm_opt.lower_ll = (a_byte) be_params->do_dw_lowering;
params.arch_op_settings = be_params->arch_op_settings;
arch_create_intrinsic = be_params->arch_create_intrinsic_fkt;
/* do not run architecture dependent optimizations in building phase */
arch_dep_set_opts(arch_dep_none);
- do_node_verification(firm_opt.vrfy);
+ do_node_verification((firm_verification_t) firm_opt.vrfy);
if (firm_dump.filter)
only_dump_method_with_name(new_id_from_str(firm_dump.filter));
int i;
/* the general for dumping option must be set, or the others will not work */
- firm_dump.ir_graph |= firm_dump.all_phases | firm_dump.extbb;
+ firm_dump.ir_graph
+ = (a_byte) (firm_dump.ir_graph | firm_dump.all_phases | firm_dump.extbb);
dump_keepalive_edges(1);
dump_consts_local(1);
#endif
/* enable architecture dependent optimizations */
- arch_dep_set_opts((firm_opt.muls ? arch_dep_mul_to_shift : arch_dep_none) |
+ arch_dep_set_opts((arch_dep_opts_t)
+ ((firm_opt.muls ? arch_dep_mul_to_shift : arch_dep_none) |
(firm_opt.divs ? arch_dep_div_by_const : arch_dep_none) |
- (firm_opt.mods ? arch_dep_mod_by_const : arch_dep_none) );
+ (firm_opt.mods ? arch_dep_mod_by_const : arch_dep_none) ));
if (firm_dump.statistic & STAT_FINAL_IR)