From 2fa18a497e12453d13e50b640156c453c05ad9e7 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Sat, 24 May 2008 10:11:27 +0000 Subject: [PATCH] When testing whether generating a Psi is allowed, check whether the mode of the compared values is <= 32 bit in the case when cmov is disallowed, too. (improved Matze's accidental commit) [r19747] --- ir/be/ia32/bearch_ia32.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index 4c69d672a..9d132c144 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -2024,16 +2024,15 @@ static ir_graph **ia32_get_irg_list(const void *self, ir_graph ***irg_list) */ static int ia32_is_psi_allowed(ir_node *sel, ir_node *phi_list, int i, int j) { - ir_node *phi, *left; + ir_node *phi; ir_node *cmp = NULL; - ir_mode *cmp_mode; /* we can't handle psis with 64bit compares yet */ if (is_Proj(sel)) { cmp = get_Proj_pred(sel); if (is_Cmp(cmp)) { - left = get_Cmp_left(cmp); - cmp_mode = get_irn_mode(left); + ir_node *left = get_Cmp_left(cmp); + ir_mode *cmp_mode = get_irn_mode(left); if (!mode_is_float(cmp_mode) && get_mode_size_bits(cmp_mode) > 32) return 0; } else { @@ -2089,14 +2088,8 @@ static int ia32_is_psi_allowed(ir_node *sel, ir_node *phi_list, int i, int j) pn_Cmp pn; /* No cmov, only some special cases */ - if (! is_Proj(sel)) + if (cmp == NULL) return 0; - cmp = get_Proj_pred(sel); - if (! is_Cmp(cmp)) - return 0; - - left = get_Cmp_left(cmp); - cmp_mode = get_irn_mode(left); /* Now some supported cases here */ pn = get_Proj_proj(sel); -- 2.20.1