On Tue, Aug 16, 2022 at 05:28:40PM +0200, Tobias Burnus wrote: > The testcase is just a copy of linear-1 with 'omp ... for' replaced by 'omp > ... for simd', > matching what the PR report referred to. > > The problem occurs for 'omp ... for simd linear( i : step)' when 'step' is a > variable > when a omp_fn... is generated - as in this case, the original variable is > used (in the > reduced example of the PR, the PARM_DECL of 'f') instead of the replacement. > > OK for mainline? Thoughts on backporting (and for which versions)? > > Tobias > ----------------- > Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 > München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas > Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht > München, HRB 106955
> OpenMP: Fix var replacement with 'simd' and linear-step vars [PR106548] > > gcc/ChangeLog: > > PR middle-end/106548 > * omp-low.cc (lower_rec_input_clauses): Use build_outer_var_ref > for 'simd' linear-step values that are variable. > > libgomp/ChangeLog: > > PR middle-end/106548 > * testsuite/libgomp.c/linear-2.c: New test. > > diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc > index 3c4b8593c8b..d6d6ff372a1 100644 > --- a/gcc/omp-low.cc > +++ b/gcc/omp-low.cc > @@ -6188,6 +6188,10 @@ lower_rec_input_clauses (tree clauses, gimple_seq > *ilist, gimple_seq *dlist, > && gimple_omp_for_combined_into_p (ctx->stmt)) > { > tree t = OMP_CLAUSE_LINEAR_STEP (c); > + if (VAR_P (t) > + || TREE_CODE (t) == PARM_DECL > + || TREE_CODE (t) == RESULT_DECL) > + t = build_outer_var_ref (t, ctx); I think this should be just if (DECL_P (t)) t = build_outer_var_ref (t, ctx); Ok with that change. With backports I'd wait a week or two (12.2 is frozen anyway), can be applied to any open release branches you are willing to backport it to. > --- /dev/null > +++ b/libgomp/testsuite/libgomp.c/linear-2.c > @@ -0,0 +1,251 @@ > +/* PR middle-end/106548. */ Usually simd related runtime tests in libgomp use something like /* { dg-do run } */ /* { dg-additional-options "-msse2" { target sse2_runtime } } */ /* { dg-additional-options "-mavx" { target avx_runtime } } */ to test some actual vectorization if possible. Jakub