Message ID | 20160125100647.GI3017@tucnak.redhat.com |
---|---|
State | New |
Headers | show |
On 2016/1/25 7:06 PM, Jakub Jelinek wrote: > The following ICEs without the patch and works with it, so I think it is > better: > > 2016-01-25 Jakub Jelinek <jakub@redhat.com> > > * omp-low.c (lower_omp_target) <case USE_DEVICE_PTR>: Set > DECL_VALUE_EXPR of new_var even for the non-array case. Look > through DECL_VALUE_EXPR for expansion. > > * c-c++-common/goacc/use_device-1.c: New test. Thanks, the test was indeed just a reduction of a whole example program, which I'm not sure we're at liberty to directly include in the testsuite. I've verified that the patch allows the program to build and run correctly. Thanks, Chung-Lin
--- gcc/omp-low.c.jj 2016-01-21 00:55:19.000000000 +0100 +++ gcc/omp-low.c 2016-01-25 10:45:30.995510057 +0100 @@ -15878,6 +15878,14 @@ lower_omp_target (gimple_stmt_iterator * SET_DECL_VALUE_EXPR (new_var, x); DECL_HAS_VALUE_EXPR_P (new_var) = 1; } + else + { + tree new_var = lookup_decl (var, ctx); + x = create_tmp_var_raw (TREE_TYPE (new_var), get_name (new_var)); + gimple_add_tmp_var (x); + SET_DECL_VALUE_EXPR (new_var, x); + DECL_HAS_VALUE_EXPR_P (new_var) = 1; + } break; } @@ -16493,6 +16501,7 @@ lower_omp_target (gimple_stmt_iterator * x = build_fold_addr_expr (v); } } + new_var = DECL_VALUE_EXPR (new_var); x = fold_convert (TREE_TYPE (new_var), x); gimplify_expr (&x, &new_body, NULL, is_gimple_val, fb_rvalue); gimple_seq_add_stmt (&new_body, --- gcc/testsuite/c-c++-common/goacc/use_device-1.c.jj 2016-01-25 10:56:33.472310437 +0100 +++ gcc/testsuite/c-c++-common/goacc/use_device-1.c 2016-01-25 10:56:43.128176481 +0100 @@ -0,0 +1,14 @@ +/* { dg-do compile } */ + +void bar (float *, float *); + +void +foo (float *x, float *y) +{ + int n = 1 << 10; +#pragma acc data create(x[0:n]) copyout(y[0:n]) + { +#pragma acc host_data use_device(x,y) + bar (x, y); + } +}