diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-04-28 11:26:56 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-04-28 11:26:56 +0200 |
commit | 34f6b14ff33e0c64b3a4a1a2cd871df715d69151 (patch) | |
tree | 22b3389c391cfa7244a83048690e2288670dd21a /gcc | |
parent | fa477e454287063a583967c79867b44deea8e4ad (diff) | |
download | gcc-34f6b14ff33e0c64b3a4a1a2cd871df715d69151.zip gcc-34f6b14ff33e0c64b3a4a1a2cd871df715d69151.tar.gz gcc-34f6b14ff33e0c64b3a4a1a2cd871df715d69151.tar.bz2 |
tree: Fix up TREE_SIDE_EFFECTS on internal calls [PR94809]
On the following testcase, match.pd during GENERIC folding
changes the -1U / x < y into __imag__ .MUL_OVERFLOW (x, y),
but unfortunately unlike for normal calls nothing sets TREE_SIDE_EFFECTS on
the call. There is the process_call_operands function that non-internal
call creation calls and it is usable for internal calls too,
e.g. TREE_SIDE_EFFECTS is derived from checking whether the
call has side-effects (non-ECF_{CONST,PURE}; we have those for internal
calls) and from whether any of the arguments has TREE_SIDE_EFFECTS.
2020-04-28 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94809
* tree.c (build_call_expr_internal_loc_array): Call
process_call_operands.
* gcc.c-torture/execute/pr94809.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/pr94809.c | 12 | ||||
-rw-r--r-- | gcc/tree.c | 1 |
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7d8fb27..d8b753d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,10 @@ -2020-04-27 Anton Youdkevitch <anton.youdkevitch@bell-sw.com> +2020-04-28 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/94809 + * tree.c (build_call_expr_internal_loc_array): Call + process_call_operands. + +2020-04-27 Anton Youdkevitch <anton.youdkevitch@bell-sw.com> * config/aarch64/aarch64-cores.def (thunderx3t110): Add the chip name. * config/aarch64/aarch64-tune.md: Regenerate. @@ -7,7 +13,7 @@ (thunderx3t110_vector_cost): Likewise. (thunderx3t110_prefetch_tune): Likewise. (thunderx3t110_tunings): Likewise. - * gcc/config/aarch64/aarch64-cost-tables.h (thunderx3t110_extra_costs): + * config/aarch64/aarch64-cost-tables.h (thunderx3t110_extra_costs): Define. * config/aarch64/thunderx3t110.md: New file. * config/aarch64/aarch64.md: Include thunderx3t110.md. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 77f56c1..e94c09c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-04-28 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/94809 + * gcc.c-torture/execute/pr94809.c: New test. + 2020-04-28 Iain Sandoe <iain@sandoe.co.uk> PR c++/94760 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr94809.c b/gcc/testsuite/gcc.c-torture/execute/pr94809.c new file mode 100644 index 0000000..ce55e8f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr94809.c @@ -0,0 +1,12 @@ +/* PR tree-optimization/94809 */ + +int +main () +{ + int a = 0; + unsigned long long one = 1; + ((-1ULL / one) < a++, one); + if (a != 1) + __builtin_abort (); + return 0; +} @@ -11523,6 +11523,7 @@ build_call_expr_internal_loc_array (location_t loc, internal_fn ifn, CALL_EXPR_ARG (t, i) = args[i]; SET_EXPR_LOCATION (t, loc); CALL_EXPR_IFN (t) = ifn; + process_call_operands (t); return t; } |