diff options
author | Steve Ellcey <sellcey@imgtec.com> | 2015-10-23 15:56:15 +0000 |
---|---|---|
committer | Steve Ellcey <sje@gcc.gnu.org> | 2015-10-23 15:56:15 +0000 |
commit | 2c40b14dfdde747212f10fcdbd105034f1b738df (patch) | |
tree | 0dabf81de1be9e8e083e3b8ea883873cdb7d278c /gcc/combine.c | |
parent | f819b3b278609360242d969027031a9a9381edeb (diff) | |
download | gcc-2c40b14dfdde747212f10fcdbd105034f1b738df.zip gcc-2c40b14dfdde747212f10fcdbd105034f1b738df.tar.gz gcc-2c40b14dfdde747212f10fcdbd105034f1b738df.tar.bz2 |
re PR rtl-optimization/67736 (Wrong optimization with -fexpensive-optimizations on mips64el)
2015-10-23 Steve Ellcey <sellcey@imgtec.com>
Andrew Pinski <apinski@cavium.com>
PR rtl-optimization/67736
* combine.c (simplify_comparison): Use gen_lowpart_or_truncate instead
of gen_lowpart.
Co-Authored-By: Andrew Pinski <apinski@cavium.com>
From-SVN: r229259
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index f755127..f0265d7 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11530,8 +11530,8 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) tmode != GET_MODE (op0); tmode = GET_MODE_WIDER_MODE (tmode)) if ((unsigned HOST_WIDE_INT) c0 == GET_MODE_MASK (tmode)) { - op0 = gen_lowpart (tmode, inner_op0); - op1 = gen_lowpart (tmode, inner_op1); + op0 = gen_lowpart_or_truncate (tmode, inner_op0); + op1 = gen_lowpart_or_truncate (tmode, inner_op1); code = unsigned_condition (code); changed = 1; break; @@ -12049,12 +12049,9 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) & GET_MODE_MASK (mode)) + 1)) >= 0 && const_op >> i == 0 - && (tmode = mode_for_size (i, MODE_INT, 1)) != BLKmode - && (TRULY_NOOP_TRUNCATION_MODES_P (tmode, GET_MODE (op0)) - || (REG_P (XEXP (op0, 0)) - && reg_truncated_to_mode (tmode, XEXP (op0, 0))))) + && (tmode = mode_for_size (i, MODE_INT, 1)) != BLKmode) { - op0 = gen_lowpart (tmode, XEXP (op0, 0)); + op0 = gen_lowpart_or_truncate (tmode, XEXP (op0, 0)); continue; } |