public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Handle sizes and kinds params of GOACC_paralllel in find_func_clobbers
@ 2015-12-11 12:24 Tom de Vries
  2015-12-11 12:31 ` Richard Biener
  0 siblings, 1 reply; 3+ messages in thread
From: Tom de Vries @ 2015-12-11 12:24 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1528 bytes --]

Hi,

while testing the oacc kernels patch series on top of trunk, using the 
optimal handling of BUILTIN_IN_GOACC_PARALLEL in fipa-pta  I ran into a 
failure where the stores to the omp_data_sizes array were removed by dse.

The call bb in the failing testcase normally looks like this:
...
   <bb 3>:
   .omp_data_arr.10.D.2550 = c.2_18;
   .omp_data_arr.10.c = &c;
   .omp_data_arr.10.D.2553 = b.1_15;
   .omp_data_arr.10.b = &b;
   .omp_data_arr.10.D.2556 = a.0_11;
   .omp_data_arr.10.a = &a;
    D.2572 = n_6(D);
   .omp_data_arr.10.n = &D.2572;
   .omp_data_sizes.11[0] = _8;
   .omp_data_sizes.11[1] = 0;
   .omp_data_sizes.11[2] = _8;
   .omp_data_sizes.11[3] = 0;
   .omp_data_sizes.11[4] = _8;
   .omp_data_sizes.11[5] = 0;
   .omp_data_sizes.11[6] = 4;
   __builtin_GOACC_parallel_keyed (-1, foo._omp_fn.0, 7,
                                   &.omp_data_arr.10,
                                   &.omp_data_sizes.11,
                                   &.omp_data_kinds.12, 0);
...

Dse removed the stores, because omp_data_sizes was not marked as a used 
by __builtin_GOACC_parallel_keyed.

We pretend in fipa-pta that __builtin_GOACC_parallel_keyed is never 
called, and instead handle the call foo._omp_fn.0 (&.omp_data_arr.10). 
That means the use of omp_data_sizes by __builtin_GOACC_parallel_keyed 
is ignored.

This patch fixes that (for both sizes and kinds arrays), as confirmed 
with a test run of target-libgomp c.exp on the accelerator.

OK for stage3 if bootstrap and reg-test succeeds?

Thanks,
- Tom

[-- Attachment #2: 0009-Handle-sizes-and-kinds-params-of-GOACC_paralllel-in-find_func_clobbers.patch --]
[-- Type: text/x-patch, Size: 1904 bytes --]

Handle sizes and kinds params of GOACC_paralllel in find_func_clobbers

2015-12-11  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-structalias.c (find_func_clobbers): Handle sizes and kinds
	parameters of GOACC_paralllel.

---
 gcc/tree-ssa-structalias.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index dfc0422..98d7d7b 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -5089,6 +5089,8 @@ find_func_clobbers (struct function *fn, gimple *origt)
 	  case BUILT_IN_GOACC_PARALLEL:
 	    {
 	      unsigned int fnpos, argpos;
+	      unsigned int implicit_use_args[2];
+	      unsigned int num_implicit_use_args = 0;
 	      switch (DECL_FUNCTION_CODE (decl))
 		{
 		case BUILT_IN_GOMP_PARALLEL:
@@ -5101,6 +5103,8 @@ find_func_clobbers (struct function *fn, gimple *origt)
 					       sizes, kinds, ...).  */
 		  fnpos = 1;
 		  argpos = 3;
+		  implicit_use_args[num_implicit_use_args++] = 4;
+		  implicit_use_args[num_implicit_use_args++] = 5;
 		  break;
 		default:
 		  gcc_unreachable ();
@@ -5121,6 +5125,18 @@ find_func_clobbers (struct function *fn, gimple *origt)
 		process_constraint (new_constraint (lhs, *rhsp));
 	      rhsc.truncate (0);
 
+	      /* Handle parameters used by the call, but not used in cfi, as
+		 implicitly used by cfi.  */
+	      lhs = get_function_part_constraint (cfi, fi_uses);
+	      for (unsigned i = 0; i < num_implicit_use_args; ++i)
+		{
+		  tree arg = gimple_call_arg (t, implicit_use_args[i]);
+		  get_constraint_for (arg, &rhsc);
+		  FOR_EACH_VEC_ELT (rhsc, j, rhsp)
+		    process_constraint (new_constraint (lhs, *rhsp));
+		  rhsc.truncate (0);
+		}
+
 	      /* The caller clobbers what the callee does.  */
 	      lhs = get_function_part_constraint (fi, fi_clobbers);
 	      rhs = get_function_part_constraint (cfi, fi_clobbers);

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Handle sizes and kinds params of GOACC_paralllel in find_func_clobbers
  2015-12-11 12:24 [PATCH] Handle sizes and kinds params of GOACC_paralllel in find_func_clobbers Tom de Vries
@ 2015-12-11 12:31 ` Richard Biener
  2015-12-14  8:24   ` Tom de Vries
  0 siblings, 1 reply; 3+ messages in thread
From: Richard Biener @ 2015-12-11 12:31 UTC (permalink / raw)
  To: Tom de Vries; +Cc: gcc-patches

On Fri, 11 Dec 2015, Tom de Vries wrote:

> Hi,
> 
> while testing the oacc kernels patch series on top of trunk, using the optimal
> handling of BUILTIN_IN_GOACC_PARALLEL in fipa-pta  I ran into a failure where
> the stores to the omp_data_sizes array were removed by dse.
> 
> The call bb in the failing testcase normally looks like this:
> ...
>   <bb 3>:
>   .omp_data_arr.10.D.2550 = c.2_18;
>   .omp_data_arr.10.c = &c;
>   .omp_data_arr.10.D.2553 = b.1_15;
>   .omp_data_arr.10.b = &b;
>   .omp_data_arr.10.D.2556 = a.0_11;
>   .omp_data_arr.10.a = &a;
>    D.2572 = n_6(D);
>   .omp_data_arr.10.n = &D.2572;
>   .omp_data_sizes.11[0] = _8;
>   .omp_data_sizes.11[1] = 0;
>   .omp_data_sizes.11[2] = _8;
>   .omp_data_sizes.11[3] = 0;
>   .omp_data_sizes.11[4] = _8;
>   .omp_data_sizes.11[5] = 0;
>   .omp_data_sizes.11[6] = 4;
>   __builtin_GOACC_parallel_keyed (-1, foo._omp_fn.0, 7,
>                                   &.omp_data_arr.10,
>                                   &.omp_data_sizes.11,
>                                   &.omp_data_kinds.12, 0);
> ...
> 
> Dse removed the stores, because omp_data_sizes was not marked as a used by
> __builtin_GOACC_parallel_keyed.
> 
> We pretend in fipa-pta that __builtin_GOACC_parallel_keyed is never called,
> and instead handle the call foo._omp_fn.0 (&.omp_data_arr.10). That means the
> use of omp_data_sizes by __builtin_GOACC_parallel_keyed is ignored.
> 
> This patch fixes that (for both sizes and kinds arrays), as confirmed with a
> test run of target-libgomp c.exp on the accelerator.
> 
> OK for stage3 if bootstrap and reg-test succeeds?

Ok, though techincally they are used by the OMP runtime (but this we
could only represent by letting them escape).  I wonder what can of
worms we'd open if you LTO the OMP runtime in ... (and thus
builtins map to real functions!)

Thanks,
Richard.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Handle sizes and kinds params of GOACC_paralllel in find_func_clobbers
  2015-12-11 12:31 ` Richard Biener
