ir_node *size = expression_to_firm(argument);
ir_node *store = get_store();
- ir_node *alloca = new_d_Alloc(dbgi, store, size, firm_unknown_type,
+ ir_node *alloca = new_d_Alloc(dbgi, store, size, get_unknown_type(),
stack_alloc);
ir_node *proj_m = new_Proj(alloca, mode_M, pn_Alloc_M);
set_store(proj_m);
static unsigned get_cparser_entity_alignment(const entity_t *entity)
{
switch(entity->kind) {
- DECLARATION_KIND_CASES
+ case DECLARATION_KIND_CASES:
return entity->declaration.alignment;
case ENTITY_STRUCT:
case ENTITY_UNION:
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");
#endif
switch (expression->kind) {
- EXPR_LITERAL_CASES
+ case EXPR_LITERAL_CASES:
return literal_to_firm(&expression->literal);
case EXPR_STRING_LITERAL:
return string_to_firm(&expression->base.source_position, "str.%u",
return reference_expression_enum_value_to_firm(&expression->reference);
case EXPR_CALL:
return call_expression_to_firm(&expression->call);
- EXPR_UNARY_CASES
+ case EXPR_UNARY_CASES:
return unary_expression_to_firm(&expression->unary);
- EXPR_BINARY_CASES
+ case EXPR_BINARY_CASES:
return binary_expression_to_firm(&expression->binary);
case EXPR_ARRAY_ACCESS:
return array_access_to_firm(&expression->array_access);
statement_to_firm(statement->statement);
}
+static void computed_goto_to_firm(computed_goto_statement_t const *const statement)
+{
+ if (!currently_reachable())
+ return;
+
+ ir_node *const irn = expression_to_firm(statement->expression);
+ dbg_info *const dbgi = get_dbg_info(&statement->base.source_position);
+ ir_node *const ijmp = new_d_IJmp(dbgi, irn);
+
+ set_irn_link(ijmp, ijmp_list);
+ ijmp_list = ijmp;
+
+ set_unreachable_now();
+}
+
static void goto_to_firm(const goto_statement_t *statement)
{
if (!currently_reachable())
return;
- if (statement->expression) {
- ir_node *irn = expression_to_firm(statement->expression);
- dbg_info *dbgi = get_dbg_info(&statement->base.source_position);
- ir_node *ijmp = new_d_IJmp(dbgi, irn);
+ ir_node *block = get_label_block(statement->label);
+ ir_node *jmp = new_Jmp();
+ add_immBlock_pred(block, jmp);
- set_irn_link(ijmp, ijmp_list);
- ijmp_list = ijmp;
- } else {
- ir_node *block = get_label_block(statement->label);
- ir_node *jmp = new_Jmp();
- add_immBlock_pred(block, jmp);
- }
set_unreachable_now();
}
case STATEMENT_LABEL:
label_to_firm(&statement->label);
return;
+ case STATEMENT_COMPUTED_GOTO:
+ computed_goto_to_firm(&statement->computed_goto);
+ return;
case STATEMENT_GOTO:
goto_to_firm(&statement->gotos);
return;
set_irn_dbg_info(get_irg_start_block(irg),
get_entity_dbg_info(function_entity));
- ir_node *first_block = get_cur_block();
-
/* set inline flags */
if (entity->function.is_inline)
set_irg_inline_property(irg, irg_inline_recomended);
DEL_ARR_F(all_labels);
all_labels = NULL;
- mature_immBlock(first_block);
- mature_immBlock(end_block);
-
irg_finalize_cons(irg);
/* finalize the frame type */