From patchwork Thu Apr 6 23:00:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 9668533 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D452A602B8 for ; Thu, 6 Apr 2017 23:00:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D883326E1A for ; Thu, 6 Apr 2017 23:00:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CD6B0285DD; Thu, 6 Apr 2017 23:00:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7604C26E1A for ; Thu, 6 Apr 2017 23:00:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753496AbdDFXAi (ORCPT ); Thu, 6 Apr 2017 19:00:38 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:33065 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753035AbdDFXAh (ORCPT ); Thu, 6 Apr 2017 19:00:37 -0400 Received: by mail-wr0-f194.google.com with SMTP id g19so15333460wrb.0 for ; Thu, 06 Apr 2017 16:00:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kbZVgezQqO993bj4ngEAEBo86+ZTKzFBRG+En2iAN2Q=; b=CNpkrOhJ4XEdkq4ojrTy/lIvLHuunVjSrVp9pAWGnIxqC1VHNaxcK83Gj+Wifw4LvC m7mVqSjZgjHsbXW7tQPJO8I8SfzwP0eMeZ4i8wh+9lZqZT1OmXC4qNCTvlhX6pnErkhc Or5HV9xgTti/EHoRoU9KNb+hCwzCh+tYtZPmYUpNwjzxWxQQLqPsc4OGfuoNGTcDCe+w PLu4RwuXRBcs7P/FL53kjhv9paNsgGZ0AM0rQZjsM3Fj5GgWSQXkNc3j9qhW5w43EEd6 nvDRvFuAQvjbsph6ACxNrtE3hOABwaM7IQsLf4Q1fysTle2jfbaJ6Mde6wT42omCkh7D QP9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kbZVgezQqO993bj4ngEAEBo86+ZTKzFBRG+En2iAN2Q=; b=ROaOsiCAt5vi+XgBBNo6xRLpOYdxyEuE1hq1YKCsFLR0PrKpsJ+fvWMISmryX5wCZj 0wlgOC/pF8KasM4B2YYuicClT8u4mO8eXIU/8bLUavsaEU9xTtJGSDGUi6wTPJQws+cg WkyTDhccFllTnlVHDTXCuMX4yysfALCRFJ6rMV31DxBYqZL7Dm6dqg7Sx3ZNb49Zyjya qdmEe1bDjrg2HfSowMsTzIIrgVgD9s2md0n2p3ssexOKugcSoKJ4FdB+OYhsCU7SphLK AAggdobcFyEH6iJhrGYnvJYbzMlA0dfT6oc+jeEvch1GPd+o6d1RyWQo8JhnaQcXzOH6 H+yw== X-Gm-Message-State: AFeK/H31Lg+AIoUlx6yCB1G2yzt3vERwGT8t/k2fN2VcM2iZNYZvZ7gYcGLvX7Uvi2rWMw== X-Received: by 10.28.107.13 with SMTP id g13mr26279572wmc.117.1491519636426; Thu, 06 Apr 2017 16:00:36 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:88d:1900:b468:4a21:54b4:3699]) by smtp.gmail.com with ESMTPSA id i7sm4019595wmg.30.2017.04.06.16.00.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Apr 2017 16:00:35 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Linus Torvalds , Christopher Li , Luc Van Oostenryck Subject: [PATCH 1/4] add support for a new flag: -fdump-linearize[=only] Date: Fri, 7 Apr 2017 01:00:26 +0200 Message-Id: <20170406230029.11384-2-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170406230029.11384-1-luc.vanoostenryck@gmail.com> References: <20170406230029.11384-1-luc.vanoostenryck@gmail.com> Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- 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