+static int need_nl = 1;
+
+/**
+ * Dump initializers.
+ */
+static void dump_ir_initializers_to_file(FILE *F, const char *prefix,
+ const ir_initializer_t *initializer, ir_type *type) {
+ tarval *tv;
+ ir_node *value;
+
+ if (need_nl) {
+ fprintf(F, "\n%s ", prefix);
+ need_nl = 0;
+ }
+ switch (get_initializer_kind(initializer)) {
+ case IR_INITIALIZER_NULL:
+ fprintf(F, "\t = <NOT_SET>");
+ break;
+ case IR_INITIALIZER_TARVAL:
+ tv = get_initializer_tarval_value(initializer);
+ ir_fprintf(F, "\t = <TV>%F", tv);
+ break;
+ case IR_INITIALIZER_CONST:
+ value = get_initializer_const_value(initializer);
+ fprintf(F, "\t = <CONST>");
+ dump_node_opcode(F, value);
+ break;
+ case IR_INITIALIZER_COMPOUND:
+ if (is_Array_type(type)) {
+ size_t i, n = get_initializer_compound_n_entries(initializer);
+ ir_type *element_type = get_array_element_type(type);
+ for (i = 0; i < n; ++i) {
+ ir_initializer_t *sub_initializer
+ = get_initializer_compound_value(initializer, i);
+
+ if (need_nl) {
+ fprintf(F, "\n%s ", prefix);
+ need_nl = 0;
+ }
+ fprintf(F, "[%d]", i);
+ dump_ir_initializers_to_file(F, prefix, sub_initializer, element_type);
+ }
+ } else {
+ size_t i, n;
+ assert(is_compound_type(type));
+ n = get_compound_n_members(type);
+ for (i = 0; i < n; ++i) {
+ ir_entity *member = get_compound_member(type, i);
+ ir_type *subtype = get_entity_type(member);
+ ir_initializer_t *sub_initializer;
+
+ assert(i < get_initializer_compound_n_entries(initializer));
+ sub_initializer
+ = get_initializer_compound_value(initializer, i);
+
+ if (need_nl) {
+ fprintf(F, "\n%s ", prefix);
+ need_nl = 0;
+ }
+ ir_fprintf(F, ".%F", member);
+ dump_ir_initializers_to_file(F, prefix, sub_initializer, subtype);
+ }
+ }
+ break;
+ default:
+ panic("invalid ir_initializer kind found");
+ }
+ need_nl = 1;
+}
+
+