Commit bb1bc604 by Richard Biener Committed by Richard Biener

re PR tree-optimization/78847 (pointer arithmetic from c++ ranged-based for loop not optimized)

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

	PR tree-optimization/78847
	* fold-const.c (split_tree): Handle POINTER_PLUS_EXPR.

	* g++.dg/tree-ssa/pr78847.C: New testcase.

From-SVN: r247061
parent e1478a0e
2017-04-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/78847
* fold-const.c (split_tree): Handle POINTER_PLUS_EXPR.
2017-04-21 Richard Biener <rguenther@suse.de>
* tree.h (build_qualified_type): Annotate with CXX_MEM_STAT_INFO.
(build_distinct_type_copy): Likewise.
(build_variant_type_copy): Likewise.
......
......@@ -798,8 +798,11 @@ split_tree (location_t loc, tree in, tree type, enum tree_code code,
though the C standard doesn't say so) for integers because
the value is not affected. For reals, the value might be
affected, so we can't. */
&& ((code == PLUS_EXPR && TREE_CODE (in) == MINUS_EXPR)
|| (code == MINUS_EXPR && TREE_CODE (in) == PLUS_EXPR))))
&& ((code == PLUS_EXPR && TREE_CODE (in) == POINTER_PLUS_EXPR)
|| (code == PLUS_EXPR && TREE_CODE (in) == MINUS_EXPR)
|| (code == MINUS_EXPR
&& (TREE_CODE (in) == PLUS_EXPR
|| TREE_CODE (in) == POINTER_PLUS_EXPR)))))
{
tree op0 = TREE_OPERAND (in, 0);
tree op1 = TREE_OPERAND (in, 1);
......
2017-04-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/78847
* g++.dg/tree-ssa/pr78847.C: New testcase.
2017-04-21 Jakub Jelinek <jakub@redhat.com>
PR c/80468
......
/* { dg-do compile } */
/* { dg-require-effective-target c++14 } */
/* { dg-options "-O3 -fdump-tree-ldist" } */
#include <stddef.h>
#include <cstring>
#include <experimental/string_view>
using string_view = std::experimental::string_view;
class Foo {
constexpr static size_t Length = 9;
char ascii_[Length];
public:
Foo();
string_view view() const {
return string_view(ascii_, Length);
}
};
void testWithLoopValue(const Foo foo, size_t ptr, char *buf_) {
for (auto c : foo.view())
buf_[ptr++] = c;
}
/* { dg-final { scan-tree-dump "memcpy\[^\n\r\]*, 9\\);" "ldist" } } */
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