From c87d9219afb181191457710f479696a47299451a Mon Sep 17 00:00:00 2001 From: =?utf8?q?G=C3=B6tz=20Lindenmaier?= Date: Wed, 11 Jul 2001 12:19:09 +0000 Subject: [PATCH] *** empty log message *** [r224] --- ir/tr/typegmod.c | 35 +++++++++++++++++++++++++++++++++++ ir/tr/typegmod.h | 40 ++++++++++++++++++++++++++++++++++++++++ ir/tr/typegmod_t.h | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 ir/tr/typegmod.c create mode 100644 ir/tr/typegmod.h create mode 100644 ir/tr/typegmod_t.h diff --git a/ir/tr/typegmod.c b/ir/tr/typegmod.c new file mode 100644 index 000000000..d6138fc11 --- /dev/null +++ b/ir/tr/typegmod.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2001 by Universitaet Karlsruhe +** All rights reserved. +** +** Authors: Goetz Lindenmaier +** +*/ + +# include "typegmod_t.h" +# include "type_t.h" +# include "tpop_t.h" +# include "irmode.h" + +inline void exchange_types(type *old_type, type *new_type) { + int i; + /* Deallocate datastructures not directly contained in the + old type */ + /* @@@@ */ + + /* Remove old type from type list. Will this confuscate the + iterators? */ + /* @@@ */ + + /* Ev. add to a list of id types for later deallocation. */ + /* @@@ */ + + /* Exchange the types */ + old_type->type_op = type_id; + old_type->mode = (ir_mode *) new_type; +} + +inline type *skip_tid(type *tp) { + while (tp->type_op == type_id) + tp = (type *) tp->mode; + return tp; +} diff --git a/ir/tr/typegmod.h b/ir/tr/typegmod.h new file mode 100644 index 000000000..d6490b469 --- /dev/null +++ b/ir/tr/typegmod.h @@ -0,0 +1,40 @@ + +# ifndef _TYPEGMOD_H_ +# define _TYPEGMOD_H_ + +# include "type.h" + +/****h* libfirm/typegmod + * + * NAME + * file typegmod.h + * COPYRIGHT + * (C) 2001 by Universitaet Karlsruhe + * AUTHORS + * Goetz Lindenmaier + * NOTES + * This module supplies routines that support changing the type graph. + ***** + */ + +/****f* tpop/exchange_types + * + * NAME + * exchange_types -- replaces one type by the other. + * SYNOPSIS + * void exchange_types(type *old_type, type *new_type); + * INPUTS + * The old type that shall be replaced by the new type. + * SIDE EFFECTS + * Old type is replaced by new_type. All references to old_type + * now point to new_type. The memory for the old type is destroyed, + * but still used. Therefore it is not freed. The memory will + * be lost after a certain while. + * In the future there might be a routine to recover the memory, but + * this will be at considerable runtime cost. + *** + */ +inline void exchange_types(type *old_type, type *new_type); + + +# endif /*_TYPEGMOD_H_ */ diff --git a/ir/tr/typegmod_t.h b/ir/tr/typegmod_t.h new file mode 100644 index 000000000..46e1864a0 --- /dev/null +++ b/ir/tr/typegmod_t.h @@ -0,0 +1,35 @@ + +# ifndef _TYPEGMOD_T_H_ +# define _TYPEGMOD_T_H_ + +# include "typegmod.h" + +/****h* libfirm/typegmod + * + * NAME + * file typegmod.h + * COPYRIGHT + * (C) 2001 by Universitaet Karlsruhe + * AUTHORS + * Goetz Lindenmaier + * NOTES + * This module supplies routines that support changing the type graph. + ***** + */ + +/****f* tpop/skip_tid + * + * NAME + * skip_tid -- skip id types until a useful type is reached. + * SYNOPSIS + * type *skip_tid(type *tp) + * INPUTS + * A type of arbitrary kind. + * RETURNS + * tp if it is not an id type. + * If tp is an id type retruns the real type it stands for. + *** + */ +inline type *skip_tid(type *tp); + +# endif /*_TYPEGMOD_T_H_ */ -- 2.20.1