From: james woodyatt <jhw@wetware.com>
To: The Trade <caml-list@inria.fr>
Subject: [Caml-list] assertions and branch prediction
Date: Fri, 15 Feb 2002 09:01:06 -0800 [thread overview]
Message-ID: <9A15D2B8-2235-11D6-B866-000502DB38F5@wetware.com> (raw)
folks--
After awhile, I noticed I was writing a fair amount of code that looks
like this:
match p with
| A -> ...; ()
| B -> ...; ()
| _ -> assert false
Then I hit upon the idea of rewriting it this way:
assert (p = A || p = B);
match p with
| A -> ...; ()
| B -> ...; ()
| C -> ()
My thinking was that I would rather pay up front with a more expensive
assertion, one that can be stripped out later with the -noassert option,
rather than pay at deployment with code (for raising the Assert_failure
exception) that I've eventually proven will not be executed.
This morning, I realized I might be defeating the branch prediction
optimizer in ocamlopt by doing it this way.
So. I wonder: is branch prediction affected by the assert construct?
If so, how can I use that to my advantage? Does anyone here know?
While we are on the subject of the assert function, it occurs to me that
it might be nice if -noassert together with "assert false" were to
bypass all exception handling and go right into program termination. It
seems to me that if I've used the -noassert option, I've made a promise
that the code compiled with it will never raise the Assert_failure
exception.
Or am I not sufficiently educated about how exception flow works in
Ocaml? I haven't looked at the generated code, because that would mean
having to learn another machine assembly language... and I am too old to
do that for fun anymore.
--
j h woodyatt <jhw@wetware.com>
"...the antidote to misinformation is more information, not less."
--vinton cerf
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
next reply other threads:[~2002-02-15 21:02 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-15 17:01 james woodyatt [this message]
2002-02-18 14:00 ` Xavier Leroy
2002-02-20 16:35 ` [Caml-list] assert false and -noassert james woodyatt
2002-02-24 9:08 ` Mattias Waldau
2002-02-25 20:00 ` james woodyatt
2002-02-17 13:47 [Caml-list] assertions and branch prediction Damien Doligez
2002-02-18 13:41 ` Christopher Quinn
2002-02-18 17:06 Damien Doligez
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=9A15D2B8-2235-11D6-B866-000502DB38F5@wetware.com \
--to=jhw@wetware.com \
--cc=caml-list@inria.fr \
/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