re PR rtl-optimization/67736 (Wrong optimization with -fexpensive-optimizations on...
authorSteve Ellcey <sellcey@imgtec.com>
Fri, 23 Oct 2015 15:56:15 +0000 (15:56 +0000)
committerSteve Ellcey <sje@gcc.gnu.org>
Fri, 23 Oct 2015 15:56:15 +0000 (15:56 +0000)
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

gcc/ChangeLog
gcc/combine.c

index 54359a0..25e4063 100644 (file)
@@ -1,3 +1,10 @@
+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.
+
 2015-10-23  Ilya Enkovich  <enkovich.gnu@gmail.com>
 
        PR middle-end/68066
index f755127..f0265d7 100644 (file)
@@ -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;
            }