aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2014-08-18 20:25:45 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2014-08-18 20:25:45 +0000
commit70e7f57d3867e00cd67ea1f3dc49824a1d2da794 (patch)
treed2a8baaa3310110c60df3be8f5ade9c81cd53796 /gcc
parent15f8d3ab4a4f0e893b9080477091425fda92d187 (diff)
downloadgcc-70e7f57d3867e00cd67ea1f3dc49824a1d2da794.zip
gcc-70e7f57d3867e00cd67ea1f3dc49824a1d2da794.tar.gz
gcc-70e7f57d3867e00cd67ea1f3dc49824a1d2da794.tar.bz2
New function: for_each_rtx_in_insn
gcc/ 2014-08-18 David Malcolm <dmalcolm@redhat.com> * rtl.h (for_each_rtx_in_insn): New function. * rtlanal.c (for_each_rtx_in_insn): Likewise. From-SVN: r214119
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/rtl.h1
-rw-r--r--gcc/rtlanal.c16
3 files changed, 22 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f6454db..931a95f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2014-08-18 David Malcolm <dmalcolm@redhat.com>
+ * rtl.h (for_each_rtx_in_insn): New function.
+ * rtlanal.c (for_each_rtx_in_insn): Likewise.
+
+2014-08-18 David Malcolm <dmalcolm@redhat.com>
+
* coretypes.h (class rtx_insn): Add forward declaration.
* rtl.h: Include is-a.h.
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 28f598e..3c6e9a3 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2399,6 +2399,7 @@ extern bool tls_referenced_p (rtx);
typedef int (*rtx_function) (rtx *, void *);
extern int for_each_rtx (rtx *, rtx_function, void *);
+extern int for_each_rtx_in_insn (rtx_insn **, rtx_function, void *);
/* Callback for for_each_inc_dec, to process the autoinc operation OP
within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 3196e55..0e8cb44 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -3011,6 +3011,22 @@ for_each_rtx (rtx *x, rtx_function f, void *data)
return for_each_rtx_1 (*x, i, f, data);
}
+/* Like "for_each_rtx", but for calling on an rtx_insn **. */
+
+int
+for_each_rtx_in_insn (rtx_insn **insn, rtx_function f, void *data)
+{
+ rtx insn_as_rtx = *insn;
+ int result;
+
+ result = for_each_rtx (&insn_as_rtx, f, data);
+
+ if (insn_as_rtx != *insn)
+ *insn = safe_as_a <rtx_insn *> (insn_as_rtx);
+
+ return result;
+}
+
/* Data structure that holds the internal state communicated between