Commit 89789ec9 by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/92644 (ICE in wide_int_to_tree_1, at tree.c:1530)

	PR tree-optimization/92644
	* tree-ssa-phiopt.c (minmax_replacement): Add INTEGRAL_TYPE_P check
	next to INTEGER_CST checks.

	* g++.dg/opt/pr92644.C: New test.

From-SVN: r278720
parent f4a74d27
2019-11-26 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/92644
* tree-ssa-phiopt.c (minmax_replacement): Add INTEGRAL_TYPE_P check
next to INTEGER_CST checks.
2019-11-26 Richard Biener <rguenther@suse.de> 2019-11-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645 PR tree-optimization/92645
2019-11-26 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/92644
* g++.dg/opt/pr92644.C: New test.
2019-11-26 Richard Biener <rguenther@suse.de> 2019-11-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645 PR tree-optimization/92645
......
// PR tree-optimization/92644
// { dg-do compile { target c++14 } }
// { dg-options "-O2 -fno-early-inlining" }
inline auto foo () { return nullptr; }
int bar () { return foo () ? 1 : 0; }
...@@ -1381,7 +1381,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb, ...@@ -1381,7 +1381,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
/* Turn EQ/NE of extreme values to order comparisons. */ /* Turn EQ/NE of extreme values to order comparisons. */
if ((cmp == NE_EXPR || cmp == EQ_EXPR) if ((cmp == NE_EXPR || cmp == EQ_EXPR)
&& TREE_CODE (rhs) == INTEGER_CST) && TREE_CODE (rhs) == INTEGER_CST
&& INTEGRAL_TYPE_P (TREE_TYPE (rhs)))
{ {
if (wi::eq_p (wi::to_wide (rhs), wi::min_value (TREE_TYPE (rhs)))) if (wi::eq_p (wi::to_wide (rhs), wi::min_value (TREE_TYPE (rhs))))
{ {
...@@ -1407,7 +1408,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb, ...@@ -1407,7 +1408,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
larger = rhs; larger = rhs;
/* If we have smaller < CST it is equivalent to smaller <= CST-1. /* If we have smaller < CST it is equivalent to smaller <= CST-1.
Likewise smaller <= CST is equivalent to smaller < CST+1. */ Likewise smaller <= CST is equivalent to smaller < CST+1. */
if (TREE_CODE (larger) == INTEGER_CST) if (TREE_CODE (larger) == INTEGER_CST
&& INTEGRAL_TYPE_P (TREE_TYPE (larger)))
{ {
if (cmp == LT_EXPR) if (cmp == LT_EXPR)
{ {
...@@ -1435,7 +1437,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb, ...@@ -1435,7 +1437,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
larger = gimple_cond_lhs (cond); larger = gimple_cond_lhs (cond);
/* If we have larger > CST it is equivalent to larger >= CST+1. /* If we have larger > CST it is equivalent to larger >= CST+1.
Likewise larger >= CST is equivalent to larger > CST-1. */ Likewise larger >= CST is equivalent to larger > CST-1. */
if (TREE_CODE (smaller) == INTEGER_CST) if (TREE_CODE (smaller) == INTEGER_CST
&& INTEGRAL_TYPE_P (TREE_TYPE (smaller)))
{ {
wi::overflow_type overflow; wi::overflow_type overflow;
if (cmp == GT_EXPR) if (cmp == GT_EXPR)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment