/**
* Create a new incomplete ir_prog.
*/
-static ir_prog *new_incomplete_ir_prog(void) {
- ir_prog *res;
-
- res = xmalloc(sizeof(*res));
- memset(res, 0, sizeof(*res));
+static ir_prog *new_incomplete_ir_prog(void)
+{
+ ir_prog *res = XMALLOCZ(ir_prog);
res->kind = k_ir_prog;
res->graphs = NEW_ARR_F(ir_graph *, 0);
res->types = NEW_ARR_F(ir_type *, 0);
res->modes = NEW_ARR_F(ir_mode *, 0);
res->opcodes = NEW_ARR_F(ir_op *, 0);
+ res->global_asms = NEW_ARR_F(ident *, 0);
res->last_region_nr = 0;
res->last_label_nr = 1; /* 0 is reserved as non-label */
res->max_irg_idx = 0;
irp->const_code_irg = new_const_code_irg();
- irp->phase_state = phase_building;
- irp->outs_state = outs_none;
- irp->ip_outedges = NULL;
- irp->trouts_state = outs_none;
- irp->class_cast_state = ir_class_casts_transitive;
- irp->globals_adr_taken_state = ir_address_taken_not_computed;
+ irp->phase_state = phase_building;
+ irp->outs_state = outs_none;
+ irp->ip_outedges = NULL;
+ irp->trouts_state = outs_none;
+ irp->class_cast_state = ir_class_casts_transitive;
+ irp->globals_entity_usage_state = ir_entity_usage_not_computed;
return irp;
#undef IDENT
/* Create a new ir prog. Automatically called by init_firm through
init_irprog. */
-ir_prog *new_ir_prog (void) {
+ir_prog *new_ir_prog(void) {
return complete_ir_prog(new_incomplete_ir_prog());
}
finish_op();
DEL_ARR_F(irp->opcodes);
+ DEL_ARR_F(irp->global_asms);
irp->name = NULL;
irp->const_code_irg = NULL;
}
void set_irp_main_irg(ir_graph *main_irg) {
- assert (irp);
+ assert(irp);
irp->main_irg = main_irg;
}
return irp->ip_outedges;
}
-
irg_callee_info_state get_irp_callee_info_state(void) {
return irp->callee_info_state;
}
ir_label_t (get_irp_next_label_nr)(void) {
return _get_irp_next_label_nr();
}
+
+/* Add a new global asm include */
+void add_irp_asm(ident *asm_string) {
+ ARR_APP1(ident *, irp->global_asms, asm_string);
+}
+
+/* Return the number of global asm includes. */
+int get_irp_n_asms(void) {
+ return ARR_LEN(irp->global_asms);
+}
+
+/* Return the global asm include at position pos. */
+ident *get_irp_asm(int pos) {
+ assert(pos <= 0 && pos < get_irp_n_asms());
+ return irp->global_asms[pos];
+}