X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_confirms.h;h=62710959c7de4a19d224241c8a435acaf7a6273d;hb=3f57d89fcb7055fc726a41aa63214aab97854cdf;hp=23baa76b777e2ecc42f893b693fd46188629453d;hpb=829a66832c7e10daa5dc4cf2bbbb726176f787e7;p=libfirm diff --git a/ir/opt/opt_confirms.h b/ir/opt/opt_confirms.h index 23baa76b7..62710959c 100644 --- a/ir/opt/opt_confirms.h +++ b/ir/opt/opt_confirms.h @@ -1,36 +1,39 @@ /* - * Project: libFIRM - * File name: ir/opt/opt_confirms.h - * Purpose: Optimizations regarding Confirm nodes - * Author: Michael Beck - * Modified by: - * Created: - * CVS-ID: $Id$ - * Copyright: (c) 1998-2005 Universität Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * 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 _OPT_CONFIRMS_H_ -#define _OPT_CONFIRMS_H_ - -#include "irnode.h" /** - * @file opt_confirms.h + * @file + * @brief Optimizations regarding Confirm nodes. + * @author Michael Beck + * @version $Id$ * * Optimizations regarding Confirm nodes. - * These optimiztions are not means to be run from + * These optimizations are not means to be run from * frontends, they are called from iropt. */ +#ifndef FIRM_OPT_CONFIRMS_H +#define FIRM_OPT_CONFIRMS_H -/** - * Possible return values of value_classify(). - */ -typedef enum _value_classify { - VALUE_UNKNOWN = 0, /**< could not classify */ - VALUE_POSITIVE = 1, /**< value is positive, i.e. >= 0 */ - VALUE_NEGATIVE = -1 /**< value is negative, i.e. <= 0 if - no signed zero exists or < 0 else */ -} value_classify; +#include "firm_types.h" + +/** Needed for MSVC to suporess warnings because it doest NOT handle const right. */ +typedef const ir_node *ir_node_cnst_ptr; /** * Check, if the value of a node is != 0. @@ -38,21 +41,36 @@ typedef enum _value_classify { * This is a often needed case, so we handle here Confirm * nodes too. * - * @param n a node representing the value + * @param n a node representing the value + * @param confirm if n is confirmed to be != 0, returns + * the the Confirm-node, else NULL */ -int value_not_zero(ir_node *n); +int value_not_zero(const ir_node *n, ir_node_cnst_ptr *confirm); /** * Check, if the value of a node cannot represent a NULL pointer. * - * - If sel_based_null_check_elim is enabled, all + * - If option sel_based_null_check_elim is enabled, all * Sel nodes can be skipped. * - A SymConst(entity) is NEVER a NULL pointer + * - A Const != NULL is NEVER a NULL pointer * - Confirms are evaluated * - * @param n a node representing the value + * @param n a node representing the value + * @param confirm if n is confirmed to be != NULL, returns + * the the Confirm-node, else NULL + */ +int value_not_null(const ir_node *n, ir_node_cnst_ptr *confirm); + +/** + * Possible return values of value_classify(). */ -int value_not_null(ir_node *n); +typedef enum value_classify_sign { + value_classified_unknown = 0, /**< could not classify */ + value_classified_positive = 1, /**< value is positive, i.e. >= 0 */ + value_classified_negative = -1 /**< value is negative, i.e. <= 0 if + no signed zero exists or < 0 else */ +} value_classify_sign; /** * Check, if the value of a node can be confirmed >= 0 or <= 0, @@ -61,7 +79,7 @@ int value_not_null(ir_node *n); * * @param n a node representing the value */ -value_classify classify_value_sign(ir_node *n); +value_classify_sign classify_value_sign(ir_node *n); /** * Return the value of a Cmp if one or both predecessors @@ -74,4 +92,4 @@ value_classify classify_value_sign(ir_node *n); */ tarval *computed_value_Cmp_Confirm(ir_node *cmp, ir_node *left, ir_node *right, pn_Cmp pnc); -#endif /* _OPT_CONFIRMS_H_ */ +#endif /* FIRM_OPT_CONFIRMS_H */