- Fixed strict-convs before Stores again: We can skip at least those
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 2 Jun 2008 11:55:54 +0000 (11:55 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 2 Jun 2008 11:55:54 +0000 (11:55 +0000)
  that conv TO the same mode as the store

[r19925]

ir/be/ia32/ia32_transform.c

index 8d6fec0..2a71df0 100644 (file)
@@ -2513,22 +2513,16 @@ static ir_node *gen_normal_Store(ir_node *node)
        addr.mem = be_transform_node(mem);
 
        if (mode_is_float(mode)) {
+               /* Convs (and strict-Convs) before stores are unnecessary if the mode
+                  is the same. */
+               while (is_Conv(val) && mode == get_irn_mode(val)) {
+                       val = get_Conv_op(val);
+               }
+               new_val = be_transform_node(val);
                if (ia32_cg_config.use_sse2) {
-                       /* Convs (and strict-Convs) before stores are unnecessary if the mode
-                          is the same. */
-                       while (is_Conv(val) && mode == get_irn_mode(get_Conv_op(val))) {
-                               val = get_Conv_op(val);
-                       }
-                       new_val = be_transform_node(val);
                        new_node = new_rd_ia32_xStore(dbgi, irg, new_block, addr.base,
                                                      addr.index, addr.mem, new_val);
                } else {
-                       /* We can skip ALL float Convs (and strict-Convs) before stores. */
-                       while (is_Conv(val) &&
-                                       mode_is_float(get_irn_mode(get_Conv_op(val)))) {
-                               val = get_Conv_op(val);
-                       }
-                       new_val = be_transform_node(val);
                        new_node = new_rd_ia32_vfst(dbgi, irg, new_block, addr.base,
                                                    addr.index, addr.mem, new_val, mode);
                }