From: "Jonathan Neuschäfer" <j.neuschaefer@gmx.net>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: "Sparse Mailing-list" <linux-sparse@vger.kernel.org>,
"Pekka Enberg" <penberg@kernel.org>,
"Jonathan Neuschäfer" <j.neuschaefer@gmx.net>
Subject: Re: Fwd: [problem] sparse llvm loop conditions
Date: Sun, 19 Aug 2012 21:48:15 +0200 [thread overview]
Message-ID: <20120819194815.GA2952@debian.debian> (raw)
In-Reply-To: <50312093.5050207@pobox.com>
On Sun, Aug 19, 2012 at 01:21:23PM -0400, Jeff Garzik wrote:
> Hi Jeff,
>
> Have you seen this already?
>
> [penberg@tux sparse]$ cat loop.c
> struct list_node {
> struct list_node *next;
> };
>
> int foo(struct list_node *node)
> {
> int ret = 0;
> while (node) {
> node = node->next;
> ret++;
> }
> return ret;
> }
> [penberg@tux sparse]$ ./sparse-llvm loop.c
> loop.c:5:5: warning: symbol 'foo' was not declared. Should it be static?
> sparse-llvm: Instructions.cpp:730: void llvm::BranchInst::AssertOK():
> Assertion `getCondition()->getType()->isIntegerTy(1) && "May only
> branch on boolean predicates!"' failed.
> Aborted
It doesn't print this particular message anymore, but the llvm
verification detects some other things that could cause problems:
> jonathan@debian:~/dev/sparse/validation$ (../sparse-llvm backend/penberg-loop.c | llvm-dis) 2>&1
> backend/penberg-loop.c:5:5: warning: symbol 'foo' was not declared. Should it be static?
> PHI node operands are not the same type as the result!
> %phi = phi %list_node* [ %0, %L0 ], [ %load_target, %L2 ]
> Instruction does not dominate all uses!
> %phi = phi %list_node* [ %0, %L0 ], [ %load_target, %L2 ]
> %cond = icmp ne %list_node* %phi, null
> Instruction does not dominate all uses!
> %cond = icmp ne %list_node* %phi, null
> br i1 %cond, label %L2, label %L3
> Broken module found, verification continues.
> PHI node operands are not the same type as the result!
> %phi = phi %list_node* [ %0, %L0 ], [ %load_target, %L2 ]
> Instruction does not dominate all uses!
> %phi = phi %list_node* [ %0, %L0 ], [ %load_target, %L2 ]
> %cond = icmp ne %list_node* %phi, null
> Instruction does not dominate all uses!
> %cond = icmp ne %list_node* %phi, null
> br i1 %cond, label %L2, label %L3
> Broken module found, verification continues.
> Broken module found, verification continues.
> ; ModuleID = '<stdin>'
>
> %list_node = type { %list_node* }
>
> define i32 @foo(%list_node*) {
> L0:
> br label %L1
>
> L1: ; preds = %L2, %L0
> %phi = phi %list_node* [ %0, %L0 ], [ %load_target, %L2 ]
> %phi1 = phi i32 [ 0, %L0 ], [ %R5, %L2 ]
> %cond = icmp ne %list_node* %phi, null
> br i1 %cond, label %L2, label %L3
>
> L2: ; preds = %L1
> %src_i = ptrtoint %list_node* %phi to i32
> %addr_i = add i32 %src_i, 0
> %addr = inttoptr i32 %addr_i to i32*
> %load_target = load i32* %addr
This load instruction should use %list_node*.
> %R5 = add i32 %phi1, 1
> br label %L1
>
> L3: ; preds = %L1
> ret i32 %phi1
> }
Jonathan
next prev parent reply other threads:[~2012-08-19 19:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAOJsxLF351XvYE6Av3hxMsqXeu2nT4vRjbLgwNAguNLEfgLQvQ@mail.gmail.com>
2012-08-19 17:21 ` Fwd: [problem] sparse llvm loop conditions Jeff Garzik
2012-08-19 19:48 ` Jonathan Neuschäfer [this message]
2013-05-18 18:42 ` Jonathan Neuschäfer
2013-05-19 8:16 ` Pekka Enberg
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=20120819194815.GA2952@debian.debian \
--to=j.neuschaefer@gmx.net \
--cc=jgarzik@pobox.com \
--cc=linux-sparse@vger.kernel.org \
--cc=penberg@kernel.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).