

Early Superoptimizer Results - comex
http://blog.regehr.org/archives/1146

======
saosebastiao
From what I understand, the purpose of the project was to amass an enormous
database of code patterns and their SMT-proven more optimal replacement code.
Is there also a project to apply the harvested optimizations against code?

Also, couldn't the same principle apply to compilers that emit LLVM bitcode,
like GHC and rustc?

~~~
regehr
The immediate goal is simply to inspire LLVM hackers to improve the
instruction combiner.

But yes, these results can be made persistent and used directly to optimize
code. We are working on it.

Applying this tool to code emitted by GHC or rustc is trivial, it's all LLVM
bitcode. One of my ideas is that these languages are a good use case for a
superoptimizer since the LLVM passes aren't tuned for them, but we'll have to
see how that plays out.

~~~
jevinskie
> Finally C-Reduce has missed some opportunities to fold constants, so for
> example we see ~1 instead of -2 in the 2nd example from the top.

Do you compile the code using clang -O<level> or optimize using opt? I would
think that InstCombine would canonicalize that for you so Souper would have
less work to do.

~~~
regehr
Sorry if I was unclear. The missing folds are at the C level. At the LLVM
level we definitely run InstCombine before Souper (otherwise we would find
lots of optimizations that are not actually missing).

------
WalterBright
I remember a paper on "Superoptimization" back in the 80's. It worked by
starting with an algorithm, and doing an exhaustive search of every
instruction sequence to see if the sequence implemented the algorithm. Of
course, it only worked for very small algorithms, but it produced some very
interesting results that were promptly incorporated into about every compiler.

~~~
cokernel_hacker
It was almost certainly "Superoptimizer -- A Look at the Smallest Program"
[1], authored by the ingenious Dr. Massalin.

Dr. Massalin is also responsible for "The Synthesis Kernel" [2], a kernel
written around the idea of wringing out performance.

Definitely worth a look for speed demon-type programmers like compiler
engineers.

[1]
[http://www.stanford.edu/class/cs343/resources/superoptimizer...](http://www.stanford.edu/class/cs343/resources/superoptimizer.pdf)
[2]
[https://www.usenix.org/legacy/publications/compsystems/1988/...](https://www.usenix.org/legacy/publications/compsystems/1988/win_pu.pdf)

------
zurn
SMT solvers sound interesting and this Python example looks very approachable.

Anyone know if there are other cookbook-type "here's how you solve practical
problem x with SMT" recipes that might serve as a cargo cult-type (theory-
oblivious) dive into SMT?

------
girvo
So, I find compiler construction and optimisation a fascinating topic, but
have nowhere near enough knowledge to understand this beyond the surface...
However, "Superoptimiser" is such a cool name.

~~~
dkarapetyan
Some resources that I've found useful:
[http://nathansuniversity.com/](http://nathansuniversity.com/), "Compiler
Design: Virtual Machines", "Compiler Design: Analysis and Transformation",
"Programming Language Pragmatics", [https://github.com/kvalle/diy-
lisp](https://github.com/kvalle/diy-lisp),
[http://codon.com/](http://codon.com/),
[http://www.itu.dk/people/sestoft/pebook/](http://www.itu.dk/people/sestoft/pebook/).
A few more I don't remember but that's a good selection both for beginners and
intermediate practitioners.

~~~
girvo
Brilliant, thanks very much! Gives me some more reading, I'm currently working
through SICP :)

~~~
dkarapetyan
Ya, that's a really good one.

------
Serow225
Would it be possible to use these techniques on the various JITs that are used
in Firefox/Cheomium? How hard would that be? The work you folks are doing is
wonderful.

~~~
twhume
I did my Master's dissertation on superoptimization and the JVM. Tl;Dr managed
to find shorter versions of simple Java math functions fairly easily, didn't
prove they were any faster or better.

[https://docs.google.com/file/d/0B_8w6H4BG5E_TmxwbkRKRnhUM0k/...](https://docs.google.com/file/d/0B_8w6H4BG5E_TmxwbkRKRnhUM0k/edit)

And

[http://onlinelibrary.wiley.com/doi/10.1002/spe.2240/abstract](http://onlinelibrary.wiley.com/doi/10.1002/spe.2240/abstract)

