<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Hi all,</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Thanks to everyone who participated in the code size birds-of-a-feather today! Here are the minutes:
<a href="https://docs.google.com/document/d/1kDsbFDtkWLceR-Y63ez04CBfvhbDN8RxWV3xXwaNUC0/edit?usp=sharing" id="LPlnk537302">
https://docs.google.com/document/d/1kDsbFDtkWLceR-Y63ez04CBfvhbDN8RxWV3xXwaNUC0/edit?usp=sharing</a></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
The minutes are also copied below for convenience.</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="font-size:11pt; font-family:Arial; color:#000000; white-space:pre-wrap"><span style="font-size:20pt; font-family:Arial; color:#000000">LLVM 2020</span><span style="font-size:20pt; font-family:Arial; color:#000000"><br>
</span><span style="font-size:20pt; font-family:Arial; color:#000000">Code Size BoF Minutes</span><br>
</span></p>
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="font-size:11pt; font-family:Arial; color:#000000; white-space:pre-wrap">See also: Aditya Kumar’s talk on “Code Size Compiler Optimizations and Techniques”</span></p>
<h2 dir="ltr" style="line-height:1.38; margin-top:18pt; margin-bottom:6pt"><span style="font-size:16pt; font-family:Arial; color:#000000; white-space:pre-wrap">Minutes</span></h2>
<ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">What use cases for code size are important to the LLVM community?</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Deeply embedded devices: IoT, RISC-V</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Memory is a large part of the cost of the chip</span></p>
</li></ul>
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Gaming consoles</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">WebAssembly, for faster page loads</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Mobile apps</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Cache-limited programs on desktops, supercomputers</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Real-time systems (both size & speed are important)</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Find the code that isn’t on the critical path and optimize it for size</span></p>
</li><li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Or find thresholds for heuristics that are good enough for both</span></p>
</li></ul>
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Hyperscale systems with lots of processors but only a little memory for each one</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<a href="https://www.emutechnology.com/"><span style="color:#1155cc; text-decoration:underline; white-space:pre-wrap">EMU architecture</span></a></p>
</li><li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<a href="https://www.adapteva.com/introduction/"><span style="color:#1155cc; text-decoration:underline; white-space:pre-wrap">Epiphany/Adapteva</span></a><span style="white-space:pre-wrap"> architecture</span></p>
</li></ul>
</ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Why doesn’t -Oz do much better than -O2?</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">There are optimizations that make dramatic speed improvements, but not as many that make dramatic size improvements</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">It doesn’t disable things like loop unrolling</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">It doesn’t disable inlining</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">It doesn’t enable loop rerolling</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">-Oz affects heuristics for e.g. inlining, but they can still make the wrong decision</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">TargetTransformInfo has options for code size, but they often aren’t implemented</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">If -Oz uses a poorly tuned pass sequence, we can autotune it with OpenTuner etc.</span></p>
</li><ul>
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Can get ~5% extra size reduction this way.</span></p>
</li></ul>
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">LTO is effective for code size; was recently fixed to support -Oz</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Do we need different levels like -Os1, -Os2, -Os3?</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">We have profilers for code speed; can we have something similar for code size?</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">There is something like this for WebAssembly: </span>
<a href="https://github.com/rustwasm/twiggy"><span style="color:#1155cc; text-decoration:underline; white-space:pre-wrap">Twiggy🌱</span></a></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<a href="https://llvm.org/docs/Remarks.html"><span style="color:#1155cc; text-decoration:underline; white-space:pre-wrap">Remarks</span></a><span style="white-space:pre-wrap"> help understand what optimizations are being missed</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">What code size benchmarks can we use to measure patches?</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<a href="https://embench.org/"><span style="color:#1155cc; text-decoration:underline; white-space:pre-wrap">Embench.org</span></a></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<a href="http://szeged.github.io/csibe/"><span style="color:#1155cc; text-decoration:underline; white-space:pre-wrap">CSiBE</span></a><span style="white-space:pre-wrap"> </span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Technique: outlining</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">How is outlining affected by the size of the instruction set?</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Machine outliner might be affected, but IR-level outlining shouldn’t be affected much</span></p>
</li></ul>
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">How do machine outliner and IR-level outliner compare?</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Technique: function merging</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Research paper: “Function Merging by Sequence Alignment”</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Look into string alignment techniques from biology</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Technique: deleting unused code</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">What’s the best resource?</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Technique: compressors like gzip</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">UPX, </span><a href="https://bellard.org/lzexe.html"><span style="color:#1155cc; text-decoration:underline; white-space:pre-wrap">LZEXE</span></a><span style="white-space:pre-wrap"> save disk space</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">To save RAM, you need a compression algorithm that supports random access, like something based on Huffman codes</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Has been implemented in hardware (IBM CodePack)</span></p>
</li></ul>
</ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Technique: using different optimizations for hot & cold code</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">For best results, people currently have to move their cold code to a separate file so they can use different flags, which is painful</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Could we do code size optimizations in the linker?</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Needed to take advantage of RISC-V’s LUI instruction</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:square; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Requires copy propagation and dead code elimination</span></p>
</li></ul>
</ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Instead of inlining functions into each caller, can we keep one copy of the function and specialize it for all its call sites in the same translation unit?</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Attributor already shows improvements when you have recursion and non-trivial but dead code (the level stuff in Olden/bisort/bitonic)</span></p>
</li></ul>
</ul>
<h2 dir="ltr" style="line-height:1.38; margin-top:18pt; margin-bottom:6pt"><span style="font-size:16pt; font-family:Arial; color:#000000; white-space:pre-wrap">Topics</span></h2>
<ol style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:decimal; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Situations where code size matters</span></p>
</li><li dir="ltr" style="list-style-type:decimal; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">What do other compilers do better?</span></p>
</li><li dir="ltr" style="list-style-type:decimal; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Techniques for code size optimization</span></p>
</li><li dir="ltr" style="list-style-type:decimal; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">How can we improve LLVM?</span></p>
</li></ol>
<h2 dir="ltr" style="line-height:1.38; margin-top:18pt; margin-bottom:6pt"><span style="font-size:16pt; font-family:Arial; color:#000000; white-space:pre-wrap">Techniques</span></h2>
<ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Program design, library design, etc.</span></p>
</li><li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">General optimizations</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Loop idiom recognition (memset, memcpy)</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Partial inlining</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Deduplication</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Outlining</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Function merging</span></p>
</li></ul>
<li dir="ltr" style="font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Functionality changes</span></p>
</li><ul style="margin-top:0; margin-bottom:0">
<li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Partial evaluation</span></p>
</li><li dir="ltr" style="list-style-type:circle; font-size:11pt; font-family:Arial; color:#000000">
<p dir="ltr" style="margin-top: 0px; margin-bottom: 0px;line-height:1.38; margin-top:0pt; margin-bottom:0pt">
<span style="white-space:pre-wrap">Delete unused code</span></p>
</li></ul>
</ul>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Thanks,</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Sean Bartell<br>
</div>
</body>
</html>