Model (un)reachable block info with bottom/top, not false/true.
authorChristoph Mallon <christoph.mallon@gmx.de>
Wed, 4 May 2011 10:42:05 +0000 (12:42 +0200)
committerChristoph Mallon <christoph.mallon@gmx.de>
Wed, 4 May 2011 13:46:06 +0000 (15:46 +0200)
ir/opt/fp-vrp.c

index dd3d0cf..f5d5edb 100644 (file)
@@ -169,9 +169,9 @@ static int transfer(ir_node* const irn)
 
                DB((dbg, LEVEL_3, "transfer %+F\n", irn));
 
-               if (b->z == f && b->o == f) {
+               if (b->z == f) {
                        z = f;
-                       o = f;
+                       o = t;
                } else switch (get_irn_opcode(irn)) {
                        case iro_Proj: {
                                ir_node* const pred = get_Proj_pred(irn);
@@ -249,8 +249,13 @@ result_unknown_X:
                                irn == get_irg_end_block(irg);
                }
 
-               o = f;
-               z = reachable ? t : f;
+               if (reachable) {
+                       z = t;
+                       o = f;
+               } else {
+                       z = f;
+                       o = t;
+               }
        } else if (mode_is_intb(m)) {
                DB((dbg, LEVEL_3, "transfer %+F\n", irn));
                switch (get_irn_opcode(irn)) {