Browse thread
[Caml-list] assertions and branch prediction
- james woodyatt
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | james woodyatt <jhw@w...> |
| Subject: | [Caml-list] assertions and branch prediction |
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