X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Ftropt.h;h=2d0e9a658a1ee10658e24c9dcfbf01414820518f;hb=77c348bef494a5d4e1fbf754957884de5c0bfe99;hp=e65cbc363f6b800acdc8658ce9b7ff85f4cfda0d;hpb=9625e38fc84983dde86531443d2a54d719925e6f;p=libfirm diff --git a/ir/opt/tropt.h b/ir/opt/tropt.h index e65cbc363..2d0e9a658 100644 --- a/ir/opt/tropt.h +++ b/ir/opt/tropt.h @@ -1,91 +1,30 @@ -/** - * - * @file irsimpeltype.h +/* + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * - * Project: libFIRM - * File name: ir/opt/tropt.h - * Purpose: Optimize the type representation. - * Author: Goetz Lindenmaier - * Modified by: - * Created: 20.4.2005 - * CVS-ID: $Id$ - * Copyright: (c) 2005 Universität Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * This file is part of libFirm. * - * Perform optimizations of the type representation. + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. */ -#ifndef _TROPT_H_ -#define _TROPT_H_ - -#include "irnode.h" -#include "irgraph.h" -#include "type.h" - -/** This is the type for a method, that returns a pointer type to - * tp. This is needed in the normalization. */ -typedef type *(*gen_pointer_type_to_func)(type *tp); - -/** Insert Casts so that class type casts conform exactly with the type hierarchy. - * - * Formulated in Java, this achieves the following: - * - * For a class hierarchy - * class A {} - * class B extends A {} - * class C extends B {} - * we transforms a cast - * (A)new C() - * to - * (A)((B)new C()). - * - * The algorithm works for Casts with class types, but also for Casts - * with all pointer types that point (over several indirections, - * i.e. ***A) to a class type. Normalizes all graphs. Computes type - * information (@see irtypeinfo.h) if not available. - * Invalidates trout information as new casts are generated. - * - * @param gppt_fct A function that returns a pointer type that points - * to the type given as argument. If this parameter is NULL, a default - * function is used that either uses trout information or performs a O(n) - * search to find an existing pointer type. If it can not find a type, - * generates a pointer type with mode_P_mach and suffix "cc_ptr_tp". - */ -void normalize_irp_class_casts(gen_pointer_type_to_func gppt_fct); - - -/** Insert Casts so that class type casts conform exactly with the type hierarchy - * in given graph. - * - * For more details see @normalize_irp_class_casts(). - * - * This transformation requires that type information is computed. @see irtypeinfo.h. +/** + * @file + * @brief Perform optimizations of the type representation. + * @version $Id: $ */ -void normalize_irg_class_casts(ir_graph *irg, gen_pointer_type_to_func gppt_fct); +#ifndef FIRM_OPT_TROPT_H +#define FIRM_OPT_TROPT_H +void firm_init_class_casts_opt(void); -/** Optimize casting between class types. - * - * class A { m(); } - * class B extends A { } - * class C extends B {} - * Performs the following transformations: - * C c = (C)(B)(A)(B)new C() --> C c = (C)(B)newC() --> C c = new C() - * (Optimizing downcasts as A a = (A)(B)(new A()) --> A a = new A() can - * be suppressed by setting flag opt_suppress_downcast_optimization. - * Downcasting A to B might cause an exception. It is not clear - * whether this is modeled by the Firm Cast node, as it has no exception - * outputs.); - * If there is inh_m() that overwrites m() in B: - * ((A) new B()).m() --> (new B()).inh_m() - * Phi((A)x, (A)y) --> (A) Phi (x, y) if (A) is an upcast. - * - * Computes type information if not available. @see irtypeinfo.h. - * Typeinformation is valid after optimization. - * Invalidates trout information. - */ -void optimize_class_casts(void); - -#endif /* _TROPT_H_ */ +#endif