Set the outs to inconsistent at the end of transform_irg().
[libfirm] / ir / ana / irmemory.c
index 99b5849..0cc2913 100644 (file)
@@ -98,7 +98,7 @@ static ir_alias_relation check_const(ir_node *cns, int size) {
        tarval *tv_size;
 
        if (size == 0)
-               return classify_tarval(tv) != TV_CLASSIFY_NULL ? no_alias : may_alias;
+               return tarval_is_null(tv) ? may_alias : no_alias;
        tv_size = new_tarval_from_long(size, get_tarval_mode(tv));
        return tarval_cmp(tv_size, tv) & (pn_Cmp_Eq|pn_Cmp_Lt) ? no_alias : may_alias;
 }  /* check_const */
@@ -484,7 +484,7 @@ static ir_alias_relation _get_alias_relation(
 
        /* Two save some code, sort the addresses by its id's. Beware, this
           might break some things, so better check here. */
-       assert(iro_SymConst < iro_Sel && iro_Sel < iro_Proj && "Code dependence breaked");
+       assert(iro_SymConst < iro_Sel && iro_Sel < iro_Proj && "Code dependence broken");
        op1 = get_irn_opcode(adr1);
        op2 = get_irn_opcode(adr2);
 
@@ -651,6 +651,10 @@ static ir_alias_relation _get_alias_relation(
                if (get_mode_size_bits(mode1) != get_mode_size_bits(mode2))
                        return no_alias;
 
+               /* cheap test: if only one is a reference mode, no alias */
+               if (mode_is_reference(mode1) != mode_is_reference(mode2))
+                       return no_alias;
+
                /* try rule R5 */
                rel = different_types(adr1, adr2);
                if (rel != may_alias)