BugFix: test can only be created for a&b == 0 or a&b != 0
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sat, 25 Mar 2006 11:06:24 +0000 (11:06 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sat, 25 Mar 2006 11:06:24 +0000 (11:06 +0000)
ir/be/ia32/ia32_transform.c

index d28f900..040db67 100644 (file)
@@ -1284,9 +1284,11 @@ static ir_node *gen_Cond(ia32_transform_env_t *env) {
                expr = get_expr_op(cmp_a, cmp_b);
 
                if (cnst && expr) {
-                       if (mode_is_int(get_irn_mode(expr))) {
+                       pn_Cmp pnc = get_Proj_proj(sel);
+
+                       if ((pnc == pn_Cmp_Eq || pnc == pn_Cmp_Lg) && mode_is_int(get_irn_mode(expr))) {
                                if (classify_tarval(get_ia32_Immop_tarval(cnst)) == TV_CLASSIFY_NULL) {
-                                       /* a Cmp A, 0 */
+                                       /* a Cmp A =/!= 0 */
                                        ir_node    *op1  = expr;
                                        ir_node    *op2  = expr;
                                        ir_node    *and  = skip_Proj(expr);