diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-01-10 22:18:22 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2020-01-10 22:18:22 +0100 |
commit | ea69031c5facc70e4a96df83cd58702900fd54b6 (patch) | |
tree | 879c6e151d192e9ac99c83999572027edc8d0517 /gcc/fold-const.h | |
parent | 974bb8a4dcbf51a153ab72da91a7256a296e7fa1 (diff) |
re PR tree-optimization/93210 (Sub-optimal code optimization on struct/combound constexpr (gcc vs. clang))
PR tree-optimization/93210
* fold-const.h (native_encode_initializer,
can_native_interpret_type_p): Declare.
* fold-const.c (native_encode_string): Fix up handling with off != -1,
simplify.
(native_encode_initializer): New function, moved from dwarf2out.c.
Adjust to native_encode_expr compatible arguments, including dry-run
and partial extraction modes. Don't handle STRING_CST.
(can_native_interpret_type_p): No longer static.
* gimple-fold.c (fold_ctor_reference): For native_encode_expr, verify
offset / BITS_PER_UNIT fits into int and don't call it if
can_native_interpret_type_p fails. If suboff is NULL and for
CONSTRUCTOR fold_{,non}array_ctor_reference returns NULL, retry with
native_encode_initializer.
(fold_const_aggregate_ref_1): Formatting fix.
* dwarf2out.c (native_encode_initializer): Moved to fold-const.c.
(tree_add_const_value_attribute): Adjust caller.
* gcc.dg/pr93210.c: New test.
* g++.dg/opt/pr93210.C: New test.
From-SVN: r280141
Diffstat (limited to 'gcc/fold-const.h')
-rw-r--r-- | gcc/fold-const.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/fold-const.h b/gcc/fold-const.h index 5e7c8680640..7ac792f16a8 100644 --- a/gcc/fold-const.h +++ b/gcc/fold-const.h @@ -26,7 +26,10 @@ extern int folding_initializer; /* Convert between trees and native memory representation. */ extern int native_encode_expr (const_tree, unsigned char *, int, int off = -1); +extern int native_encode_initializer (tree, unsigned char *, int, + int off = -1); extern tree native_interpret_expr (tree, const unsigned char *, int); +extern bool can_native_interpret_type_p (tree); /* Fold constants as much as possible in an expression. Returns the simplified expression. |