From d8ab4e5471ac962fe29929306b51bd7acc064a59 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Mon, 7 Jan 2019 08:10:17 +0000 Subject: [PATCH] [nvptx] Postpone warnings in nvptx_goacc_validate_dims_1 Move warnings in nvptx_goacc_validate_dims_1 to as late as possible. This allows us more flexibility in setting the dimensions. 2019-01-07 Tom de Vries * config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1): Move warnings to as late as possible. From-SVN: r267627 --- gcc/ChangeLog | 5 +++++ gcc/config/nvptx/nvptx.c | 38 +++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fcaa91fffa0..b9a271b742c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-01-07 Tom de Vries + + * config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1): Move warnings to + as late as possible. + 2019-01-07 Tom de Vries * config/nvptx/nvptx.c (PTX_VECTOR_LENGTH): Remove. diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 3d680e9d80a..3a4a5a3a159 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -5376,25 +5376,37 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level) gcc_assert (dims[GOMP_DIM_GANG] >= -1); } - if (dims[GOMP_DIM_VECTOR] >= 0 - && dims[GOMP_DIM_VECTOR] != PTX_WARP_SIZE) + int old_dims[GOMP_DIM_MAX]; + unsigned int i; + for (i = 0; i < GOMP_DIM_MAX; ++i) + old_dims[i] = dims[i]; + + const char *vector_reason = NULL; + if (dims[GOMP_DIM_VECTOR] == 0) { - warning_at (decl ? DECL_SOURCE_LOCATION (decl) : UNKNOWN_LOCATION, 0, - dims[GOMP_DIM_VECTOR] - ? G_("using vector_length (%d), ignoring %d") - : G_("using vector_length (%d), ignoring runtime setting"), - PTX_DEFAULT_VECTOR_LENGTH, dims[GOMP_DIM_VECTOR]); + vector_reason = G_("using vector_length (%d), ignoring runtime setting"); dims[GOMP_DIM_VECTOR] = PTX_DEFAULT_VECTOR_LENGTH; } + if (dims[GOMP_DIM_VECTOR] > 0 + && dims[GOMP_DIM_VECTOR] != PTX_WARP_SIZE) + dims[GOMP_DIM_VECTOR] = PTX_DEFAULT_VECTOR_LENGTH; + /* Check the num workers is not too large. */ if (dims[GOMP_DIM_WORKER] > PTX_WORKER_LENGTH) - { - warning_at (decl ? DECL_SOURCE_LOCATION (decl) : UNKNOWN_LOCATION, 0, - "using num_workers (%d), ignoring %d", - PTX_WORKER_LENGTH, dims[GOMP_DIM_WORKER]); - dims[GOMP_DIM_WORKER] = PTX_WORKER_LENGTH; - } + dims[GOMP_DIM_WORKER] = PTX_WORKER_LENGTH; + + if (dims[GOMP_DIM_VECTOR] != old_dims[GOMP_DIM_VECTOR]) + warning_at (decl ? DECL_SOURCE_LOCATION (decl) : UNKNOWN_LOCATION, 0, + vector_reason != NULL + ? vector_reason + : G_("using vector_length (%d), ignoring %d"), + dims[GOMP_DIM_VECTOR], old_dims[GOMP_DIM_VECTOR]); + + if (dims[GOMP_DIM_WORKER] != old_dims[GOMP_DIM_WORKER]) + warning_at (decl ? DECL_SOURCE_LOCATION (decl) : UNKNOWN_LOCATION, 0, + G_("using num_workers (%d), ignoring %d"), + dims[GOMP_DIM_WORKER], old_dims[GOMP_DIM_WORKER]); if (oacc_default_dims_p) { -- 2.30.2