From: Christoph Mallon Date: Wed, 12 Nov 2008 14:28:51 +0000 (+0000) Subject: Handle signed modes for And in upper_bits_clean() better. X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=1b09c5ce20b8c949f66a7f037a815f86fbbc8567;p=libfirm Handle signed modes for And in upper_bits_clean() better. [r23592] --- diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index 6f5a3f385..67382afca 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -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