aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-iterator.h
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-02-01 10:48:07 +0100
committerRichard Biener <rguenther@suse.de>2022-04-29 11:10:24 +0200
commit4aa61e08ade43fa1e94dc0e951f11739bbd2ae40 (patch)
tree7af4dfb2a82ccf0898b57415010286021d62d3c3 /gcc/gimple-iterator.h
parent44b09adb9bad99dd7e3017c5ecefed7f7c9a1590 (diff)
downloadgcc-4aa61e08ade43fa1e94dc0e951f11739bbd2ae40.zip
gcc-4aa61e08ade43fa1e94dc0e951f11739bbd2ae40.tar.gz
gcc-4aa61e08ade43fa1e94dc0e951f11739bbd2ae40.tar.bz2
Add gsi_after_labels overload for gimple_seq
The following adds gsi_after_labels for gimple_seq so I do not have to open-code it. I took the liberty to remove the two #defines wrapping gsi_start_1 and gsi_last_1 as we now have C++ references. 2022-02-01 Richard Biener <rguenther@suse.de> * gimple-iterator.h (gsi_after_labels): Add overload for gimple_seq. (gsi_start_1): Rename to gsi_start and take a reference. (gsi_last_1): Likewise. * gimple-iterator.cc (gsi_for_stmt): Use gsi_start. * omp-low.cc (lower_rec_input_clauses): Likewise. (lower_omp_scan): Likewise.
Diffstat (limited to 'gcc/gimple-iterator.h')
-rw-r--r--gcc/gimple-iterator.h35
1 files changed, 25 insertions, 10 deletions
diff --git a/gcc/gimple-iterator.h b/gcc/gimple-iterator.h
index 216ebee..67d95ca 100644
--- a/gcc/gimple-iterator.h
+++ b/gcc/gimple-iterator.h
@@ -96,19 +96,17 @@ extern void update_modified_stmts (gimple_seq);
/* Return a new iterator pointing to GIMPLE_SEQ's first statement. */
static inline gimple_stmt_iterator
-gsi_start_1 (gimple_seq *seq)
+gsi_start (gimple_seq &seq)
{
gimple_stmt_iterator i;
- i.ptr = gimple_seq_first (*seq);
- i.seq = seq;
+ i.ptr = gimple_seq_first (seq);
+ i.seq = &seq;
i.bb = i.ptr ? gimple_bb (i.ptr) : NULL;
return i;
}
-#define gsi_start(x) gsi_start_1 (&(x))
-
static inline gimple_stmt_iterator
gsi_none (void)
{
@@ -140,19 +138,17 @@ gimple_stmt_iterator gsi_start_edge (edge e);
/* Return a new iterator initially pointing to GIMPLE_SEQ's last statement. */
static inline gimple_stmt_iterator
-gsi_last_1 (gimple_seq *seq)
+gsi_last (gimple_seq &seq)
{
gimple_stmt_iterator i;
- i.ptr = gimple_seq_last (*seq);
- i.seq = seq;
+ i.ptr = gimple_seq_last (seq);
+ i.seq = &seq;
i.bb = i.ptr ? gimple_bb (i.ptr) : NULL;
return i;
}
-#define gsi_last(x) gsi_last_1 (&(x))
-
/* Return a new iterator pointing to the last statement in basic block BB. */
static inline gimple_stmt_iterator
@@ -232,6 +228,25 @@ gsi_after_labels (basic_block bb)
return gsi;
}
+/* Return a statement iterator that points to the first
+ non-label statement in sequence SEQ. */
+
+static inline gimple_stmt_iterator
+gsi_after_labels (gimple_seq &seq)
+{
+ gimple_stmt_iterator gsi = gsi_start (seq);
+
+ for (; !gsi_end_p (gsi); )
+ {
+ if (gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL)
+ gsi_next (&gsi);
+ else
+ break;
+ }
+
+ return gsi;
+}
+
/* Advance the iterator to the next non-debug gimple statement. */
static inline void