@ 2015-12-14  8:24   ` Tom de Vries
  0 siblings, 0 replies; 3+ messages in thread
From: Tom de Vries @ 2015-12-14  8:24 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

On 11/12/15 13:31, Richard Biener wrote:
> On Fri, 11 Dec 2015, Tom de Vries wrote:
>
>> Hi,
>>
>> while testing the oacc kernels patch series on top of trunk, using the optimal
>> handling of BUILTIN_IN_GOACC_PARALLEL in fipa-pta  I ran into a failure where
>> the stores to the omp_data_sizes array were removed by dse.
>>
>> The call bb in the failing testcase normally looks like this:
>> ...
>>    <bb 3>:
>>    .omp_data_arr.10.D.2550 = c.2_18;
>>    .omp_data_arr.10.c = &c;
>>    .omp_data_arr.10.D.2553 = b.1_15;
>>    .omp_data_arr.10.b = &b;
>>    .omp_data_arr.10.D.2556 = a.0_11;
>>    .omp_data_arr.10.a = &a;
>>     D.2572 = n_6(D);
>>    .omp_data_arr.10.n = &D.2572;
>>    .omp_data_sizes.11[0] = _8;
>>    .omp_data_sizes.11[1] = 0;
>>    .omp_data_sizes.11[2] = _8;
>>    .omp_data_sizes.11[3] = 0;
>>    .omp_data_sizes.11[4] = _8;
>>    .omp_data_sizes.11[5] = 0;
>>    .omp_data_sizes.11[6] = 4;
>>    __builtin_GOACC_parallel_keyed (-1, foo._omp_fn.0, 7,
>>                                    &.omp_data_arr.10,
>>                                    &.omp_data_sizes.11,
>>                                    &.omp_data_kinds.12, 0);
>> ...
>>
>> Dse removed the stores, because omp_data_sizes was not marked as a used by
>> __builtin_GOACC_parallel_keyed.
>>
>> We pretend in fipa-pta that __builtin_GOACC_parallel_keyed is never called,
>> and instead handle the call foo._omp_fn.0 (&.omp_data_arr.10). That means the
>> use of omp_data_sizes by __builtin_GOACC_parallel_keyed is ignored.
>>
>> This patch fixes that (for both sizes and kinds arrays), as confirmed with a
>> test run of target-libgomp c.exp on the accelerator.
>>
>> OK for stage3 if bootstrap and reg-test succeeds?
>
> Ok, though techincally they are used by the OMP runtime (but this we
> could only represent by letting them escape).  I wonder what can of
> worms we'd open if you LTO the OMP runtime in ... (and thus
> builtins map to real functions!)

I guess for fipa-pta, when encoutering a call to the built-in, we could 
add the equivalent of initial constraints to the runtime function.

I'd also imagine we don't want the built-in to be inlined,  since that 
would break the optimal treatment of the built-in.

Thanks,
- Tom

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-12-14  8:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-11 12:24 [PATCH] Handle sizes and kinds params of GOACC_paralllel in find_func_clobbers Tom de Vries
2015-12-11 12:31 ` Richard Biener
2015-12-14  8:24   ` Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).