+/*
+ * Copyright (C) 1995-2007 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.
+ */
+
/**
* Project: libFIRM
* File name: ir/opt/opt_osr.h
* Created: 12.5.2006
* CVS-ID: $Id$
* Copyright: (c) 2006 Universität Karlsruhe
- * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
*/
#ifndef _OPT_OSR_H_
#define _OPT_OSR_H_
/**
* Do the Operator Scalar Replacement optimization and linear
* function test replacement for loop control.
+ * Can be switched off using the set_opt_strength_red() flag.
+ * In that case, only remove_phi_cycles() is executed.
*
* @param irg the graph which should be optimized
- * @param flags one of osr_flags
+ * @param flags set of osr_flags
*
* The linear function replacement test is controlled by the flags.
* If the osr_flag_lftr_with_ov_check is set, the replacement is only
* Note that i < a + 400 is also not possible with the current implementation
* although this might be allowed by other compilers...
*
- * Note further that tests for equality can be handled some simplier (but are not
+ * Note further that tests for equality can be handled some simpler (but are not
* implemented yet).
*
- * This algorithm destoyes the link field of nodes.
+ * This algorithm destroys the link field of nodes.
*/
void opt_osr(ir_graph *irg, unsigned flags);
+/**
+ * Removes useless Phi cycles, i.e cycles of Phi nodes with only one
+ * non-Phi node.
+ * This is automatically done in opt_osr(), so there is no need to call it
+ * additionally.
+ *
+ * @param irg the graph which should be optimized
+ *
+ * This algorithm destroys the link field of nodes.
+ */
+void remove_phi_cycles(ir_graph *irg);
+
#endif /* _OPT_OSR_H_ */