handle failing tarval computations gracefully
authorMatthias Braun <matze@braunis.de>
Wed, 13 Feb 2008 15:20:13 +0000 (15:20 +0000)
committerMatthias Braun <matze@braunis.de>
Wed, 13 Feb 2008 15:20:13 +0000 (15:20 +0000)
[r17688]

ir/ir/iropt.c

index 0e8ec27..53c4d9b 100644 (file)
@@ -3331,13 +3331,15 @@ static ir_node *transform_node_Minus(ir_node *n) {
                ir_node *mul_r = get_Mul_right(a);
                if (is_Const(mul_r)) {
                        tarval   *tv    = tarval_neg(get_Const_tarval(mul_r));
-                       ir_node  *cnst  = new_Const(mode, tv);
-                       dbg_info *dbg   = get_irn_dbg_info(a);
-                       ir_graph *irg   = current_ir_graph;
-                       ir_node  *block = get_nodes_block(a);
-                       n = new_rd_Mul(dbg, irg, block, mul_l, cnst, mode);
-                       DBG_OPT_ALGSIM2(oldn, a, n, FS_OPT_MINUS_MUL_C);
-                       return n;
+                       if(tv != tarval_bad) {
+                               ir_node  *cnst  = new_Const(mode, tv);
+                               dbg_info *dbg   = get_irn_dbg_info(a);
+                               ir_graph *irg   = current_ir_graph;
+                               ir_node  *block = get_nodes_block(a);
+                               n = new_rd_Mul(dbg, irg, block, mul_l, cnst, mode);
+                               DBG_OPT_ALGSIM2(oldn, a, n, FS_OPT_MINUS_MUL_C);
+                               return n;
+                       }
                }
        }