re PR tree-optimization/80275 (Poor (but valid) code generated by optimizer passing optimizer list to function)

2017-04-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/80275
	* fold-const.c (split_address_to_core_and_offset): Handle
	POINTER_PLUS_EXPR.

	* g++.dg/opt/pr80275.C: New testcase.

From-SVN: r246648
This commit is contained in:
Richard Biener 2017-04-03 12:22:22 +00:00 committed by Richard Biener
parent 0be1d23cc3
commit fff80893ba
4 changed files with 45 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2017-04-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/80275
* fold-const.c (split_address_to_core_and_offset): Handle
POINTER_PLUS_EXPR.
2017-04-03 Eric Botcazou <ebotcazou@adacore.com>
* tree-nested.c (get_descriptor_type): Make sure that the alignment of

View File

@ -14341,6 +14341,24 @@ split_address_to_core_and_offset (tree exp,
&volatilep);
core = build_fold_addr_expr_loc (loc, core);
}
else if (TREE_CODE (exp) == POINTER_PLUS_EXPR)
{
core = TREE_OPERAND (exp, 0);
STRIP_NOPS (core);
*pbitpos = 0;
*poffset = TREE_OPERAND (exp, 1);
if (TREE_CODE (*poffset) == INTEGER_CST)
{
offset_int tem = wi::sext (wi::to_offset (*poffset),
TYPE_PRECISION (TREE_TYPE (*poffset)));
tem <<= LOG2_BITS_PER_UNIT;
if (wi::fits_shwi_p (tem))
{
*pbitpos = tem.to_shwi ();
*poffset = NULL_TREE;
}
}
}
else
{
core = exp;

View File

@ -1,3 +1,8 @@
2017-04-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/80275
* g++.dg/opt/pr80275.C: New testcase.
2017-04-03 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR testsuite/79356

View File

@ -0,0 +1,16 @@
// { dg-do compile { target c++14 } }
// { dg-options "-O2 -fdump-tree-optimized" }
#include <algorithm>
int g()
{
return 1234;
}
int f2()
{
return std::min({1, g(), 4});
}
// { dg-final { scan-tree-dump "return 1;" "optimized" } }