From 1f3f36d154896f68c1c35420121782ed236da177 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 18 Sep 2000 11:30:24 -0700 Subject: [PATCH] combine.c (if_then_else_cond): Canonicalize BImode true to STORE_FLAG_VALUE. * combine.c (if_then_else_cond): Canonicalize BImode true to STORE_FLAG_VALUE. * explow.c (trunc_int_for_mode): Likewise. From-SVN: r36507 --- gcc/ChangeLog | 4 ++++ gcc/combine.c | 8 ++++++++ gcc/explow.c | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e1a280d33b..ec5c66370e6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2000-09-18 Richard Henderson + * combine.c (if_then_else_cond): Canonicalize BImode true to + STORE_FLAG_VALUE. + * explow.c (trunc_int_for_mode): Likewise. + * combine.c (combine_simplify_rtx): Use gen_unary to distribute the NOT for De Morgan's rule. * simplify-rtx.c (simplify_unary_operation): Simplify a BImode NOT diff --git a/gcc/combine.c b/gcc/combine.c index 033bfac8d64..b8ac09b766a 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -7418,6 +7418,14 @@ if_then_else_cond (x, ptrue, pfalse) || ((cond0 = get_last_value (x)) != 0 && CONSTANT_P (cond0))) ; + /* If we're in BImode, canonicalize on 0 and STORE_FLAG_VALUE, as that + will be least confusing to the rest of the compiler. */ + else if (mode == BImode) + { + *ptrue = GEN_INT (STORE_FLAG_VALUE), *pfalse = const0_rtx; + return x; + } + /* If X is known to be either 0 or -1, those are the true and false values when testing X. */ else if (x == constm1_rtx || x == const0_rtx diff --git a/gcc/explow.c b/gcc/explow.c index ce7118eeb17..b2763e3abf0 100644 --- a/gcc/explow.c +++ b/gcc/explow.c @@ -52,6 +52,10 @@ trunc_int_for_mode (c, mode) { int width = GET_MODE_BITSIZE (mode); + /* Canonicalize BImode to 0 and STORE_FLAG_VALUE. */ + if (mode == BImode) + return c & 1 ? STORE_FLAG_VALUE : 0; + /* We clear out all bits that don't belong in MODE, unless they and our sign bit are all one. So we get either a reasonable negative value or a reasonable unsigned value. */ -- 2.30.2