+ waitq *worklist = new_waitq();
+
+ if (only_emit_marked) {
+ for (i = 0; i < n; i++) {
+ ir_entity *ent = get_compound_member(gt, i);
+ if (is_entity_backend_marked(ent) ||
+ get_entity_visibility(ent) != visibility_external_allocated) {
+ waitq_put(worklist, ent);
+ set_entity_backend_marked(ent, 1);
+ }
+ }
+ } else {
+ for (i = 0; i < n; i++) {
+ ir_entity *ent = get_compound_member(gt, i);
+ set_entity_backend_marked(ent, 1);
+ waitq_put(worklist, ent);
+ }
+ }
+
+ env->worklist = worklist;
+
+ while (!waitq_empty(worklist)) {
+ ir_entity *ent = waitq_get(worklist);