Handle signed modes for And in upper_bits_clean() better.
authorChristoph Mallon <christoph.mallon@gmx.de>
Wed, 12 Nov 2008 14:28:51 +0000 (14:28 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Wed, 12 Nov 2008 14:28:51 +0000 (14:28 +0000)
[r23592]

ir/be/ia32/ia32_transform.c

index 6f5a3f3..67382af 100644 (file)
@@ -2674,12 +2674,13 @@ static bool upper_bits_clean(ir_node *transformed_node, ir_mode *mode)
                        }
 
                case iro_ia32_And:
-                       if (mode_is_signed(mode))
-                               return false; /* TODO handle signed modes */
-                       return
-                               upper_bits_clean(get_irn_n(transformed_node, n_ia32_And_right), mode) ||
-                               upper_bits_clean(get_irn_n(transformed_node, n_ia32_And_left),  mode);
-
+                       if (!mode_is_signed(mode)) {
+                               return
+                                       upper_bits_clean(get_irn_n(transformed_node, n_ia32_And_right), mode) ||
+                                       upper_bits_clean(get_irn_n(transformed_node, n_ia32_And_left),  mode);
+                       }
+                       /* TODO if one is known to be zero extended, then || is sufficient */
+                       /* FALLTHROUGH */
                case iro_ia32_Or:
                case iro_ia32_Xor:
                        return