On Fri, 31 May 2019, Jakub Jelinek wrote: > On Fri, May 31, 2019 at 11:43:29AM +0200, Richard Biener wrote: > > Hmm. Is it enough to set TREE_THIS_NOTRAP on the ARRAY_REF instead? > > That works too. > > > At least it's documented the ARRAY_REF then isn't the issue. > > As for conditional vs. unconditional I'm not so sure but automatic > > vars are excepmted from that anyways? > > Only if they are guaranteed not to have out of bound accesses. > > Anyway, I'll go with this, those ARRAY_REFs indeed should never trap. Thanks - a lot simpler indeed ;) Richard. > 2019-05-31 Jakub Jelinek > > * omp-low.c (lower_rec_simd_input_clauses): Set TREE_THIS_NOTRAP on > ivar and lvar. > > * gcc.dg/vect/vect-cond-12.c: New test. > > --- gcc/omp-low.c.jj 2019-05-30 23:19:14.469931759 +0200 > +++ gcc/omp-low.c 2019-05-31 11:52:20.491195088 +0200 > @@ -3728,6 +3728,8 @@ lower_rec_simd_input_clauses (tree new_v > NULL_TREE, NULL_TREE); > lvar = build4 (ARRAY_REF, TREE_TYPE (new_var), avar, sctx->lane, > NULL_TREE, NULL_TREE); > + TREE_THIS_NOTRAP (ivar) = 1; > + TREE_THIS_NOTRAP (lvar) = 1; > } > if (DECL_P (new_var)) > { > --- gcc/testsuite/gcc.dg/vect/vect-cond-12.c.jj 2019-05-31 11:25:33.203577504 +0200 > +++ gcc/testsuite/gcc.dg/vect/vect-cond-12.c 2019-05-31 11:26:58.616174115 +0200 > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-additional-options "-fopenmp-simd" } */ > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_condition } } } */ > + > +int x; > + > +void > +foo (int *a) > +{ > + #pragma omp simd lastprivate (x) > + for (int i = 0; i < 1024; ++i) > + if (a[i]) > + x = i; > +} > > > Jakub > -- Richard Biener SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer, Mary Higgins, Sri Rasiah; HRB 21284 (AG Nürnberg)