[PATCH] tree: Fix up TREE_SIDE_EFFECTS on internal calls [PR94809]
Richard Biener
rguenther@suse.de
Tue Apr 28 09:16:43 GMT 2020
On Tue, 28 Apr 2020, Jakub Jelinek wrote:
> Hi!
>
> 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.
>
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
> trunk?
OK.
Richard.
> 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.
>
> --- gcc/tree.c.jj 2020-04-27 14:31:09.260018763 +0200
> +++ gcc/tree.c 2020-04-28 00:22:07.537891047 +0200
> @@ -11523,6 +11523,7 @@ build_call_expr_internal_loc_array (loca
> CALL_EXPR_ARG (t, i) = args[i];
> SET_EXPR_LOCATION (t, loc);
> CALL_EXPR_IFN (t) = ifn;
> + process_call_operands (t);
> return t;
> }
>
> --- gcc/testsuite/gcc.c-torture/execute/pr94809.c.jj 2020-04-28 00:26:23.647107159 +0200
> +++ gcc/testsuite/gcc.c-torture/execute/pr94809.c 2020-04-28 00:25:42.289718195 +0200
> @@ -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;
> +}
>
> Jakub
>
>
--
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)
More information about the Gcc-patches
mailing list