From: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
To: linux-sparse@vger.kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Christopher Li <sparse@chrisli.org>,
Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Subject: [PATCH 1/4] add support for a new flag: -fdump-linearize[=only]
Date: Fri, 7 Apr 2017 01:00:26 +0200 [thread overview]
Message-ID: <20170406230029.11384-2-luc.vanoostenryck@gmail.com> (raw)
In-Reply-To: <20170406230029.11384-1-luc.vanoostenryck@gmail.com>
The effect of this flag is to dump the IR just after the
linearization, before any simplification, and to stop
further processing if '=only' is given as argument.
The motivation of this flag is of course for debugging,
to be able to inspect the raw result of the linearization,
undisturbed by an simplification.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
lib.c | 22 ++++++++++++++++++++++
lib.h | 2 ++
linearize.c | 6 ++++++
sparse.1 | 7 +++++++
4 files changed, 37 insertions(+)
diff --git a/lib.c b/lib.c
index 272d2c88a..f5e4860a6 100644
--- a/lib.c
+++ b/lib.c
@@ -250,6 +250,8 @@ int Wvla = 1;
int dbg_entry = 0;
int dbg_dead = 0;
+int fdump_linearize;
+
int preprocess_only;
static enum { STANDARD_C89,
@@ -645,12 +647,32 @@ static char **handle_switch_ftabstop(char *arg, char **next)
return next;
}
+static char **handle_switch_fdump(char *arg, char **next)
+{
+ if (!strncmp(arg, "linearize", 9)) {
+ if (arg[6] == '\0')
+ fdump_linearize = 1;
+ else if (!strcmp(arg+9, "=only"))
+ fdump_linearize = 2;
+ else
+ goto err;
+ }
+
+ /* ignore others flags */
+ return next;
+
+err:
+ die("error: unknown flag \"-fdump-%s\"", arg);
+}
+
static char **handle_switch_f(char *arg, char **next)
{
arg++;
if (!strncmp(arg, "tabstop=", 8))
return handle_switch_ftabstop(arg+8, next);
+ if (!strncmp(arg, "dump-", 5))
+ return handle_switch_fdump(arg+5, next);
/* handle switches w/ arguments above, boolean and only boolean below */
diff --git a/lib.h b/lib.h
index 134e56040..fb612d154 100644
--- a/lib.h
+++ b/lib.h
@@ -136,6 +136,8 @@ extern int Wvla;
extern int dbg_entry;
extern int dbg_dead;
+extern int fdump_linearize;
+
extern int arch_m64;
extern void declare_builtin_functions(void);
diff --git a/linearize.c b/linearize.c
index 2f850fb7e..61c804333 100644
--- a/linearize.c
+++ b/linearize.c
@@ -2171,6 +2171,12 @@ static struct entrypoint *linearize_fn(struct symbol *sym, struct symbol *base_t
add_one_insn(ep, insn);
}
+ if (fdump_linearize) {
+ if (fdump_linearize == 2)
+ return ep;
+ show_entry(ep);
+ }
+
/*
* Do trivial flow simplification - branches to
* branches, kill dead basicblocks etc
diff --git a/sparse.1 b/sparse.1
index 85d6e646b..525d3ded5 100644
--- a/sparse.1
+++ b/sparse.1
@@ -344,6 +344,13 @@ Look for system headers in the multiarch subdirectory \fIdir\fR.
The \fIdir\fR name would normally take the form of the target's
normalized GNU triplet. (e.g. i386-linux-gnu).
.
+.SH DEBUG OPTIONS
+.TP
+.B \-fdump-linearize[=only]
+Dump the IR code of a function directly after its linearization,
+before any simplifications is made. If the argument \fB=only\fR is
+also given no further processing is done on the function.
+.
.SH OTHER OPTIONS
.TP
.B \-ftabstop=WIDTH
--
2.12.0
next prev parent reply other threads:[~2017-04-06 23:00 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-06 23:00 [PATCH 0/4] fix bitfield initiallizers Luc Van Oostenryck
2017-04-06 23:00 ` Luc Van Oostenryck [this message]
2017-04-07 0:32 ` [PATCH 1/4] add support for a new flag: -fdump-linearize[=only] Dibyendu Majumdar
2017-04-07 18:52 ` Luc Van Oostenryck
2017-04-06 23:00 ` [PATCH 2/4] remove bit_size & bit_offset from struct access_data Luc Van Oostenryck
2017-04-06 23:00 ` [PATCH 3/4] add test case for linearize_initializer() of bitfields Luc Van Oostenryck
2017-04-06 23:00 ` [PATCH 4/4] fix implicit zero initializer Luc Van Oostenryck
2017-04-06 23:39 ` Linus Torvalds
2017-04-07 0:13 ` Luc Van Oostenryck
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=20170406230029.11384-2-luc.vanoostenryck@gmail.com \
--to=luc.vanoostenryck@gmail.com \
--cc=linux-sparse@vger.kernel.org \
--cc=sparse@chrisli.org \
--cc=torvalds@linux-foundation.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 NNTP newsgroup(s).