diff options
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 497e826..c627187 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -7378,12 +7378,16 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse) && 0 != (cond0 = if_then_else_cond (SUBREG_REG (x), &true0, &false0))) { - *ptrue = simplify_gen_subreg (mode, true0, + true0 = simplify_gen_subreg (mode, true0, + GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x)); + false0 = simplify_gen_subreg (mode, false0, GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x)); - *pfalse = simplify_gen_subreg (mode, false0, - GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x)); - - return cond0; + if (true0 && false0) + { + *ptrue = true0; + *pfalse = false0; + return cond0; + } } /* If X is a constant, this isn't special and will cause confusions |