From f0e87513309ee6f01429bcbd2983e2b526495319 Mon Sep 17 00:00:00 2001 From: Kyrylo Tkachov Date: Thu, 26 Nov 2015 13:07:29 +0000 Subject: [PATCH] [combine] Only restrict pure simplification in mult-extend subst case, allow other substitutions * combine.c (subst): Do not return clobber of zero in widening mult case. Just return x unchanged if it is a no-op substitution. From-SVN: r230946 --- gcc/ChangeLog | 5 +++++ gcc/combine.c | 13 +++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 55c8820cfe6..5ca6cc718b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-11-26 Kyrylo Tkachov + + * combine.c (subst): Do not return clobber of zero in widening mult + case. Just return x unchanged if it is a no-op substitution. + 2015-11-26 Vladimir Makarov PR target/68416 diff --git a/gcc/combine.c b/gcc/combine.c index 4958d3bfc63..71b1656ba33 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -5285,7 +5285,7 @@ subst (rtx x, rtx from, rtx to, int in_dest, int in_cond, int unique_copy) || GET_CODE (SET_DEST (x)) == PC)) fmt = "ie"; - /* Substituting into the operands of a widening MULT is not likely + /* Trying to simplify the operands of a widening MULT is not likely to create RTL matching a machine insn. */ if (code == MULT && (GET_CODE (XEXP (x, 0)) == ZERO_EXTEND @@ -5293,13 +5293,10 @@ subst (rtx x, rtx from, rtx to, int in_dest, int in_cond, int unique_copy) && (GET_CODE (XEXP (x, 1)) == ZERO_EXTEND || GET_CODE (XEXP (x, 1)) == SIGN_EXTEND) && REG_P (XEXP (XEXP (x, 0), 0)) - && REG_P (XEXP (XEXP (x, 1), 0))) - { - if (from == to) - return x; - else - return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx); - } + && REG_P (XEXP (XEXP (x, 1), 0)) + && from == to) + return x; + /* Get the mode of operand 0 in case X is now a SIGN_EXTEND of a constant. */ -- 2.30.2