Do not mark functions with kept basic blocks (endless loops, dead ends) as "const...
authorChristoph Mallon <christoph.mallon@gmx.de>
Thu, 11 Sep 2008 10:20:05 +0000 (10:20 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Thu, 11 Sep 2008 10:20:05 +0000 (10:20 +0000)
[r21838]

ir/opt/funccall.c

index 1b44fa4..da0a295 100644 (file)
@@ -576,12 +576,17 @@ static unsigned check_const_or_pure_function(ir_graph *irg, int top) {
        if (prop != mtp_no_property) {
                /* check, if a keep-alive exists */
                for (j = get_End_n_keepalives(end) - 1; j >= 0; --j) {
-                       ir_node *mem = get_End_keepalive(end, j);
+                       ir_node *kept = get_End_keepalive(end, j);
 
-                       if (mode_M != get_irn_mode(mem))
+                       if (is_Block(kept)) {
+                               prop = mtp_no_property;
+                               break;
+                       }
+
+                       if (mode_M != get_irn_mode(kept))
                                continue;
 
-                       prop = max_property(prop, follow_mem(mem, prop));
+                       prop = max_property(prop, follow_mem(kept, prop));
                        if (prop == mtp_no_property)
                                break;
                }