-/* Set has no effect for existent entities of type method. */
-ir_node *
-get_atomic_ent_value(ir_entity *ent)
-{
- assert(ent && is_atomic_entity(ent));
- assert(ent->variability != variability_uninitialized);
- return skip_Id(ent->value);
-} /* get_atomic_ent_value */
-
-void
-set_atomic_ent_value(ir_entity *ent, ir_node *val) {
- assert(is_atomic_entity(ent) && (ent->variability != variability_uninitialized));
- if (is_Method_type(ent->type) && (ent->peculiarity == peculiarity_existent))
- return;
- assert(is_Dummy(val) || get_irn_mode(val) == get_type_mode(ent->type));
- ent->value = val;
-} /* set_atomic_ent_value */
+ switch (get_initializer_kind(initializer)) {
+ case IR_INITIALIZER_NULL: {
+ ir_type *type = get_entity_type(entity);
+ ir_mode *mode = get_type_mode(type);
+ return new_r_Const(get_const_code_irg(), get_mode_null(mode));
+ }
+ case IR_INITIALIZER_TARVAL: {
+ ir_tarval *tv = get_initializer_tarval_value(initializer);
+ return new_r_Const(get_const_code_irg(), tv);
+ }
+ case IR_INITIALIZER_CONST:
+ return get_initializer_const_value(initializer);
+ case IR_INITIALIZER_COMPOUND:
+ panic("compound initializer in atomic entity not allowed (%+F)", entity);
+ }
+
+ panic("invalid initializer kind in get_atomic_ent_value(%+F)", entity);
+}
+
+void set_atomic_ent_value(ir_entity *entity, ir_node *val)
+{
+ ir_initializer_t *initializer;
+
+ assert(is_atomic_entity(entity));
+
+ assert(is_Dummy(val) || get_irn_mode(val) == get_type_mode(entity->type));
+ initializer = create_initializer_const(val);
+ entity->initializer = initializer;
+}