+ ARR_APP1 (compound_graph_path *, ent->val_paths, path);
+}
+
+INLINE void
+set_compound_ent_value_w_path(entity *ent, ir_node *val, compound_graph_path *path, int pos) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != variability_uninitialized));
+ ent->values[pos+1] = val;
+ ent->val_paths[pos+1] = path;
+}
+
+INLINE int
+get_compound_ent_n_values(entity *ent) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != variability_uninitialized));
+ return (ARR_LEN (ent->values))-1;
+}
+
+INLINE ir_node *
+get_compound_ent_value(entity *ent, int pos) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != variability_uninitialized));
+ return ent->values[pos+1];
+}
+
+INLINE compound_graph_path *
+get_compound_ent_value_path(entity *ent, int pos) {
+ assert(ent && is_compound_entity(ent) && (ent->variability != variability_uninitialized));
+ return ent->val_paths[pos+1];
+}
+
+void
+remove_compound_ent_value(entity *ent, entity *value_ent) {
+ int i;
+ assert(ent && is_compound_entity(ent) && (ent->variability != variability_uninitialized));
+ for (i = 1; i < (ARR_LEN (ent->val_paths)); i++) {
+ compound_graph_path *path = ent->val_paths[i];
+ if (path->nodes[path->len-1] == value_ent) {
+ for(; i < (ARR_LEN (ent->val_paths))-1; i++) {
+ ent->val_paths[i] = ent->val_paths[i+1];
+ ent->values[i] = ent->values[i+1];
+ }
+ ARR_SETLEN(entity*, ent->val_paths, ARR_LEN(ent->val_paths) - 1);
+ ARR_SETLEN(ir_node*, ent->values, ARR_LEN(ent->values) - 1);
+ break;
+ }
+ }
+}
+
+INLINE void
+add_compound_ent_value(entity *ent, ir_node *val, entity *member) {
+ compound_graph_path *path;
+ assert(ent && is_compound_entity(ent) && (ent->variability != variability_uninitialized));
+ path = new_compound_graph_path(get_entity_owner(ent), 1);
+ path->nodes[0] = member;
+ add_compound_ent_value_w_path(ent, val, path);