From: Kamil Dudka <kdudka@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jeff Garzik <jeff@garzik.org>,
Sparse Mailing-list <linux-sparse@vger.kernel.org>,
Pekka J Enberg <penberg@cs.helsinki.fi>
Subject: Re: linearize bug?
Date: Sat, 27 Aug 2011 18:54:40 +0200 [thread overview]
Message-ID: <201108271854.40694.kdudka@redhat.com> (raw)
In-Reply-To: <CA+55aFxGwAXRWVcv_Qx6C4B_PKqzVVbc8O_znwUt_D6g1iDJvQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 660 bytes --]
On Saturday 27 August 2011 17:53:23 Linus Torvalds wrote:
> The attached patch is ENTIRELY UNTESTED. The only thing I tested it on
> is your test-case. Running "make test" requires stuff that I don't
> even have installed, and I'm lazy ;^o
It seems to break loops with no conditions. The following piece of code:
#include <stdio.h>
int main()
{
for(;;)
printf("");
}
... translates into:
main:
.L0x7f233ed67010:
<entry-point>
call.32 %r2 <- printf, ""
ret.32
... which is obviously wrong. I am not sure if handling that special case
separately (as done in the attached patch) is a correct way to fix it.
Kamil
[-- Attachment #2: follow-up.diff --]
[-- Type: text/x-diff, Size: 1314 bytes --]
linearize.c | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/linearize.c b/linearize.c
index 30e0c9d..9e4b6a4 100644
--- a/linearize.c
+++ b/linearize.c
@@ -2055,7 +2055,7 @@ pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stmt)
struct statement *statement = stmt->iterator_statement;
struct statement *post_statement = stmt->iterator_post_statement;
struct expression *post_condition = stmt->iterator_post_condition;
- struct basic_block *loop_top, *loop_body, *loop_continue, *loop_end;
+ struct basic_block *loop_body, *loop_continue, *loop_end;
concat_symbol_list(stmt->iterator_syms, &ep->syms);
linearize_statement(ep, pre_statement);
@@ -2078,9 +2078,12 @@ pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stmt)
linearize_statement(ep, post_statement);
/* No post-condition means that it's the same as the pre-condition */
- if (!post_condition)
- linearize_cond_branch(ep, pre_condition, loop_body, loop_end);
- else
+ if (!post_condition) {
+ if (pre_condition)
+ linearize_cond_branch(ep, pre_condition, loop_body, loop_end);
+ else
+ add_goto(ep, loop_body);
+ } else
linearize_cond_branch(ep, post_condition, loop_body, loop_end);
set_activeblock(ep, loop_end);
break;
next prev parent reply other threads:[~2011-08-27 16:58 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-27 6:29 linearize bug? Jeff Garzik
2011-08-27 11:34 ` Kamil Dudka
2011-08-27 15:29 ` Linus Torvalds
2011-08-27 15:37 ` Jeff Garzik
2011-08-27 15:53 ` Linus Torvalds
2011-08-27 16:54 ` Kamil Dudka [this message]
2011-08-27 17:13 ` Linus Torvalds
2011-08-27 17:27 ` Linus Torvalds
2011-08-27 19:26 ` Linus Torvalds
2011-08-27 20:03 ` Jeff Garzik
2011-08-28 6:26 ` Pekka Enberg
2011-08-27 23:39 ` [PATCH] cse: update PHI users when throwing away an instruction Kamil Dudka
2011-08-28 0:34 ` Linus Torvalds
2011-08-28 6:32 ` Christopher Li
2011-08-28 6:33 ` Pekka Enberg
2011-08-28 8:53 ` Jeff Garzik
2011-08-27 22:07 ` linearize bug? Jeff Garzik
-- strict thread matches above, loose matches on Subject: below --
2006-11-12 4:09 Jeff Garzik
2006-11-13 4:43 ` Linus Torvalds
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=201108271854.40694.kdudka@redhat.com \
--to=kdudka@redhat.com \
--cc=jeff@garzik.org \
--cc=linux-sparse@vger.kernel.org \
--cc=penberg@cs.helsinki.fi \
--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).