From: Sandra Loosemore <sandra@codesourcery.com>
To: "fortran@gcc.gnu.org" <fortran@gcc.gnu.org>
Cc: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: [PATCH] Fortran: Add location info to OpenMP tree nodes
Date: Fri, 25 Mar 2022 20:03:09 -0600 [thread overview]
Message-ID: <24bde0e8-8da4-4d4f-30fd-9a9b5830b944@codesourcery.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 730 bytes --]
I've got another patch forthcoming (stage 1 material) that adds some new
diagnostics for non-rectangular loops during gimplification of OMP
nodes. When I was working on that, I discovered that the Fortran front
end wasn't attaching location information to the tree nodes
corresponding to the various OMP directives, so the new errors weren't
coming out with location info either. I went through trans-openmp.cc
and fixed all the places where make_node was being called to explicitly
set the location.
I don't have a test case specifically for this change, but my test cases
for the new diagnostics in the non-rectangular loops patch do exercise
it. Is this OK for trunk now, or for stage 1 when we get there?
-Sandra
[-- Attachment #2: omp-location.patch --]
[-- Type: text/x-patch, Size: 4971 bytes --]
commit 4c745003d0b39d0e92032b62421df4920753783a
Author: Sandra Loosemore <sandra@codesourcery.com>
Date: Thu Mar 24 21:02:34 2022 -0700
Fortran: Add location info to OpenMP tree nodes
gcc/fortran/
* trans-openmp.cc (gfc_trans_omp_critical): Set location on OMP
tree node.
(gfc_trans_omp_do): Likewise.
(gfc_trans_omp_masked): Likewise.
(gfc_trans_omp_do_simd): Likewise.
(gfc_trans_omp_scope): Likewise.
(gfc_trans_omp_taskgroup): Likewise.
(gfc_trans_omp_taskwait): Likewise.
(gfc_trans_omp_distribute): Likewise.
(gfc_trans_omp_taskloop): Likewise.
(gfc_trans_omp_master_masked_taskloop): Likewise.
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index 25dde82..ba3ff71 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -5012,6 +5012,7 @@ gfc_trans_omp_critical (gfc_code *code)
name = get_identifier (code->ext.omp_clauses->critical_name);
gfc_start_block (&block);
stmt = make_node (OMP_CRITICAL);
+ SET_EXPR_LOCATION (stmt, gfc_get_location (&code->loc));
TREE_TYPE (stmt) = void_type_node;
OMP_CRITICAL_BODY (stmt) = gfc_trans_code (code->block->next);
OMP_CRITICAL_NAME (stmt) = name;
@@ -5044,6 +5045,7 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
unsigned ix;
vec<tree, va_heap, vl_embed> *saved_doacross_steps = doacross_steps;
gfc_expr_list *tile = do_clauses ? do_clauses->tile_list : clauses->tile_list;
+ gfc_code *orig_code = code;
/* Both collapsed and tiled loops are lowered the same way. In
OpenACC, those clauses are not compatible, so prioritize the tile
@@ -5398,6 +5400,7 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
default: gcc_unreachable ();
}
+ SET_EXPR_LOCATION (stmt, gfc_get_location (&orig_code->loc));
TREE_TYPE (stmt) = void_type_node;
OMP_FOR_BODY (stmt) = gfc_finish_block (&body);
OMP_FOR_CLAUSES (stmt) = omp_clauses;
@@ -5670,6 +5673,7 @@ gfc_trans_omp_masked (gfc_code *code, gfc_omp_clauses *clauses)
gfc_start_block (&block);
tree omp_clauses = gfc_trans_omp_clauses (&block, clauses, code->loc);
tree stmt = make_node (OMP_MASKED);
+ SET_EXPR_LOCATION (stmt, gfc_get_location (&code->loc));
TREE_TYPE (stmt) = void_type_node;
OMP_MASKED_BODY (stmt) = body;
OMP_MASKED_CLAUSES (stmt) = omp_clauses;
@@ -6444,6 +6448,7 @@ gfc_trans_omp_do_simd (gfc_code *code, stmtblock_t *pblock,
if (flag_openmp)
{
stmt = make_node (OMP_FOR);
+ SET_EXPR_LOCATION (stmt, gfc_get_location (&code->loc));
TREE_TYPE (stmt) = void_type_node;
OMP_FOR_BODY (stmt) = body;
OMP_FOR_CLAUSES (stmt) = omp_do_clauses;
@@ -6616,6 +6621,7 @@ gfc_trans_omp_scope (gfc_code *code)
tree omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses,
code->loc);
tree stmt = make_node (OMP_SCOPE);
+ SET_EXPR_LOCATION (stmt, gfc_get_location (&code->loc));
TREE_TYPE (stmt) = void_type_node;
OMP_SCOPE_BODY (stmt) = body;
OMP_SCOPE_CLAUSES (stmt) = omp_clauses;
@@ -6691,6 +6697,7 @@ gfc_trans_omp_taskgroup (gfc_code *code)
gfc_start_block (&block);
tree body = gfc_trans_code (code->block->next);
tree stmt = make_node (OMP_TASKGROUP);
+ SET_EXPR_LOCATION (stmt, gfc_get_location (&code->loc));
TREE_TYPE (stmt) = void_type_node;
OMP_TASKGROUP_BODY (stmt) = body;
OMP_TASKGROUP_CLAUSES (stmt) = gfc_trans_omp_clauses (&block,
@@ -6711,6 +6718,7 @@ gfc_trans_omp_taskwait (gfc_code *code)
stmtblock_t block;
gfc_start_block (&block);
tree stmt = make_node (OMP_TASK);
+ SET_EXPR_LOCATION (stmt, gfc_get_location (&code->loc));
TREE_TYPE (stmt) = void_type_node;
OMP_TASK_BODY (stmt) = NULL_TREE;
OMP_TASK_CLAUSES (stmt) = gfc_trans_omp_clauses (&block,
@@ -6788,6 +6796,7 @@ gfc_trans_omp_distribute (gfc_code *code, gfc_omp_clauses *clausesa)
if (flag_openmp)
{
tree distribute = make_node (OMP_DISTRIBUTE);
+ SET_EXPR_LOCATION (distribute, gfc_get_location (&code->loc));
TREE_TYPE (distribute) = void_type_node;
OMP_FOR_BODY (distribute) = stmt;
OMP_FOR_CLAUSES (distribute) = omp_clauses;
@@ -7008,6 +7017,7 @@ gfc_trans_omp_taskloop (gfc_code *code, gfc_exec_op op)
if (flag_openmp)
{
tree taskloop = make_node (OMP_TASKLOOP);
+ SET_EXPR_LOCATION (taskloop, gfc_get_location (&code->loc));
TREE_TYPE (taskloop) = void_type_node;
OMP_FOR_BODY (taskloop) = stmt;
OMP_FOR_CLAUSES (taskloop) = omp_clauses;
@@ -7053,6 +7063,7 @@ gfc_trans_omp_master_masked_taskloop (gfc_code *code, gfc_exec_op op)
&clausesa[GFC_OMP_SPLIT_MASKED],
code->loc);
tree msk = make_node (OMP_MASKED);
+ SET_EXPR_LOCATION (msk, gfc_get_location (&code->loc));
TREE_TYPE (msk) = void_type_node;
OMP_MASKED_BODY (msk) = stmt;
OMP_MASKED_CLAUSES (msk) = clauses;
next reply other threads:[~2022-03-26 2:03 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-26 2:03 Sandra Loosemore [this message]
2022-03-26 7:04 ` Jakub Jelinek
2022-04-05 4:12 ` Sandra Loosemore
2022-04-05 6:27 ` Richard Biener
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=24bde0e8-8da4-4d4f-30fd-9a9b5830b944@codesourcery.com \
--to=sandra@codesourcery.com \
--cc=fortran@gcc.gnu.org \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).