Hi Nathan! On Sun, 25 Oct 2015 10:01:55 -0400, Nathan Sidwell <[email protected]> wrote: > I've applied this patch to gomp4 branch. It's the reworking of IFN_UNIQUE > suggested by Richard & Jakub.
>
> 1) IFN_UNIQUE is a ctrl-altering call, and thus ends up at the end of a BB.
> 2) tracer only needs to check that stmt (and it'a already looking at it for
> other reasons)
> 3) IFN_UNIQUE is no longer ECF_LEAF
> 4) Inserted a data dependency chain to the had & tail call sequence. The 2nd
> param is the result of the previous call in the chain.
> --- gcc/internal-fn.c (revision 229276)
> +++ gcc/internal-fn.c (working copy)
> @@ -1962,8 +1962,9 @@ static void
> expand_UNIQUE (gcall *stmt)
> {
> rtx pattern = NULL_RTX;
> + int code = TREE_INT_CST_LOW (gimple_call_arg (stmt, 0));
>
> - switch (TREE_INT_CST_LOW (gimple_call_arg (stmt, 0)))
> + switch (code)
> {
> default:
> gcc_unreachable ();
> @@ -1975,21 +1976,34 @@ expand_UNIQUE (gcall *stmt)
> break;
>
> case IFN_UNIQUE_OACC_FORK:
> + case IFN_UNIQUE_OACC_JOIN:
> + {
> + tree lhs = gimple_call_lhs (stmt);
> + rtx target = const0_rtx;
> +
> + if (lhs)
> + target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
> +
> + rtx data_dep = expand_normal (gimple_call_arg (stmt, 1));
> + rtx axis = expand_normal (gimple_call_arg (stmt, 2));
> +
> + if (code == IFN_UNIQUE_OACC_FORK)
> + {
> #ifdef HAVE_oacc_fork
> - pattern = expand_normal (gimple_call_arg (stmt, 1));
> - pattern = gen_oacc_fork (pattern);
> + pattern = gen_oacc_fork (target, data_dep, axis);
> #else
> - gcc_unreachable ();
> + gcc_unreachable ();
> #endif
> - break;
> -
> - case IFN_UNIQUE_OACC_JOIN:
> + }
> + else
> + {
> #ifdef HAVE_oacc_join
> - pattern = expand_normal (gimple_call_arg (stmt, 1));
> - pattern = gen_oacc_join (pattern);
> + pattern = gen_oacc_join (target, data_dep, axis);
> #else
> - gcc_unreachable ();
> + gcc_unreachable ();
> #endif
> + }
> + }
> break;
> }
[...]/source-gcc/gcc/internal-fn.c: In function 'void
expand_UNIQUE(gcall*)':
[...]/source-gcc/gcc/internal-fn.c:1982:6: error: variable 'target' set but
not used [-Werror=unused-but-set-variable]
rtx target = const0_rtx;
^
[...]/source-gcc/gcc/internal-fn.c:1987:6: error: unused variable
'data_dep' [-Werror=unused-variable]
rtx data_dep = expand_normal (gimple_call_arg (stmt, 1));
^
[...]/source-gcc/gcc/internal-fn.c:1988:6: error: unused variable 'axis'
[-Werror=unused-variable]
rtx axis = expand_normal (gimple_call_arg (stmt, 2));
^
Grüße
Thomas
signature.asc
Description: PGP signature
