Commit 34f6b14f by Jakub Jelinek

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.
parent fa477e45
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.
......
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
......
/* 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;
}
......
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