X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fbe%2Fia32%2Fbearch_ia32.c;h=fbeb4c4bbe79c71ee0e5aa43c5acef1d37985db1;hb=0e7d9243fcf3926564aebe56dca364090fd55f55;hp=96dce91549dbf827968c7369ebdb92df3ea8417a;hpb=fcba9f9a3500dcd4763ac05b7382157e99b53fd5;p=libfirm diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index 96dce9154..fbeb4c4bb 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -2249,8 +2249,22 @@ static int ia32_is_mux_allowed(ir_node *sel, ir_node *phi_list, int i, int j) if (mode_is_float(mode)) { /* always support Mux(!float, C1, C2) */ - if (is_Const(t) && is_Const(f) && !mode_is_float(get_irn_mode(cl))) - continue; + if (is_Const(t) && is_Const(f) && + !mode_is_float(get_irn_mode(cl))) { + switch (be_transformer) { + case TRANSFORMER_DEFAULT: + /* always support Mux(!float, C1, C2) */ + continue; +#ifdef FIRM_GRGEN_BE + case TRANSFORMER_PBQP: + case TRANSFORMER_RAND: + /* no support for Mux(*, C1, C2) */ + return 0; +#endif + default: + panic("invalid transformer"); + } + } /* only abs or nabs supported */ if (! psi_is_Abs_or_Nabs(cmp, sel, t, f)) return 0;