Hello! This patch series shows how I'm approaching OpenMP SIMD for NVPTX. It looks good both in check-c testing and libgomp testing, including new target-3x.c cases (but for-5.c fails to run with resource exhaustion, maybe it should be split for NVPTX -- will investigate more later).
The previously posted patch to handle 'omp_data_o' is no longer necessary with soft-stacks. Looking forward to your comments. Alexander nvptx backend: allow emitting COND_EXEC insns nvptx backend: new "uniform SIMT" codegen variant nvptx backend: add two more identifier maps nvptx backend: add -mgomp option and multilib new target hook: TARGET_SIMT_VF nvptx libgcc: rewrite in C nvptx mkoffload: pass -mgomp for OpenMP offloading libgomp: update gomp_nvptx_main for -mgomp adjust SIMD loop lowering for SIMT targets gcc/config/nvptx/mkoffload.c | 7 ++ gcc/config/nvptx/nvptx.c | 181 ++++++++++++++++++++++++++++++++----- gcc/config/nvptx/nvptx.h | 4 + gcc/config/nvptx/nvptx.md | 61 +++++++++---- gcc/config/nvptx/nvptx.opt | 8 ++ gcc/config/nvptx/t-nvptx | 2 + gcc/doc/invoke.texi | 19 ++++ gcc/doc/tm.texi | 4 + gcc/doc/tm.texi.in | 2 + gcc/internal-fn.c | 22 +++++ gcc/internal-fn.def | 2 + gcc/omp-low.c | 138 ++++++++++++++++++++++++++-- gcc/passes.def | 1 + gcc/target.def | 12 +++ gcc/tree-pass.h | 2 + libgcc/config/nvptx/crt0.c | 61 +++++++++++++ libgcc/config/nvptx/crt0.s | 54 ----------- libgcc/config/nvptx/free.asm | 50 ---------- libgcc/config/nvptx/free.c | 34 +++++++ libgcc/config/nvptx/malloc.asm | 55 ----------- libgcc/config/nvptx/malloc.c | 35 +++++++ libgcc/config/nvptx/nvptx-malloc.h | 5 + libgcc/config/nvptx/realloc.c | 2 + libgcc/config/nvptx/stacks.c | 30 ++++++ libgcc/config/nvptx/t-nvptx | 11 ++- libgomp/config/nvptx/team.c | 37 ++++++-- 26 files changed, 622 insertions(+), 217 deletions(-) create mode 100644 libgcc/config/nvptx/crt0.c delete mode 100644 libgcc/config/nvptx/crt0.s delete mode 100644 libgcc/config/nvptx/free.asm create mode 100644 libgcc/config/nvptx/free.c delete mode 100644 libgcc/config/nvptx/malloc.asm create mode 100644 libgcc/config/nvptx/malloc.c create mode 100644 libgcc/config/nvptx/stacks.c