* @file
* @brief Optimizations regarding Confirm nodes.
* @author Michael Beck
- * @version $Id$
*/
#include "config.h"
#define DBG_OUT_TR(l_relation, l_bound, r_relation, r_bound, relation, v) \
ir_printf("In %e:\na %= %n && b %= %n ==> a %= b == %s\n", \
get_irg_entity(current_ir_graph), \
- l_relation, l_bound, r_relation, r_bound, relation, v);
+ l_relation, l_bound, r_relation, r_bound, relation, v)
/* right side */
#define DBG_OUT_R(r_relation, r_bound, left, relation, right, v) \
ir_printf("In %e:\na %= %n ==> %n %= %n == %s\n", \
get_irg_entity(current_ir_graph), \
- r_relation, r_bound, left, relation, right, v);
+ r_relation, r_bound, left, relation, right, v)
/* left side */
#define DBG_OUT_L(l_relation, l_bound, left, relation, right, v) \
ir_printf("In %e:\na %= %n ==> %n %= %n == %s\n", \
get_irg_entity(current_ir_graph), \
- l_relation, l_bound, left, relation, right, v);
+ l_relation, l_bound, left, relation, right, v)
#else
-#define DBG_OUT_TR(l_relation, l_bound, r_relation, r_bound, relation, v)
-#define DBG_OUT_R(r_relation, r_bound, left, relation, right, v)
-#define DBG_OUT_L(l_relation, l_bound, left, relation, right, v)
+#define DBG_OUT_TR(l_relation, l_bound, r_relation, r_bound, relation, v) (void)0
+#define DBG_OUT_R(r_relation, r_bound, left, relation, right, v) (void)0
+#define DBG_OUT_L(l_relation, l_bound, left, relation, right, v) (void)0
#endif /* DEBUG_CONFIRM */
* This is a often needed case, so we handle here Confirm
* nodes too.
*/
-FIRM_API int value_not_zero(const ir_node *n, ir_node_cnst_ptr *confirm)
+int value_not_zero(const ir_node *n, const ir_node **confirm)
{
-#define RET_ON(x) if (x) { *confirm = n; return 1; }; break
+#define RET_ON(x) if (x) { *confirm = n; return 1; } break
ir_tarval *tv;
ir_mode *mode = get_irn_mode(n);
/*
* Check, if the value of a node cannot represent a NULL pointer.
*
- * - Casts are skipped
- * - If sel_based_null_check_elim is enabled, all
- * Sel nodes can be skipped.
+ * - Casts are skipped, Sels are skipped
* - A SymConst(entity) is NEVER a NULL pointer
* - Confirms are evaluated
*/
-FIRM_API int value_not_null(const ir_node *n, ir_node_cnst_ptr *confirm)
+int value_not_null(const ir_node *n, const ir_node **confirm)
{
ir_tarval *tv;
return 1;
assert(mode_is_reference(get_irn_mode(n)));
- if (get_opt_sel_based_null_check_elim()) {
- /* skip all Sel nodes and Cast's */
- while (is_Sel(n)) {
- n = skip_Cast(get_Sel_ptr(n));
- }
+ /* skip all Sel nodes and Cast's */
+ while (is_Sel(n)) {
+ n = skip_Cast(get_Sel_ptr(n));
}
while (1) {
if (is_Cast(n)) { n = get_Cast_op(n); continue; }
break;
}
- if (is_Global(n)) {
+ if (is_SymConst_addr_ent(n)) {
/* global references are never NULL */
return 1;
} else if (n == get_irg_frame(get_irn_irg(n))) {
* If the mode of the value did not honor signed zeros, else
* check for >= 0 or < 0.
*/
-FIRM_API ir_value_classify_sign classify_value_sign(ir_node *n)
+ir_value_classify_sign classify_value_sign(ir_node *n)
{
ir_tarval *tv, *c;
ir_mode *mode;
* @param right the right operand of the Cmp
* @param relation the compare relation
*/
-FIRM_API ir_tarval *computed_value_Cmp_Confirm(const ir_node *cmp, ir_node *left, ir_node *right, ir_relation relation)
+ir_tarval *computed_value_Cmp_Confirm(const ir_node *cmp, ir_node *left, ir_node *right, ir_relation relation)
{
ir_node *l_bound;
ir_relation l_relation, res_relation, neg_relation;
interval_t l_iv, r_iv;
ir_tarval *tv;
- ir_mode *mode;
if (is_Confirm(right)) {
/* we want the Confirm on the left side */
* We know that a CMP b and check for a ~CMP b
*/
else {
- mode = get_irn_mode(left);
neg_relation = get_negated_relation(relation);
if ((r_relation == neg_relation) || (r_relation == (neg_relation & ~ir_relation_equal))) {
* We know that a CMP b and check for a ~CMP b
*/
else {
- mode = get_irn_mode(left);
neg_relation = get_negated_relation(relation);
if ((l_relation == neg_relation) || (l_relation == (neg_relation & ~ir_relation_equal))) {