re PR tree-optimization/87633 (ice in compare_range_wit h_value, at vr-values.c:1702)

2018-10-22  Yury Gribov  <tetra2005@gmail.com>

gcc/
	PR tree-optimization/87633
	* match.pd: Do not generate unordered integer comparisons.

gcc/testsuite/
	PR tree-optimization/87633
	* g++.dg/pr87633.C: New test.

From-SVN: r265399
This commit is contained in:
Yury Gribov 2018-10-22 20:26:32 +00:00 committed by Yury Gribov
parent 8d2d39587d
commit f38428472d
4 changed files with 44 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2018-10-22 Yury Gribov <tetra2005@gmail.com>
PR tree-optimization/87633
* match.pd: Do not generate unordered integer comparisons.
2018-10-22 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/87600

View File

@ -3401,7 +3401,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(cmp @0 @1))))))
/* Optimize various special cases of (FTYPE) N CMP (FTYPE) M. */
(for cmp (tcc_comparison)
(for cmp (lt le eq ne ge gt unordered ordered unlt unle ungt unge uneq ltgt)
icmp (lt le eq ne ge gt unordered ordered lt le gt ge eq ne)
(simplify
(cmp (float@0 @1) (float @2))
(if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (@0))
@ -3416,15 +3417,17 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
}
(if (fmt.can_represent_integral_type_p (type1)
&& fmt.can_represent_integral_type_p (type2))
(if (cmp == ORDERED_EXPR || cmp == UNORDERED_EXPR)
{ constant_boolean_node (cmp == ORDERED_EXPR, type); }
(if (TYPE_PRECISION (type1) > TYPE_PRECISION (type2)
&& type1_signed_p >= type2_signed_p)
(cmp @1 (convert @2))
(icmp @1 (convert @2))
(if (TYPE_PRECISION (type1) < TYPE_PRECISION (type2)
&& type1_signed_p <= type2_signed_p)
(cmp (convert:type2 @1) @2)
(icmp (convert:type2 @1) @2)
(if (TYPE_PRECISION (type1) == TYPE_PRECISION (type2)
&& type1_signed_p == type2_signed_p)
(cmp @1 @2)))))))))
(icmp @1 @2))))))))))
/* Optimize various special cases of (FTYPE) N CMP CST. */
(for cmp (lt le eq ne ge gt)

View File

@ -1,3 +1,8 @@
2018-10-22 Yury Gribov <tetra2005@gmail.com>
PR tree-optimization/87633
* g++.dg/pr87633.C: New test.
2018-10-22 Marek Polacek <polacek@redhat.com>
PR testsuite/87694

View File

@ -0,0 +1,21 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
class a {
public:
double b() const;
};
class c {
public:
int m_fn2() const;
};
double a::b() const {
return 0 == 0 ? reinterpret_cast<const c *>(this)->m_fn2() : 0;
}
bool d;
void e() {
a f;
double g = f.b();
/* { dg-final { scan-tree-dump-not "unord" "optimized" } } */
d = __builtin_isnan(g);
}