[llvm-commits] [polly] r130689 - in /polly/trunk/www: ./ experiments/ experiments/matmul/ images/ images/performance/ publications/

Tobias Grosser grosser at fim.uni-passau.de
Mon May 2 00:48:30 PDT 2011


Author: grosser
Date: Mon May  2 02:48:29 2011
New Revision: 130689

URL: http://llvm.org/viewvc/llvm-project?rev=130689&view=rev
Log:
Add new website for Polly

Use the content of the Polly wiki page[1] to create a new website. I do not yet
plan to officially promote this website, but it is already a solid base that we
can improve and peer review.

[1] http://wiki.llvm.org/Polly

Added:
    polly/trunk/www/
    polly/trunk/www/content.css
    polly/trunk/www/contributors.html
    polly/trunk/www/examples.html
    polly/trunk/www/experiments/
    polly/trunk/www/experiments/matmul/
    polly/trunk/www/experiments/matmul/init_array___%1---%19.jscop
    polly/trunk/www/experiments/matmul/main___%1---%17.jscop
    polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged
    polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled
    polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled+vector
    polly/trunk/www/experiments/matmul/matmul.c
    polly/trunk/www/experiments/matmul/matmul.normalopt.exe   (with props)
    polly/trunk/www/experiments/matmul/matmul.normalopt.ll
    polly/trunk/www/experiments/matmul/matmul.normalopt.s
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.exe   (with props)
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.ll
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.s
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.exe   (with props)
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.ll
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.s
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.exe   (with props)
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.ll
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.s
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged.exe   (with props)
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged.ll
    polly/trunk/www/experiments/matmul/matmul.polly.interchanged.s
    polly/trunk/www/experiments/matmul/matmul.preopt.ll
    polly/trunk/www/experiments/matmul/matmul.s
    polly/trunk/www/experiments/matmul/runall.sh   (with props)
    polly/trunk/www/experiments/matmul/scops.init_array.dot
    polly/trunk/www/experiments/matmul/scops.init_array.dot.png
    polly/trunk/www/experiments/matmul/scops.main.dot
    polly/trunk/www/experiments/matmul/scops.main.dot.png
    polly/trunk/www/experiments/matmul/scops.print_array.dot
    polly/trunk/www/experiments/matmul/scops.print_array.dot.png
    polly/trunk/www/experiments/matmul/scopsonly.init_array.dot
    polly/trunk/www/experiments/matmul/scopsonly.init_array.dot.png
    polly/trunk/www/experiments/matmul/scopsonly.main.dot
    polly/trunk/www/experiments/matmul/scopsonly.main.dot.png
    polly/trunk/www/experiments/matmul/scopsonly.print_array.dot
    polly/trunk/www/experiments/matmul/scopsonly.print_array.dot.png
    polly/trunk/www/get_started.html
    polly/trunk/www/images/
    polly/trunk/www/images/architecture.png
    polly/trunk/www/images/iit-madras.png
    polly/trunk/www/images/osu.png
    polly/trunk/www/images/performance/
    polly/trunk/www/images/performance/parallel-large.png
    polly/trunk/www/images/performance/parallel-small.png
    polly/trunk/www/images/performance/sequential-large.png
    polly/trunk/www/images/performance/sequential-small.png
    polly/trunk/www/images/sys-uni.png
    polly/trunk/www/images/uni-passau.png
    polly/trunk/www/index.html
    polly/trunk/www/menu.css
    polly/trunk/www/menu.html.incl
    polly/trunk/www/passes.html
    polly/trunk/www/performance.html
    polly/trunk/www/publications/
    polly/trunk/www/publications.html
    polly/trunk/www/publications/grosser-impact-2011-slides.pdf
    polly/trunk/www/publications/grosser-impact-2011.pdf
    polly/trunk/www/todo.html

Added: polly/trunk/www/content.css
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/content.css?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/content.css (added)
+++ polly/trunk/www/content.css Mon May  2 02:48:29 2011
@@ -0,0 +1,33 @@
+html { margin: 0px; } body { margin: 8px; }
+
+html, body {
+  padding:0px;
+  font-size:small; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222;
+  line-height:1.5;
+}
+
+h1, h2, h3, tt { color: #000 }
+
+h1 { padding-top:0px; margin-top:0px;}
+h2 { color:#333333; padding-top:0.5em; }
+h3 { padding-top: 0.5em; margin-bottom: -0.25em; color:#2d58b7}
+li { padding-bottom: 0.5em; }
+ul { padding-left:1.5em; }
+
+PRE.code {padding-left: 0.5em; background-color: #eeeeee}
+PRE {padding-left: 0.5em}
+
+/* Slides */
+IMG.img_slide {
+    display: block;
+    margin-left: auto;
+    margin-right: auto
+}
+
+.itemTitle { color:#2d58b7 }
+
+span.error { color:red }
+span.caret { color:green; font-weight:bold }
+
+/* Tables */
+tr { vertical-align:top }

Added: polly/trunk/www/contributors.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/contributors.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/contributors.html (added)
+++ polly/trunk/www/contributors.html Mon May  2 02:48:29 2011
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+          "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+  <title>Polly - Contributors</title>
+  <link type="text/css" rel="stylesheet" href="menu.css" />
+  <link type="text/css" rel="stylesheet" href="content.css" />
+</head>
+<body>
+
+<!--#include virtual="menu.html.incl"-->
+
+<div id="content">
+
+<h1>Polly: Contributors</h1>
+
+Polly is developed by a team of students supported by different universities.
+
+<h2>People</h2>
+<h3>Raghesh Aloor</h3>
+<p>Raghesh works on OpenMP code generation. He is funded as Google Summer of Code
+Student 2011.</p>
+
+<h3>Tobias Grosser</h3>
+<p>Tobias is one of the two Co-founders of Polly. He designed the overall
+architecture and contributed to almost every part of Polly. He did his work
+during his diploma studies at University of Passau. Furthermore, he spent 6
+months at Ohio State University where he was founded by the U.S. National
+Science Foundation through awards 0811781 and 0926688.</p>
+
+<p>Website: <a href="http://www.grosser.es">www.grosser.es</a></p>
+
+
+<h3>Andreas Simbuerger</h3>
+<p>
+Andreas works on the profiling infrastructure during his PhD at University of
+Passau.
+</p>
+<p>Website: <a href="http://www.infosun.fim.uni-passau.de/cl/staff/simbuerger/">
+http://www.infosun.fim.uni-passau.de/cl/staff/simbuerger/</a></p>
+<h3>Hongbin Zheng</h3>
+<p>Hongbin Zheng is one of the two Co-founders of Polly. He was funded as a
+Google Summer of Code Student 2010 and implemented parts of the Polly frontends
+as well as the automake/cmake infrastructure.</p>
+
+<h2> Universities</h2>
+
+<p>Polly is supported by the following Universities.</p>
+<img src="images/iit-madras.png" style="padding:1em" />
+<img src="images/uni-passau.png" style="padding: 1em; padding-bottom:2em;"/>
+<img src="images/osu.png" style="padding:1em"/>
+<img src="images/sys-uni.png" style="padding:1em"/>
+</body>
+</html>

Added: polly/trunk/www/examples.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/examples.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/examples.html (added)
+++ polly/trunk/www/examples.html Mon May  2 02:48:29 2011
@@ -0,0 +1,317 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
+          "http://www.w3.org/TR/html4/strict.dtd">
+<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
+<html>
+<head>
+  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+  <title>Polly - Examples</title>
+  <link type="text/css" rel="stylesheet" href="menu.css">
+  <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+<body>
+<!--#include virtual="menu.html.incl"-->
+<div id="content">
+  <!--*********************************************************************-->
+  <h1>Polly: Examples</h1>
+  <!--*********************************************************************-->
+<!--=====================================================================-->
+<h2>Optimize Matrix Multiplication Manually</h2>
+<!--=====================================================================-->
+
+<p>Polly does not yet focus on end user, but on research and the development of
+new optimizations. Hence for the users of Polly it is often necessary to
+understand how Polly works internally. To get an overview of the different steps
+taken during polyhedral compilation, we give a step by step example on how to
+use the different Polly passes. For this we optimize a simple matrix
+multiplication kernel. In case you look for a more automated way of executing
+Polly, check out the pollycc tool in utils/pollycc.</p>
+
+The files used and created in this example are available <a
+href="experiments/matmul">here</a>.
+
+<ol>
+<li><h4>Create LLVM-IR from the C code</h4>
+
+Polly works on LLVM-IR. Hence it is necessary to translate the source files into
+LLVM-IR. If more than on file should be optimized the files can be combined into
+a single file with llvm-link.
+
+<pre class="code">clang -S -emit-llvm matmul.c -o matmul.s</pre>
+</li>
+
+
+<li><h4>Load Polly automatically when calling the 'opt' tool</h4>
+
+Polly is not built into opt or bugpoint, but it is a shared library that needs
+to be loaded into these tools explicitally. The Polly library is called
+LVMPolly.so. For a cmake build it is available in the build/lib/ directory,
+autoconf creates the same file in
+build/tools/polly/{Release+Asserts|Asserts|Debug}/lib. For convenience we create
+an alias that automatically loads Polly if 'opt' is called.
+<pre class="code">
+export PATH_TO_POLLY_LIB="~/polly/build/lib/"
+alias opt="opt -load ${PATH_TO_POLLY_LIB}/LLVMPolly.so"</pre>
+</li>
+
+<li><h4>Prepare the LLVM-IR for Polly</h4>
+
+Polly is only able to work with code that matches a canonical form. To translate
+the LLVM-IR into this form we use a set of canonicalication passes. For this
+example only three passes are necessary. To get good coverage on a larger set
+of input files a larger set is needed. pollycc contains a set of passes that has
+shown to be beneficial.
+<pre class="code">opt -S -mem2reg -loop-simplify -indvars matmul.s > matmul.preopt.ll</pre></li>
+
+<li><h4>Show the SCoPs detected by Polly (optional)</h4>
+
+To understand if Polly was able to detect some SCoPs, we print the
+structure of the detected SCoPs. In our example two SCoPs were detected. One in
+'init_array' the other in 'main'.
+
+<pre class="code">opt -basicaa -polly-cloog -analyze -q matmul.preopt.ll</pre>
+
+<pre>
+init_array():
+for (c2=0;c2<=1023;c2++) {
+  for (c4=0;c4<=1023;c4++) {
+    Stmt_5(c2,c4);
+  }
+}
+
+main():
+for (c2=0;c2<=1023;c2++) {
+  for (c4=0;c4<=1023;c4++) {
+    Stmt_4(c2,c4);
+    for (c6=0;c6<=1023;c6++) {
+      Stmt_6(c2,c4,c6);
+    }
+  }
+}
+</pre>
+</li>
+<li><h4>Highlight the detected SCoPs in the CFGs of the program (requires graphviz/dotty)</h4>
+
+Polly can use graphviz to graphically show a CFG in which the detected SCoPs are
+highlighted. It can also create '.dot' files that can be translated by
+the 'dot' utility into various graphic formats.
+
+<pre class="code">opt -basicaa -view-scops -disable-output matmul.preopt.ll
+opt -basicaa -view-scops-only -disable-output matmul.preopt.ll</pre>
+The output for the different functions<br />
+view-scops:
+<a href="experiments/matmul/scops.main.dot.png">main</a>,
+<a href="experiments/matmul/scops.init_array.dot.png">init_array</a>,
+<a href="experiments/matmul/scops.print_array.dot.png">print_array</a><br />
+view-scops-only:
+<a href="experiments/matmul/scopsonly.main.dot.png">main</a>,
+<a href="experiments/matmul/scopsonly.init_array.dot.png">init_array</a>,
+<a href="experiments/matmul/scopsonly.print_array.dot.png">print_array</a>
+</li>
+
+<li><h4>View the polyhedral representation of the SCoPs</h4>
+<pre class="code">opt -basicaa -polly-scops -analyze matmul.preopt.ll</pre>
+<pre>
+[...]
+Printing analysis 'Polly - Create polyhedral description of Scops' for region: '%1 => %17' in function 'init_array':
+   Context:
+   { [] }
+   Statements {
+   	Stmt_5
+           Domain :=
+               { Stmt_5[i0, i1] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 };
+           Scattering :=
+               { Stmt_5[i0, i1] -> scattering[0, i0, 0, i1, 0] };
+           WriteAccess := 
+               { Stmt_5[i0, i1] -> MemRef_A[1037i0 + i1] };
+           WriteAccess := 
+               { Stmt_5[i0, i1] -> MemRef_B[1047i0 + i1] };
+   	FinalRead
+           Domain :=
+               { FinalRead[0] };
+           Scattering :=
+               { FinalRead[i0] -> scattering[200000000, o1, o2, o3, o4] };
+           ReadAccess := 
+               { FinalRead[i0] -> MemRef_A[o0] };
+           ReadAccess := 
+               { FinalRead[i0] -> MemRef_B[o0] };
+   }
+Printing analysis 'Polly - Create polyhedral description of Scops' for region: '%0 => <Function  Return>' in function 'init_array':
+[...]
+Printing analysis 'Polly - Create polyhedral description of Scops' for region: '%1 => %17' in function 'main':
+   Context:
+   { [] }
+   Statements {
+   	Stmt_4
+           Domain :=
+               { Stmt_4[i0, i1] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 };
+           Scattering :=
+               { Stmt_4[i0, i1] -> scattering[0, i0, 0, i1, 0, 0, 0] };
+           WriteAccess := 
+               { Stmt_4[i0, i1] -> MemRef_C[1067i0 + i1] };
+   	Stmt_6
+           Domain :=
+               { Stmt_6[i0, i1, i2] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 and i2 >= 0 and i2 <= 1023 };
+           Scattering :=
+               { Stmt_6[i0, i1, i2] -> scattering[0, i0, 0, i1, 1, i2, 0] };
+           ReadAccess := 
+               { Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] };
+           ReadAccess := 
+               { Stmt_6[i0, i1, i2] -> MemRef_A[1037i0 + i2] };
+           ReadAccess := 
+               { Stmt_6[i0, i1, i2] -> MemRef_B[i1 + 1047i2] };
+           WriteAccess := 
+               { Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] };
+   	FinalRead
+           Domain :=
+               { FinalRead[0] };
+           Scattering :=
+               { FinalRead[i0] -> scattering[200000000, o1, o2, o3, o4, o5, o6] };
+           ReadAccess := 
+               { FinalRead[i0] -> MemRef_C[o0] };
+           ReadAccess := 
+               { FinalRead[i0] -> MemRef_A[o0] };
+           ReadAccess := 
+               { FinalRead[i0] -> MemRef_B[o0] };
+   }
+Printing analysis 'Polly - Create polyhedral description of Scops' for region: '%0 => <Function  Return>' in function 'main':
+Invalid Scop!
+</pre>
+</li>
+
+<li><h4>Show the dependences for the SCoPs</h4>
+<pre class="code">opt -basicaa -polly-dependences -analyze matmul.preopt.ll</pre>
+<pre>Printing analysis 'Polly - Calculate dependences for SCoP' for region: 'for.cond => for.end28' in function 'init_array':
+   Must dependences:
+       {  }
+   May dependences:
+       {  }
+   Must no source:
+       {  }
+   May no source:
+       {  }
+Printing analysis 'Polly - Calculate dependences for SCoP' for region: 'for.cond => for.end48' in function 'main':
+   Must dependences:
+       {  Stmt_4[i0, i1] -> Stmt_6[i0, i1, 0] :
+              i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023;
+          Stmt_6[i0, i1, i2] -> Stmt_6[i0, i1, 1 + i2] :
+              i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 and i2 >= 0 and i2 <= 1022; 
+          Stmt_6[i0, i1, 1023] -> FinalRead[0] :
+              i1 <= 1091540 - 1067i0 and i1 >= -1067i0 and i1 >= 0 and i1 <= 1023;
+          Stmt_6[1023, i1, 1023] -> FinalRead[0] :
+              i1 >= 0 and i1 <= 1023 
+       }
+   May dependences:
+       {  }
+   Must no source:
+       {  Stmt_6[i0, i1, i2] -> MemRef_A[1037i0 + i2] :
+              i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 and i2 >= 0 and i2 <= 1023; 
+          Stmt_6[i0, i1, i2] -> MemRef_B[i1 + 1047i2] :
+              i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 and i2 >= 0 and i2 <= 1023; 
+          FinalRead[0] -> MemRef_A[o0];
+          FinalRead[0] -> MemRef_B[o0]
+          FinalRead[0] -> MemRef_C[o0] :
+              o0 >= 1092565 or (exists (e0 = [(o0)/1067]: o0 <= 1091540 and o0 >= 0
+              and 1067e0 <= -1024 + o0 and 1067e0 >= -1066 + o0)) or o0 <= -1;
+       }
+   May no source:
+       {  }
+</pre></li>
+
+<li><h4>Export jscop files</h4>
+
+Polly can export the polyhedral representation in so called jscop files. Jscop
+files contain the polyhedral representation stored in a JSON file.
+<pre class="code">opt -basicaa -polly-export-jscop matmul.preopt.ll</pre>
+<pre>Writing SCoP 'for.cond => for.end28' in function 'init_array' to './init_array___%for.cond---%for.end28.jscop'.
+Writing SCoP 'for.cond => for.end48' in function 'main' to './main___%for.cond---%for.end48.jscop'.
+</pre></li>
+
+<li><h4>Import the changed jscop files and print the updated SCoP structure
+(optional)</h4>
+<p>Polly can import jscop files, where the schedules of the statements were
+changed. With the help of these updated files we can import transformations into
+Polly. It is possible to import different jscop files by providing the postfix
+of the jscop file that is imported.</p>
+<p> The optimized jscop files for this example are hand written. The schedule
+used was inspired by looking at the optimizations PoCC performs. If PoCC is
+installed Polly can often calculate such schedules fully automatically.</p>
+
+
+<pre class="code">opt -basicaa -polly-import-jscop -polly-print -disable-output matmul.preopt.ll -polly-import-jscop-postfix=.opt</pre>
+<pre>Cannot open file: ./init_array___%for.cond---%for.end28.jscop.opt
+Skipping import.
+In function: 'init_array' SCoP: for.cond => for.end28:
+for (c2=0;c2<=1023;c2++) {
+  for (c4=0;c4<=1023;c4++) {
+    %for.body4(c2,c4);
+  }
+}
+Reading SCoP 'for.cond => for.end48' in function 'main' from './main___%for.cond---%for.end48.scop.opt.opt'.
+In function: 'main' SCoP: for.cond => for.end48:
+for (c2=0;c2<=1023;c2++) {
+  for (c4=0;c4<=1023;c4++) {
+    %for.body4(c2,c4);
+  }
+}
+for (c2=0;c2<=1023;c2++) {
+  for (c3=0;c3<=1023;c3++) {
+    for (c4=0;c4<=1023;c4++) {
+      %for.body12(c2,c4,c3);
+    }
+  }
+}
+</pre></li>
+
+<li><h4>Codegenerate the SCoPs</h4>
+This generates new code for the SCoPs detected by polly.
+If -polly-import is present, transformations specified in the imported openscop
+files will be applied.
+<pre class="code">opt -basicaa -polly-import -polly-import-postfix=.opt -polly-codegen matmul.preopt.ll | opt -O3 > matmul.pollyopt.ll</pre>
+<pre>
+Cannot open file: ./init_array___%for.cond---%for.end28.scop.opt
+Skipping import.
+Reading SCoP 'for.cond => for.end48' in function 'main' from './main___%for.cond---%for.end48.scop.opt'.</pre>
+
+<pre class="code">opt matmul.preopt.ll | opt -O3 > matmul.normalopt.ll</pre></li>
+
+<li><h4>Create the executables</h4>
+
+Create one executable optimized with plain -O3 as well as a set of executables
+optimized in different ways with Polly. One changes only the loop structure, the
+other adds tiling, the next adds vectorization and finally we use OpenMP
+parallelism.
+<pre class="code">
+llc matmul.normalopt.ll -o matmul.normalopt.s && \
+    gcc matmul.normalopt.s -o matmul.normalopt.exe
+llc matmul.polly.interchanged.ll -o matmul.polly.interchanged.s && \
+    gcc matmul.polly.interchanged.s -o matmul.polly.interchanged.exe
+llc matmul.polly.interchanged+tiled.ll -o matmul.polly.interchanged+tiled.s && \
+    gcc matmul.polly.interchanged+tiled.s -o matmul.polly.interchanged+tiled.exe
+llc matmul.polly.interchanged+tiled+vector.ll -o matmul.polly.interchanged+tiled+vector.s && \
+    gcc matmul.polly.interchanged+tiled+vector.s -o matmul.polly.interchanged+tiled+vector.exe
+llc matmul.polly.interchanged+tiled+vector+openmp.ll -o matmul.polly.interchanged+tiled+vector+openmp.s && \
+    gcc -lgomp matmul.polly.interchanged+tiled+vector+openmp.s -o matmul.polly.interchanged+tiled+vector+openmp.exe
+    </pre>
+
+<li><h4>Compare the runtime of the executables</h4>
+
+By comparing the runtimes of the different code snippets we see that a simple
+loop interchange gives here the largest performance boost. However by adding
+vectorization and by using OpenMP we can further improve the performance
+significantly.
+<pre class="code">time ./matmul.normalopt.exe</pre>
+<pre>42.68 real, 42.55 user, 0.00 sys</pre>
+<pre class="code">time ./matmul.polly.interchanged.exe</pre>
+<pre>04.33 real, 4.30 user, 0.01 sys</pre>
+<pre class="code">time ./matmul.polly.interchanged+tiled.exe</pre>
+<pre>04.11 real, 4.10 user, 0.00 sys</pre>
+<pre class="code">time ./matmul.polly.interchanged+tiled+vector.exe</pre>
+<pre>01.39 real, 1.36 user, 0.01 sys</pre>
+<pre class="code">time ./matmul.polly.interchanged+tiled+vector+openmp.exe</pre>
+<pre>00.66 real, 2.58 user, 0.02 sys</pre>
+</li>
+</ol>
+
+</div>
+</body>
+</html>

Added: polly/trunk/www/experiments/matmul/init_array___%1---%19.jscop
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/init_array___%251---%2519.jscop?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/init_array___%1---%19.jscop (added)
+++ polly/trunk/www/experiments/matmul/init_array___%1---%19.jscop Mon May  2 02:48:29 2011
@@ -0,0 +1,21 @@
+{
+   "context" : "{ [] }",
+   "name" : "%1 => %19",
+   "statements" : [
+      {
+         "accesses" : [
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_5[i0, i1] -> MemRef_A[1536i0 + i1] }"
+            },
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_5[i0, i1] -> MemRef_B[1536i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_5[i0, i1] : i0 >= 0 and i0 <= 1535 and i1 >= 0 and i1 <= 1535 }",
+         "name" : "Stmt_5",
+         "schedule" : "{ Stmt_5[i0, i1] -> scattering[0, i0, 0, i1, 0] }"
+      }
+   ]
+}

Added: polly/trunk/www/experiments/matmul/main___%1---%17.jscop
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/main___%251---%2517.jscop?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/main___%1---%17.jscop (added)
+++ polly/trunk/www/experiments/matmul/main___%1---%17.jscop Mon May  2 02:48:29 2011
@@ -0,0 +1,40 @@
+{
+   "context" : "{ [] }",
+   "name" : "%1 => %17",
+   "statements" : [
+      {
+         "accesses" : [
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_4[i0, i1] -> MemRef_C[1536i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_4[i0, i1] : i0 >= 0 and i0 <= 1535 and i1 >= 0 and i1 <= 1535 }",
+         "name" : "Stmt_4",
+         "schedule" : "{ Stmt_4[i0, i1] -> scattering[0, i0, 0, i1, 0, 0, 0] }"
+      },
+      {
+         "accesses" : [
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1536i0 + i1] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_A[1536i0 + i2] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_B[i1 + 1536i2] }"
+            },
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1536i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_6[i0, i1, i2] : i0 >= 0 and i0 <= 1535 and i1 >= 0 and i1 <= 1535 and i2 >= 0 and i2 <= 1535 }",
+         "name" : "Stmt_6",
+         "schedule" : "{ Stmt_6[i0, i1, i2] -> scattering[0, i0, 0, i1, 1, i2, 0] }"
+      }
+   ]
+}

Added: polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/main___%251---%2517.jscop.interchanged?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged (added)
+++ polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged Mon May  2 02:48:29 2011
@@ -0,0 +1,40 @@
+{
+   "context" : "{ [] }",
+   "name" : "%1 => %17",
+   "statements" : [
+      {
+         "accesses" : [
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_4[i0, i1] -> MemRef_C[1067i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_4[i0, i1] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 }",
+         "name" : "Stmt_4",
+         "schedule" : "{ Stmt_4[i0, i1] -> scattering[0, i0, 0, i1, 0, 0, 0] }"
+      },
+      {
+         "accesses" : [
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_A[1037i0 + i2] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_B[i1 + 1047i2] }"
+            },
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_6[i0, i1, i2] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 and i2 >= 0 and i2 <= 1023 }",
+         "name" : "Stmt_6",
+         "schedule" : "{ Stmt_6[i0, i1, i2] -> scattering[1, i0, 0, i2, 0, i1, 0] }"
+      }
+   ]
+}

Added: polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/main___%251---%2517.jscop.interchanged%2Btiled?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled (added)
+++ polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled Mon May  2 02:48:29 2011
@@ -0,0 +1,40 @@
+{
+   "context" : "{ [] }",
+   "name" : "%1 => %17",
+   "statements" : [
+      {
+         "accesses" : [
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_4[i0, i1] -> MemRef_C[1067i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_4[i0, i1] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 }",
+         "name" : "Stmt_4",
+         "schedule" : "{ Stmt_4[i0, i1] -> scattering[0, i0, 0, i1, 0, 0, 0] }"
+      },
+      {
+         "accesses" : [
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_A[1037i0 + i2] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_B[i1 + 1047i2] }"
+            },
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_6[i0, i1, i2] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 and i2 >= 0 and i2 <= 1023 }",
+         "name" : "Stmt_6",
+         "schedule" : "{ Stmt_6[i0, i1, i2] -> scattering[1, o0, o1, o2, i0, i2, i1]: o0 <= i0 < o0 + 64 and o1 <= i1 < o1 + 64 and o2 <= i2 < o2 + 64 and o0 % 64 = 0 and o1 % 64 = 0 and o2 % 64 = 0 }"
+      }
+   ]
+}

Added: polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled+vector
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/main___%251---%2517.jscop.interchanged%2Btiled%2Bvector?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled+vector (added)
+++ polly/trunk/www/experiments/matmul/main___%1---%17.jscop.interchanged+tiled+vector Mon May  2 02:48:29 2011
@@ -0,0 +1,40 @@
+{
+   "context" : "{ [] }",
+   "name" : "%1 => %17",
+   "statements" : [
+      {
+         "accesses" : [
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_4[i0, i1] -> MemRef_C[1067i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_4[i0, i1] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 }",
+         "name" : "Stmt_4",
+         "schedule" : "{ Stmt_4[i0, i1] -> scattering[0, i0, 0, i1, 0, 0, 0, 0] }"
+      },
+      {
+         "accesses" : [
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_A[1037i0 + i2] }"
+            },
+            {
+               "kind" : "read",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_B[i1 + 1047i2] }"
+            },
+            {
+               "kind" : "write",
+               "relation" : "{ Stmt_6[i0, i1, i2] -> MemRef_C[1067i0 + i1] }"
+            }
+         ],
+         "domain" : "{ Stmt_6[i0, i1, i2] : i0 >= 0 and i0 <= 1023 and i1 >= 0 and i1 <= 1023 and i2 >= 0 and i2 <= 1023 }",
+         "name" : "Stmt_6",
+         "schedule" : "{ Stmt_6[i0, i1, i2] -> scattering[1, o0, o1, o2, i0, i2, ii1, i1]: o0 <= i0 < o0 + 64 and o1 <= i1 < o1 + 64 and o2 <= i2 < o2 + 64 and o0 % 64 = 0 and o1 % 64 = 0 and o2 % 64 = 0 and ii1 % 4 = 0 and ii1 <= i1 < ii1 + 4}"
+      }
+   ]
+}

Added: polly/trunk/www/experiments/matmul/matmul.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.c?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.c (added)
+++ polly/trunk/www/experiments/matmul/matmul.c Mon May  2 02:48:29 2011
@@ -0,0 +1,52 @@
+#include <stdio.h>
+
+#define N 1536
+float A[N][N];
+float B[N][N];
+float C[N][N];
+
+void init_array()
+{
+    int i, j;
+
+    for (i=0; i<N; i++) {
+        for (j=0; j<N; j++) {
+            A[i][j] = (1+(i*j)%1024)/2.0;
+            B[i][j] = (1+(i*j)%1024)/2.0;
+        }
+    }
+}
+
+void print_array()
+{
+    int i, j;
+
+    for (i=0; i<N; i++) {
+        for (j=0; j<N; j++) {
+            fprintf(stdout, "%lf ", C[i][j]);
+            if (j%80 == 79) fprintf(stdout, "\n");
+        }
+        fprintf(stdout, "\n");
+    }
+}
+
+int main()
+{
+    int i, j, k;
+    double t_start, t_end;
+
+    init_array();
+
+    for(i=0; i<N; i++)  {
+        for(j=0; j<N; j++)  {
+            C[i][j] = 0;
+            for(k=0; k<N; k++)
+                C[i][j] = C[i][j] + A[i][k] * B[k][j];
+        }
+    }
+
+#ifdef TEST
+    print_array();
+#endif
+    return 0;
+}

Added: polly/trunk/www/experiments/matmul/matmul.normalopt.exe
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.normalopt.exe?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.normalopt.exe (added) and polly/trunk/www/experiments/matmul/matmul.normalopt.exe Mon May  2 02:48:29 2011 differ

Propchange: polly/trunk/www/experiments/matmul/matmul.normalopt.exe
------------------------------------------------------------------------------
    svn:executable = *

Added: polly/trunk/www/experiments/matmul/matmul.normalopt.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.normalopt.ll?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.normalopt.ll (added) and polly/trunk/www/experiments/matmul/matmul.normalopt.ll Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/matmul.normalopt.s
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.normalopt.s?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.normalopt.s (added)
+++ polly/trunk/www/experiments/matmul/matmul.normalopt.s Mon May  2 02:48:29 2011
@@ -0,0 +1,203 @@
+	.file	"matmul.normalopt.ll"
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI0_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	init_array
+	.align	16, 0x90
+	.type	init_array, at function
+init_array:                             # @init_array
+# BB#0:
+	xorl	%eax, %eax
+	movsd	.LCPI0_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB0_1:                                # %.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB0_2 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB0_2:                                #   Parent Loop BB0_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB0_2
+# BB#3:                                 #   in Loop: Header=BB0_1 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB0_1
+# BB#4:
+	ret
+.Ltmp0:
+	.size	init_array, .Ltmp0-init_array
+
+	.globl	print_array
+	.align	16, 0x90
+	.type	print_array, at function
+print_array:                            # @print_array
+# BB#0:
+	pushq	%r14
+	pushq	%rbx
+	pushq	%rax
+	movq	$-9437184, %rbx         # imm = 0xFFFFFFFFFF700000
+	.align	16, 0x90
+.LBB1_1:                                # %.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB1_2 Depth 2
+	xorl	%r14d, %r14d
+	movq	stdout(%rip), %rdi
+	.align	16, 0x90
+.LBB1_2:                                #   Parent Loop BB1_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movss	C+9437184(%rbx,%r14,4), %xmm0
+	cvtss2sd	%xmm0, %xmm0
+	movl	$.L.str, %esi
+	movb	$1, %al
+	callq	fprintf
+	movslq	%r14d, %rax
+	imulq	$1717986919, %rax, %rcx # imm = 0x66666667
+	movq	%rcx, %rdx
+	shrq	$63, %rdx
+	sarq	$37, %rcx
+	addl	%edx, %ecx
+	imull	$80, %ecx, %ecx
+	subl	%ecx, %eax
+	cmpl	$79, %eax
+	jne	.LBB1_4
+# BB#3:                                 #   in Loop: Header=BB1_2 Depth=2
+	movq	stdout(%rip), %rsi
+	movl	$10, %edi
+	callq	fputc
+.LBB1_4:                                #   in Loop: Header=BB1_2 Depth=2
+	incq	%r14
+	movq	stdout(%rip), %rsi
+	cmpq	$1536, %r14             # imm = 0x600
+	movq	%rsi, %rdi
+	jne	.LBB1_2
+# BB#5:                                 #   in Loop: Header=BB1_1 Depth=1
+	movl	$10, %edi
+	callq	fputc
+	addq	$6144, %rbx             # imm = 0x1800
+	jne	.LBB1_1
+# BB#6:
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%r14
+	ret
+.Ltmp1:
+	.size	print_array, .Ltmp1-print_array
+
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI2_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	main
+	.align	16, 0x90
+	.type	main, at function
+main:                                   # @main
+# BB#0:
+	xorl	%eax, %eax
+	movsd	.LCPI2_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB2_1:                                # %.preheader.i
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_2 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB2_2:                                #   Parent Loop BB2_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB2_2
+# BB#3:                                 #   in Loop: Header=BB2_1 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	xorl	%edx, %edx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB2_1
+	.align	16, 0x90
+.LBB2_4:                                # %.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_5 Depth 2
+                                        #       Child Loop BB2_6 Depth 3
+	xorl	%eax, %eax
+	xorl	%ecx, %ecx
+	.align	16, 0x90
+.LBB2_5:                                #   Parent Loop BB2_4 Depth=1
+                                        # =>  This Loop Header: Depth=2
+                                        #       Child Loop BB2_6 Depth 3
+	movl	$0, C(%rcx,%rdx)
+	leaq	B(%rcx), %rsi
+	pxor	%xmm0, %xmm0
+	movq	%rax, %rdi
+	.align	16, 0x90
+.LBB2_6:                                #   Parent Loop BB2_4 Depth=1
+                                        #     Parent Loop BB2_5 Depth=2
+                                        # =>    This Inner Loop Header: Depth=3
+	movss	A(%rdx,%rdi,4), %xmm1
+	mulss	(%rsi), %xmm1
+	addss	%xmm1, %xmm0
+	addq	$6144, %rsi             # imm = 0x1800
+	incq	%rdi
+	cmpq	$1536, %rdi             # imm = 0x600
+	jne	.LBB2_6
+# BB#7:                                 #   in Loop: Header=BB2_5 Depth=2
+	movss	%xmm0, C(%rcx,%rdx)
+	addq	$4, %rcx
+	cmpq	$6144, %rcx             # imm = 0x1800
+	jne	.LBB2_5
+# BB#8:                                 # %init_array.exit
+                                        #   in Loop: Header=BB2_4 Depth=1
+	addq	$6144, %rdx             # imm = 0x1800
+	cmpq	$9437184, %rdx          # imm = 0x900000
+	jne	.LBB2_4
+# BB#9:
+	xorl	%eax, %eax
+	ret
+.Ltmp2:
+	.size	main, .Ltmp2-main
+
+	.type	A, at object               # @A
+	.comm	A,9437184,16
+	.type	B, at object               # @B
+	.comm	B,9437184,16
+	.type	.L.str, at object          # @.str
+	.section	.rodata.str1.1,"aMS", at progbits,1
+.L.str:
+	.asciz	 "%lf "
+	.size	.L.str, 5
+
+	.type	C, at object               # @C
+	.comm	C,9437184,16
+
+	.section	".note.GNU-stack","", at progbits

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.exe
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled%2Bvector%2Bopenmp.exe?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.exe (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.exe Mon May  2 02:48:29 2011 differ

Propchange: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.exe
------------------------------------------------------------------------------
    svn:executable = *

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled%2Bvector%2Bopenmp.ll?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.ll (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.ll Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.s
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled%2Bvector%2Bopenmp.s?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.s (added)
+++ polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector+openmp.s Mon May  2 02:48:29 2011
@@ -0,0 +1,628 @@
+	.file	"matmul.polly.interchanged+tiled+vector+openmp.ll"
+	.text
+	.globl	init_array
+	.align	16, 0x90
+	.type	init_array, at function
+init_array:                             # @init_array
+# BB#0:                                 # %pollyBB
+	pushq	%rbx
+	subq	$16, %rsp
+	movq	$A, (%rsp)
+	movq	$B, 8(%rsp)
+	movl	$init_array.omp_subfn, %edi
+	leaq	(%rsp), %rbx
+	xorl	%edx, %edx
+	xorl	%ecx, %ecx
+	movl	$1536, %r8d             # imm = 0x600
+	movl	$1, %r9d
+	movq	%rbx, %rsi
+	callq	GOMP_parallel_loop_runtime_start
+	movq	%rbx, %rdi
+	callq	init_array.omp_subfn
+	callq	GOMP_parallel_end
+	addq	$16, %rsp
+	popq	%rbx
+	ret
+.Ltmp0:
+	.size	init_array, .Ltmp0-init_array
+
+	.globl	print_array
+	.align	16, 0x90
+	.type	print_array, at function
+print_array:                            # @print_array
+# BB#0:
+	pushq	%r14
+	pushq	%rbx
+	pushq	%rax
+	movq	$-9437184, %rbx         # imm = 0xFFFFFFFFFF700000
+	.align	16, 0x90
+.LBB1_1:                                # %.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB1_2 Depth 2
+	xorl	%r14d, %r14d
+	movq	stdout(%rip), %rdi
+	.align	16, 0x90
+.LBB1_2:                                #   Parent Loop BB1_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movss	C+9437184(%rbx,%r14,4), %xmm0
+	cvtss2sd	%xmm0, %xmm0
+	movl	$.L.str, %esi
+	movb	$1, %al
+	callq	fprintf
+	movslq	%r14d, %rax
+	imulq	$1717986919, %rax, %rcx # imm = 0x66666667
+	movq	%rcx, %rdx
+	shrq	$63, %rdx
+	sarq	$37, %rcx
+	addl	%edx, %ecx
+	imull	$80, %ecx, %ecx
+	subl	%ecx, %eax
+	cmpl	$79, %eax
+	jne	.LBB1_4
+# BB#3:                                 #   in Loop: Header=BB1_2 Depth=2
+	movq	stdout(%rip), %rsi
+	movl	$10, %edi
+	callq	fputc
+.LBB1_4:                                #   in Loop: Header=BB1_2 Depth=2
+	incq	%r14
+	movq	stdout(%rip), %rsi
+	cmpq	$1536, %r14             # imm = 0x600
+	movq	%rsi, %rdi
+	jne	.LBB1_2
+# BB#5:                                 #   in Loop: Header=BB1_1 Depth=1
+	movl	$10, %edi
+	callq	fputc
+	addq	$6144, %rbx             # imm = 0x1800
+	jne	.LBB1_1
+# BB#6:
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%r14
+	ret
+.Ltmp1:
+	.size	print_array, .Ltmp1-print_array
+
+	.globl	main
+	.align	16, 0x90
+	.type	main, at function
+main:                                   # @main
+# BB#0:                                 # %pollyBB
+	pushq	%rbp
+	movq	%rsp, %rbp
+	pushq	%r15
+	pushq	%r14
+	pushq	%r13
+	pushq	%r12
+	pushq	%rbx
+	subq	$56, %rsp
+	movq	$A, -72(%rbp)
+	movq	$B, -64(%rbp)
+	movl	$init_array.omp_subfn, %edi
+	leaq	-72(%rbp), %rbx
+	movq	%rbx, %rsi
+	xorl	%edx, %edx
+	xorl	%ecx, %ecx
+	movl	$1536, %r8d             # imm = 0x600
+	movl	$1, %r9d
+	callq	GOMP_parallel_loop_runtime_start
+	movq	%rbx, %rdi
+	callq	init_array.omp_subfn
+	callq	GOMP_parallel_end
+	movl	$main.omp_subfn, %edi
+	leaq	-96(%rbp), %rsi
+	movq	$C, -96(%rbp)
+	movq	$A, -88(%rbp)
+	movq	$B, -80(%rbp)
+	xorl	%edx, %edx
+	xorl	%ecx, %ecx
+	movl	$1536, %r8d             # imm = 0x600
+	movl	$1, %r9d
+	callq	GOMP_parallel_loop_runtime_start
+	leaq	-48(%rbp), %rdi
+	leaq	-56(%rbp), %rsi
+	callq	GOMP_loop_runtime_next
+	testb	$1, %al
+	je	.LBB2_6
+# BB#1:
+	leaq	-48(%rbp), %rbx
+	leaq	-56(%rbp), %r14
+	.align	16, 0x90
+.LBB2_3:                                # %omp.loadIVBounds.i
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_5 Depth 2
+	movq	-56(%rbp), %r15
+	decq	%r15
+	movq	-48(%rbp), %r12
+	cmpq	%r15, %r12
+	jg	.LBB2_2
+# BB#4:                                 # %polly.loop_header2.preheader.lr.ph.i
+                                        #   in Loop: Header=BB2_3 Depth=1
+	leaq	(%r12,%r12,2), %rax
+	shlq	$11, %rax
+	leaq	C(%rax), %r13
+	.align	16, 0x90
+.LBB2_5:                                # %polly.loop_header2.preheader.i
+                                        #   Parent Loop BB2_3 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movq	%r13, %rdi
+	xorl	%esi, %esi
+	movl	$6144, %edx             # imm = 0x1800
+	callq	memset
+	addq	$6144, %r13             # imm = 0x1800
+	incq	%r12
+	cmpq	%r15, %r12
+	jle	.LBB2_5
+.LBB2_2:                                # %omp.checkNext.loopexit.i
+                                        #   in Loop: Header=BB2_3 Depth=1
+	movq	%rbx, %rdi
+	movq	%r14, %rsi
+	callq	GOMP_loop_runtime_next
+	testb	$1, %al
+	jne	.LBB2_3
+.LBB2_6:                                # %main.omp_subfn.exit
+	callq	GOMP_loop_end_nowait
+	callq	GOMP_parallel_end
+	movq	%rsp, %rax
+	leaq	-32(%rax), %rbx
+	movl	$main.omp_subfn1, %edi
+	xorl	%ecx, %ecx
+	movl	$1536, %r8d             # imm = 0x600
+	movl	$64, %r9d
+	movq	%rbx, %rsp
+	movq	$C, -32(%rax)
+	movq	$A, -24(%rax)
+	movq	$B, -16(%rax)
+	movq	%rbx, %rsi
+	xorl	%edx, %edx
+	callq	GOMP_parallel_loop_runtime_start
+	movq	%rbx, %rdi
+	callq	main.omp_subfn1
+	callq	GOMP_parallel_end
+	xorl	%eax, %eax
+	leaq	-40(%rbp), %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%r14
+	popq	%r15
+	popq	%rbp
+	ret
+.Ltmp2:
+	.size	main, .Ltmp2-main
+
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI3_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.align	16, 0x90
+	.type	init_array.omp_subfn, at function
+init_array.omp_subfn:                   # @init_array.omp_subfn
+.Leh_func_begin3:
+.Ltmp6:
+	.cfi_startproc
+# BB#0:                                 # %omp.setup
+	pushq	%r14
+.Ltmp7:
+	.cfi_def_cfa_offset 16
+	pushq	%rbx
+.Ltmp8:
+	.cfi_def_cfa_offset 24
+	subq	$24, %rsp
+.Ltmp9:
+	.cfi_def_cfa_offset 48
+.Ltmp10:
+	.cfi_offset 3, -24
+.Ltmp11:
+	.cfi_offset 14, -16
+	leaq	16(%rsp), %rdi
+	leaq	8(%rsp), %rsi
+	callq	GOMP_loop_runtime_next
+	testb	$1, %al
+	je	.LBB3_2
+# BB#1:
+	leaq	16(%rsp), %rbx
+	leaq	8(%rsp), %r14
+	jmp	.LBB3_4
+.LBB3_2:                                # %omp.exit
+	callq	GOMP_loop_end_nowait
+	addq	$24, %rsp
+	popq	%rbx
+	popq	%r14
+	ret
+	.align	16, 0x90
+.LBB3_3:                                # %omp.checkNext.loopexit
+                                        #   in Loop: Header=BB3_4 Depth=1
+	movq	%rbx, %rdi
+	movq	%r14, %rsi
+	callq	GOMP_loop_runtime_next
+	testb	$1, %al
+	je	.LBB3_2
+.LBB3_4:                                # %omp.loadIVBounds
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB3_7 Depth 2
+                                        #       Child Loop BB3_8 Depth 3
+	movq	8(%rsp), %rax
+	decq	%rax
+	movq	16(%rsp), %rcx
+	cmpq	%rax, %rcx
+	jg	.LBB3_3
+# BB#5:                                 # %polly.loop_header2.preheader.lr.ph
+                                        #   in Loop: Header=BB3_4 Depth=1
+	movq	%rcx, %rdx
+	shlq	$11, %rdx
+	leaq	(%rdx,%rdx,2), %rdx
+	jmp	.LBB3_7
+	.align	16, 0x90
+.LBB3_6:                                # %polly.loop_header.loopexit
+                                        #   in Loop: Header=BB3_7 Depth=2
+	addq	$6144, %rdx             # imm = 0x1800
+	incq	%rcx
+	cmpq	%rax, %rcx
+	jg	.LBB3_3
+.LBB3_7:                                # %polly.loop_header2.preheader
+                                        #   Parent Loop BB3_4 Depth=1
+                                        # =>  This Loop Header: Depth=2
+                                        #       Child Loop BB3_8 Depth 3
+	movq	$-1536, %rsi            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%edi, %edi
+	.align	16, 0x90
+.LBB3_8:                                # %polly.loop_body3
+                                        #   Parent Loop BB3_4 Depth=1
+                                        #     Parent Loop BB3_7 Depth=2
+                                        # =>    This Inner Loop Header: Depth=3
+	movl	%edi, %r8d
+	sarl	$31, %r8d
+	shrl	$22, %r8d
+	addl	%edi, %r8d
+	andl	$-1024, %r8d            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%r8d
+	leal	1(%rdi,%r8), %r8d
+	cvtsi2sd	%r8d, %xmm0
+	mulsd	.LCPI3_0(%rip), %xmm0
+	cvtsd2ss	%xmm0, %xmm0
+	movss	%xmm0, A+6144(%rdx,%rsi,4)
+	movss	%xmm0, B+6144(%rdx,%rsi,4)
+	addl	%ecx, %edi
+	incq	%rsi
+	jne	.LBB3_8
+	jmp	.LBB3_6
+.Ltmp12:
+	.size	init_array.omp_subfn, .Ltmp12-init_array.omp_subfn
+.Ltmp13:
+	.cfi_endproc
+.Leh_func_end3:
+
+	.align	16, 0x90
+	.type	main.omp_subfn, at function
+main.omp_subfn:                         # @main.omp_subfn
+.Leh_func_begin4:
+.Ltmp20:
+	.cfi_startproc
+# BB#0:                                 # %omp.setup
+	pushq	%r15
+.Ltmp21:
+	.cfi_def_cfa_offset 16
+	pushq	%r14
+.Ltmp22:
+	.cfi_def_cfa_offset 24
+	pushq	%r13
+.Ltmp23:
+	.cfi_def_cfa_offset 32
+	pushq	%r12
+.Ltmp24:
+	.cfi_def_cfa_offset 40
+	pushq	%rbx
+.Ltmp25:
+	.cfi_def_cfa_offset 48
+	subq	$16, %rsp
+.Ltmp26:
+	.cfi_def_cfa_offset 64
+.Ltmp27:
+	.cfi_offset 3, -48
+.Ltmp28:
+	.cfi_offset 12, -40
+.Ltmp29:
+	.cfi_offset 13, -32
+.Ltmp30:
+	.cfi_offset 14, -24
+.Ltmp31:
+	.cfi_offset 15, -16
+	leaq	8(%rsp), %rdi
+	leaq	(%rsp), %rsi
+	callq	GOMP_loop_runtime_next
+	testb	$1, %al
+	je	.LBB4_2
+# BB#1:
+	leaq	8(%rsp), %rbx
+	leaq	(%rsp), %r14
+	jmp	.LBB4_4
+.LBB4_2:                                # %omp.exit
+	callq	GOMP_loop_end_nowait
+	addq	$16, %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%r14
+	popq	%r15
+	ret
+	.align	16, 0x90
+.LBB4_3:                                # %omp.checkNext.loopexit
+                                        #   in Loop: Header=BB4_4 Depth=1
+	movq	%rbx, %rdi
+	movq	%r14, %rsi
+	callq	GOMP_loop_runtime_next
+	testb	$1, %al
+	je	.LBB4_2
+.LBB4_4:                                # %omp.loadIVBounds
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB4_6 Depth 2
+	movq	(%rsp), %r15
+	decq	%r15
+	movq	8(%rsp), %r12
+	cmpq	%r15, %r12
+	jg	.LBB4_3
+# BB#5:                                 # %polly.loop_header2.preheader.lr.ph
+                                        #   in Loop: Header=BB4_4 Depth=1
+	leaq	(%r12,%r12,2), %rax
+	shlq	$11, %rax
+	leaq	C(%rax), %r13
+	.align	16, 0x90
+.LBB4_6:                                # %polly.loop_header2.preheader
+                                        #   Parent Loop BB4_4 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movq	%r13, %rdi
+	xorl	%esi, %esi
+	movl	$6144, %edx             # imm = 0x1800
+	callq	memset
+	addq	$6144, %r13             # imm = 0x1800
+	incq	%r12
+	cmpq	%r15, %r12
+	jle	.LBB4_6
+	jmp	.LBB4_3
+.Ltmp32:
+	.size	main.omp_subfn, .Ltmp32-main.omp_subfn
+.Ltmp33:
+	.cfi_endproc
+.Leh_func_end4:
+
+	.align	16, 0x90
+	.type	main.omp_subfn1, at function
+main.omp_subfn1:                        # @main.omp_subfn1
+.Leh_func_begin5:
+.Ltmp41:
+	.cfi_startproc
+# BB#0:                                 # %omp.setup
+	pushq	%rbp
+.Ltmp42:
+	.cfi_def_cfa_offset 16
+	pushq	%r15
+.Ltmp43:
+	.cfi_def_cfa_offset 24
+	pushq	%r14
+.Ltmp44:
+	.cfi_def_cfa_offset 32
+	pushq	%r13
+.Ltmp45:
+	.cfi_def_cfa_offset 40
+	pushq	%r12
+.Ltmp46:
+	.cfi_def_cfa_offset 48
+	pushq	%rbx
+.Ltmp47:
+	.cfi_def_cfa_offset 56
+	subq	$40, %rsp
+.Ltmp48:
+	.cfi_def_cfa_offset 96
+.Ltmp49:
+	.cfi_offset 3, -56
+.Ltmp50:
+	.cfi_offset 12, -48
+.Ltmp51:
+	.cfi_offset 13, -40
+.Ltmp52:
+	.cfi_offset 14, -32
+.Ltmp53:
+	.cfi_offset 15, -24
+.Ltmp54:
+	.cfi_offset 6, -16
+	leaq	32(%rsp), %rdi
+	leaq	24(%rsp), %rsi
+	jmp	.LBB5_1
+	.align	16, 0x90
+.LBB5_4:                                # %omp.loadIVBounds
+                                        #   in Loop: Header=BB5_1 Depth=1
+	movq	24(%rsp), %rax
+	decq	%rax
+	movq	%rax, (%rsp)            # 8-byte Spill
+	movq	32(%rsp), %rcx
+	cmpq	%rax, %rcx
+	jg	.LBB5_3
+# BB#5:                                 # %polly.loop_header2.preheader.lr.ph
+                                        #   in Loop: Header=BB5_1 Depth=1
+	leaq	(%rcx,%rcx,2), %rax
+	movq	%rcx, %rdx
+	shlq	$9, %rdx
+	leaq	(%rdx,%rdx,2), %rdx
+	movq	%rdx, 16(%rsp)          # 8-byte Spill
+	shlq	$11, %rax
+	leaq	A(%rax), %rax
+	movq	%rax, 8(%rsp)           # 8-byte Spill
+	jmp	.LBB5_7
+	.align	16, 0x90
+.LBB5_6:                                # %polly.loop_header.loopexit
+                                        #   in Loop: Header=BB5_7 Depth=2
+	addq	$98304, 16(%rsp)        # 8-byte Folded Spill
+                                        # imm = 0x18000
+	addq	$393216, 8(%rsp)        # 8-byte Folded Spill
+                                        # imm = 0x60000
+	addq	$64, %rcx
+	cmpq	(%rsp), %rcx            # 8-byte Folded Reload
+	jg	.LBB5_3
+.LBB5_7:                                # %polly.loop_header2.preheader
+                                        #   Parent Loop BB5_1 Depth=1
+                                        # =>  This Loop Header: Depth=2
+                                        #       Child Loop BB5_9 Depth 3
+                                        #         Child Loop BB5_11 Depth 4
+                                        #           Child Loop BB5_14 Depth 5
+                                        #             Child Loop BB5_18 Depth 6
+                                        #               Child Loop BB5_19 Depth 7
+	leaq	63(%rcx), %rax
+	xorl	%edx, %edx
+	jmp	.LBB5_9
+	.align	16, 0x90
+.LBB5_8:                                # %polly.loop_header2.loopexit
+                                        #   in Loop: Header=BB5_9 Depth=3
+	addq	$64, %rdx
+	cmpq	$1536, %rdx             # imm = 0x600
+	je	.LBB5_6
+.LBB5_9:                                # %polly.loop_header7.preheader
+                                        #   Parent Loop BB5_1 Depth=1
+                                        #     Parent Loop BB5_7 Depth=2
+                                        # =>    This Loop Header: Depth=3
+                                        #         Child Loop BB5_11 Depth 4
+                                        #           Child Loop BB5_14 Depth 5
+                                        #             Child Loop BB5_18 Depth 6
+                                        #               Child Loop BB5_19 Depth 7
+	movq	16(%rsp), %rsi          # 8-byte Reload
+	leaq	(%rsi,%rdx), %rsi
+	leaq	63(%rdx), %rdi
+	xorl	%r8d, %r8d
+	movq	8(%rsp), %r9            # 8-byte Reload
+	movq	%rdx, %r10
+	jmp	.LBB5_11
+	.align	16, 0x90
+.LBB5_10:                               # %polly.loop_header7.loopexit
+                                        #   in Loop: Header=BB5_11 Depth=4
+	addq	$256, %r9               # imm = 0x100
+	addq	$98304, %r10            # imm = 0x18000
+	addq	$64, %r8
+	cmpq	$1536, %r8              # imm = 0x600
+	je	.LBB5_8
+.LBB5_11:                               # %polly.loop_body8
+                                        #   Parent Loop BB5_1 Depth=1
+                                        #     Parent Loop BB5_7 Depth=2
+                                        #       Parent Loop BB5_9 Depth=3
+                                        # =>      This Loop Header: Depth=4
+                                        #           Child Loop BB5_14 Depth 5
+                                        #             Child Loop BB5_18 Depth 6
+                                        #               Child Loop BB5_19 Depth 7
+	movabsq	$9223372036854775744, %r11 # imm = 0x7FFFFFFFFFFFFFC0
+	cmpq	%r11, %rcx
+	jg	.LBB5_10
+# BB#12:                                # %polly.loop_body13.lr.ph
+                                        #   in Loop: Header=BB5_11 Depth=4
+	leaq	63(%r8), %r11
+	movq	%rcx, %rbx
+	movq	%rsi, %r14
+	movq	%r9, %r15
+	jmp	.LBB5_14
+	.align	16, 0x90
+.LBB5_13:                               # %polly.loop_header12.loopexit
+                                        #   in Loop: Header=BB5_14 Depth=5
+	addq	$1536, %r14             # imm = 0x600
+	addq	$6144, %r15             # imm = 0x1800
+	incq	%rbx
+	cmpq	%rax, %rbx
+	jg	.LBB5_10
+.LBB5_14:                               # %polly.loop_body13
+                                        #   Parent Loop BB5_1 Depth=1
+                                        #     Parent Loop BB5_7 Depth=2
+                                        #       Parent Loop BB5_9 Depth=3
+                                        #         Parent Loop BB5_11 Depth=4
+                                        # =>        This Loop Header: Depth=5
+                                        #             Child Loop BB5_18 Depth 6
+                                        #               Child Loop BB5_19 Depth 7
+	cmpq	%r11, %r8
+	jg	.LBB5_13
+# BB#15:                                # %polly.loop_body13
+                                        #   in Loop: Header=BB5_14 Depth=5
+	cmpq	%rdi, %rdx
+	jg	.LBB5_13
+# BB#16:                                # %polly.loop_body23.lr.ph.preheader
+                                        #   in Loop: Header=BB5_14 Depth=5
+	xorl	%r12d, %r12d
+	movq	%r10, %r13
+	jmp	.LBB5_18
+	.align	16, 0x90
+.LBB5_17:                               # %polly.loop_header17.loopexit
+                                        #   in Loop: Header=BB5_18 Depth=6
+	addq	$1536, %r13             # imm = 0x600
+	incq	%r12
+	cmpq	$64, %r12
+	je	.LBB5_13
+.LBB5_18:                               # %polly.loop_body23.lr.ph
+                                        #   Parent Loop BB5_1 Depth=1
+                                        #     Parent Loop BB5_7 Depth=2
+                                        #       Parent Loop BB5_9 Depth=3
+                                        #         Parent Loop BB5_11 Depth=4
+                                        #           Parent Loop BB5_14 Depth=5
+                                        # =>          This Loop Header: Depth=6
+                                        #               Child Loop BB5_19 Depth 7
+	movss	(%r15,%r12,4), %xmm0
+	pshufd	$0, %xmm0, %xmm0        # xmm0 = xmm0[0,0,0,0]
+	xorl	%ebp, %ebp
+	.align	16, 0x90
+.LBB5_19:                               # %polly.loop_body23
+                                        #   Parent Loop BB5_1 Depth=1
+                                        #     Parent Loop BB5_7 Depth=2
+                                        #       Parent Loop BB5_9 Depth=3
+                                        #         Parent Loop BB5_11 Depth=4
+                                        #           Parent Loop BB5_14 Depth=5
+                                        #             Parent Loop BB5_18 Depth=6
+                                        # =>            This Inner Loop Header: Depth=7
+	movaps	B(%rbp,%r13,4), %xmm1
+	mulps	%xmm0, %xmm1
+	addps	C(%rbp,%r14,4), %xmm1
+	movaps	%xmm1, C(%rbp,%r14,4)
+	addq	$16, %rbp
+	cmpq	$256, %rbp              # imm = 0x100
+	jne	.LBB5_19
+	jmp	.LBB5_17
+.LBB5_3:                                # %omp.checkNext.loopexit
+                                        #   in Loop: Header=BB5_1 Depth=1
+	leaq	32(%rsp), %rax
+	movq	%rax, %rdi
+	leaq	24(%rsp), %rax
+	movq	%rax, %rsi
+.LBB5_1:                                # %omp.setup
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB5_7 Depth 2
+                                        #       Child Loop BB5_9 Depth 3
+                                        #         Child Loop BB5_11 Depth 4
+                                        #           Child Loop BB5_14 Depth 5
+                                        #             Child Loop BB5_18 Depth 6
+                                        #               Child Loop BB5_19 Depth 7
+	callq	GOMP_loop_runtime_next
+	testb	$1, %al
+	jne	.LBB5_4
+# BB#2:                                 # %omp.exit
+	callq	GOMP_loop_end_nowait
+	addq	$40, %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%r14
+	popq	%r15
+	popq	%rbp
+	ret
+.Ltmp55:
+	.size	main.omp_subfn1, .Ltmp55-main.omp_subfn1
+.Ltmp56:
+	.cfi_endproc
+.Leh_func_end5:
+
+	.type	A, at object               # @A
+	.comm	A,9437184,16
+	.type	B, at object               # @B
+	.comm	B,9437184,16
+	.type	.L.str, at object          # @.str
+	.section	.rodata.str1.1,"aMS", at progbits,1
+.L.str:
+	.asciz	 "%lf "
+	.size	.L.str, 5
+
+	.type	C, at object               # @C
+	.comm	C,9437184,16
+
+	.section	".note.GNU-stack","", at progbits

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.exe
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled%2Bvector.exe?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.exe (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.exe Mon May  2 02:48:29 2011 differ

Propchange: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.exe
------------------------------------------------------------------------------
    svn:executable = *

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled%2Bvector.ll?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.ll (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.ll Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.s
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled%2Bvector.s?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.s (added)
+++ polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled+vector.s Mon May  2 02:48:29 2011
@@ -0,0 +1,318 @@
+	.file	"matmul.polly.interchanged+tiled+vector.ll"
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI0_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	init_array
+	.align	16, 0x90
+	.type	init_array, at function
+init_array:                             # @init_array
+# BB#0:                                 # %pollyBB
+	xorl	%eax, %eax
+	movsd	.LCPI0_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB0_2:                                # %polly.loop_header1.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB0_3 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB0_3:                                # %polly.loop_body2
+                                        #   Parent Loop BB0_2 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB0_3
+# BB#1:                                 # %polly.loop_header.loopexit
+                                        #   in Loop: Header=BB0_2 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB0_2
+# BB#4:                                 # %polly.after_loop
+	ret
+.Ltmp0:
+	.size	init_array, .Ltmp0-init_array
+
+	.globl	print_array
+	.align	16, 0x90
+	.type	print_array, at function
+print_array:                            # @print_array
+# BB#0:
+	pushq	%r14
+	pushq	%rbx
+	pushq	%rax
+	movq	$-9437184, %rbx         # imm = 0xFFFFFFFFFF700000
+	.align	16, 0x90
+.LBB1_1:                                # %.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB1_2 Depth 2
+	xorl	%r14d, %r14d
+	movq	stdout(%rip), %rdi
+	.align	16, 0x90
+.LBB1_2:                                #   Parent Loop BB1_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movss	C+9437184(%rbx,%r14,4), %xmm0
+	cvtss2sd	%xmm0, %xmm0
+	movl	$.L.str, %esi
+	movb	$1, %al
+	callq	fprintf
+	movslq	%r14d, %rax
+	imulq	$1717986919, %rax, %rcx # imm = 0x66666667
+	movq	%rcx, %rdx
+	shrq	$63, %rdx
+	sarq	$37, %rcx
+	addl	%edx, %ecx
+	imull	$80, %ecx, %ecx
+	subl	%ecx, %eax
+	cmpl	$79, %eax
+	jne	.LBB1_4
+# BB#3:                                 #   in Loop: Header=BB1_2 Depth=2
+	movq	stdout(%rip), %rsi
+	movl	$10, %edi
+	callq	fputc
+.LBB1_4:                                #   in Loop: Header=BB1_2 Depth=2
+	incq	%r14
+	movq	stdout(%rip), %rsi
+	cmpq	$1536, %r14             # imm = 0x600
+	movq	%rsi, %rdi
+	jne	.LBB1_2
+# BB#5:                                 #   in Loop: Header=BB1_1 Depth=1
+	movl	$10, %edi
+	callq	fputc
+	addq	$6144, %rbx             # imm = 0x1800
+	jne	.LBB1_1
+# BB#6:
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%r14
+	ret
+.Ltmp1:
+	.size	print_array, .Ltmp1-print_array
+
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI2_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	main
+	.align	16, 0x90
+	.type	main, at function
+main:                                   # @main
+# BB#0:                                 # %pollyBB
+	pushq	%rbp
+	pushq	%r15
+	pushq	%r14
+	pushq	%r13
+	pushq	%r12
+	pushq	%rbx
+	subq	$24, %rsp
+	xorl	%eax, %eax
+	movsd	.LCPI2_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB2_1:                                # %polly.loop_header1.preheader.i
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_2 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB2_2:                                # %polly.loop_body2.i
+                                        #   Parent Loop BB2_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB2_2
+# BB#3:                                 # %polly.loop_header.loopexit.i
+                                        #   in Loop: Header=BB2_1 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB2_1
+# BB#4:                                 # %polly.loop_header.preheader
+	movl	$C, %edi
+	xorl	%esi, %esi
+	movl	$9437184, %edx          # imm = 0x900000
+	callq	memset
+	xorl	%eax, %eax
+	movq	%rax, 16(%rsp)          # 8-byte Spill
+	movq	%rax, (%rsp)            # 8-byte Spill
+	jmp	.LBB2_6
+	.align	16, 0x90
+.LBB2_5:                                # %polly.loop_header7.loopexit
+                                        #   in Loop: Header=BB2_6 Depth=1
+	addq	$393216, (%rsp)         # 8-byte Folded Spill
+                                        # imm = 0x60000
+	movq	16(%rsp), %rax          # 8-byte Reload
+	addq	$64, %rax
+	movq	%rax, 16(%rsp)          # 8-byte Spill
+	cmpq	$1536, %rax             # imm = 0x600
+	je	.LBB2_7
+.LBB2_6:                                # %polly.loop_header12.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_9 Depth 2
+                                        #       Child Loop BB2_11 Depth 3
+                                        #         Child Loop BB2_14 Depth 4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	movq	16(%rsp), %rax          # 8-byte Reload
+	leaq	63(%rax), %rax
+	movq	(%rsp), %rcx            # 8-byte Reload
+	leaq	A(%rcx), %rdx
+	movq	%rdx, 8(%rsp)           # 8-byte Spill
+	xorl	%edx, %edx
+	jmp	.LBB2_9
+	.align	16, 0x90
+.LBB2_8:                                # %polly.loop_header12.loopexit
+                                        #   in Loop: Header=BB2_9 Depth=2
+	addq	$256, %rcx              # imm = 0x100
+	addq	$64, %rdx
+	cmpq	$1536, %rdx             # imm = 0x600
+	je	.LBB2_5
+.LBB2_9:                                # %polly.loop_header17.preheader
+                                        #   Parent Loop BB2_6 Depth=1
+                                        # =>  This Loop Header: Depth=2
+                                        #       Child Loop BB2_11 Depth 3
+                                        #         Child Loop BB2_14 Depth 4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	leaq	63(%rdx), %rsi
+	xorl	%edi, %edi
+	movq	8(%rsp), %r8            # 8-byte Reload
+	movq	%rdx, %r9
+	jmp	.LBB2_11
+	.align	16, 0x90
+.LBB2_10:                               # %polly.loop_header17.loopexit
+                                        #   in Loop: Header=BB2_11 Depth=3
+	addq	$256, %r8               # imm = 0x100
+	addq	$98304, %r9             # imm = 0x18000
+	addq	$64, %rdi
+	cmpq	$1536, %rdi             # imm = 0x600
+	je	.LBB2_8
+.LBB2_11:                               # %polly.loop_body18
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        # =>    This Loop Header: Depth=3
+                                        #         Child Loop BB2_14 Depth 4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	cmpq	%rax, 16(%rsp)          # 8-byte Folded Reload
+	jg	.LBB2_10
+# BB#12:                                # %polly.loop_body23.lr.ph
+                                        #   in Loop: Header=BB2_11 Depth=3
+	leaq	63(%rdi), %r10
+	xorl	%r11d, %r11d
+	jmp	.LBB2_14
+	.align	16, 0x90
+.LBB2_13:                               # %polly.loop_header22.loopexit
+                                        #   in Loop: Header=BB2_14 Depth=4
+	addq	$6144, %r11             # imm = 0x1800
+	cmpq	$393216, %r11           # imm = 0x60000
+	je	.LBB2_10
+.LBB2_14:                               # %polly.loop_body23
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        #       Parent Loop BB2_11 Depth=3
+                                        # =>      This Loop Header: Depth=4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	cmpq	%r10, %rdi
+	jg	.LBB2_13
+# BB#15:                                # %polly.loop_body23
+                                        #   in Loop: Header=BB2_14 Depth=4
+	cmpq	%rsi, %rdx
+	jg	.LBB2_13
+# BB#16:                                # %polly.loop_body33.lr.ph.preheader
+                                        #   in Loop: Header=BB2_14 Depth=4
+	leaq	(%r8,%r11), %rbx
+	xorl	%r14d, %r14d
+	movq	%r9, %r15
+	movq	%r14, %r12
+	jmp	.LBB2_18
+	.align	16, 0x90
+.LBB2_17:                               # %polly.loop_header27.loopexit
+                                        #   in Loop: Header=BB2_18 Depth=5
+	addq	$1536, %r15             # imm = 0x600
+	incq	%r12
+	cmpq	$64, %r12
+	je	.LBB2_13
+.LBB2_18:                               # %polly.loop_body33.lr.ph
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        #       Parent Loop BB2_11 Depth=3
+                                        #         Parent Loop BB2_14 Depth=4
+                                        # =>        This Loop Header: Depth=5
+                                        #             Child Loop BB2_19 Depth 6
+	movss	(%rbx,%r12,4), %xmm0
+	pshufd	$0, %xmm0, %xmm0        # xmm0 = xmm0[0,0,0,0]
+	movq	%r14, %r13
+	.align	16, 0x90
+.LBB2_19:                               # %polly.loop_body33
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        #       Parent Loop BB2_11 Depth=3
+                                        #         Parent Loop BB2_14 Depth=4
+                                        #           Parent Loop BB2_18 Depth=5
+                                        # =>          This Inner Loop Header: Depth=6
+	movaps	B(%r13,%r15,4), %xmm1
+	mulps	%xmm0, %xmm1
+	leaq	(%r11,%r13), %rbp
+	addps	C(%rcx,%rbp), %xmm1
+	movaps	%xmm1, C(%rcx,%rbp)
+	addq	$16, %r13
+	cmpq	$256, %r13              # imm = 0x100
+	jne	.LBB2_19
+	jmp	.LBB2_17
+.LBB2_7:                                # %polly.after_loop9
+	xorl	%eax, %eax
+	addq	$24, %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%r14
+	popq	%r15
+	popq	%rbp
+	ret
+.Ltmp2:
+	.size	main, .Ltmp2-main
+
+	.type	A, at object               # @A
+	.comm	A,9437184,16
+	.type	B, at object               # @B
+	.comm	B,9437184,16
+	.type	.L.str, at object          # @.str
+	.section	.rodata.str1.1,"aMS", at progbits,1
+.L.str:
+	.asciz	 "%lf "
+	.size	.L.str, 5
+
+	.type	C, at object               # @C
+	.comm	C,9437184,16
+
+	.section	".note.GNU-stack","", at progbits

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.exe
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled.exe?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.exe (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.exe Mon May  2 02:48:29 2011 differ

Propchange: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.exe
------------------------------------------------------------------------------
    svn:executable = *

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled.ll?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.ll (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.ll Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.s
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged%2Btiled.s?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.s (added)
+++ polly/trunk/www/experiments/matmul/matmul.polly.interchanged+tiled.s Mon May  2 02:48:29 2011
@@ -0,0 +1,323 @@
+	.file	"matmul.polly.interchanged+tiled.ll"
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI0_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	init_array
+	.align	16, 0x90
+	.type	init_array, at function
+init_array:                             # @init_array
+# BB#0:                                 # %pollyBB
+	xorl	%eax, %eax
+	movsd	.LCPI0_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB0_2:                                # %polly.loop_header1.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB0_3 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB0_3:                                # %polly.loop_body2
+                                        #   Parent Loop BB0_2 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB0_3
+# BB#1:                                 # %polly.loop_header.loopexit
+                                        #   in Loop: Header=BB0_2 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB0_2
+# BB#4:                                 # %polly.after_loop
+	ret
+.Ltmp0:
+	.size	init_array, .Ltmp0-init_array
+
+	.globl	print_array
+	.align	16, 0x90
+	.type	print_array, at function
+print_array:                            # @print_array
+# BB#0:
+	pushq	%r14
+	pushq	%rbx
+	pushq	%rax
+	movq	$-9437184, %rbx         # imm = 0xFFFFFFFFFF700000
+	.align	16, 0x90
+.LBB1_1:                                # %.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB1_2 Depth 2
+	xorl	%r14d, %r14d
+	movq	stdout(%rip), %rdi
+	.align	16, 0x90
+.LBB1_2:                                #   Parent Loop BB1_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movss	C+9437184(%rbx,%r14,4), %xmm0
+	cvtss2sd	%xmm0, %xmm0
+	movl	$.L.str, %esi
+	movb	$1, %al
+	callq	fprintf
+	movslq	%r14d, %rax
+	imulq	$1717986919, %rax, %rcx # imm = 0x66666667
+	movq	%rcx, %rdx
+	shrq	$63, %rdx
+	sarq	$37, %rcx
+	addl	%edx, %ecx
+	imull	$80, %ecx, %ecx
+	subl	%ecx, %eax
+	cmpl	$79, %eax
+	jne	.LBB1_4
+# BB#3:                                 #   in Loop: Header=BB1_2 Depth=2
+	movq	stdout(%rip), %rsi
+	movl	$10, %edi
+	callq	fputc
+.LBB1_4:                                #   in Loop: Header=BB1_2 Depth=2
+	incq	%r14
+	movq	stdout(%rip), %rsi
+	cmpq	$1536, %r14             # imm = 0x600
+	movq	%rsi, %rdi
+	jne	.LBB1_2
+# BB#5:                                 #   in Loop: Header=BB1_1 Depth=1
+	movl	$10, %edi
+	callq	fputc
+	addq	$6144, %rbx             # imm = 0x1800
+	jne	.LBB1_1
+# BB#6:
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%r14
+	ret
+.Ltmp1:
+	.size	print_array, .Ltmp1-print_array
+
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI2_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	main
+	.align	16, 0x90
+	.type	main, at function
+main:                                   # @main
+# BB#0:                                 # %pollyBB
+	pushq	%rbp
+	pushq	%r15
+	pushq	%r14
+	pushq	%r13
+	pushq	%r12
+	pushq	%rbx
+	subq	$40, %rsp
+	xorl	%eax, %eax
+	movsd	.LCPI2_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB2_1:                                # %polly.loop_header1.preheader.i
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_2 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB2_2:                                # %polly.loop_body2.i
+                                        #   Parent Loop BB2_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB2_2
+# BB#3:                                 # %polly.loop_header.loopexit.i
+                                        #   in Loop: Header=BB2_1 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB2_1
+# BB#4:                                 # %polly.loop_header.preheader
+	movl	$C, %eax
+	movq	%rax, 8(%rsp)           # 8-byte Spill
+	xorl	%esi, %esi
+	movl	$9437184, %edx          # imm = 0x900000
+	movl	$C, %edi
+	callq	memset
+	movl	$A, %eax
+	movq	%rax, 16(%rsp)          # 8-byte Spill
+	movq	$0, 32(%rsp)            # 8-byte Folded Spill
+	jmp	.LBB2_6
+	.align	16, 0x90
+.LBB2_5:                                # %polly.loop_header7.loopexit
+                                        #   in Loop: Header=BB2_6 Depth=1
+	addq	$393216, 16(%rsp)       # 8-byte Folded Spill
+                                        # imm = 0x60000
+	addq	$393216, 8(%rsp)        # 8-byte Folded Spill
+                                        # imm = 0x60000
+	movq	32(%rsp), %rax          # 8-byte Reload
+	addq	$64, %rax
+	movq	%rax, 32(%rsp)          # 8-byte Spill
+	cmpq	$1536, %rax             # imm = 0x600
+	je	.LBB2_7
+.LBB2_6:                                # %polly.loop_header12.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_9 Depth 2
+                                        #       Child Loop BB2_11 Depth 3
+                                        #         Child Loop BB2_14 Depth 4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	movq	32(%rsp), %rax          # 8-byte Reload
+	leaq	63(%rax), %rax
+	movl	$B, %ecx
+	movq	%rcx, 24(%rsp)          # 8-byte Spill
+	xorl	%ecx, %ecx
+	movq	8(%rsp), %rdx           # 8-byte Reload
+	jmp	.LBB2_9
+	.align	16, 0x90
+.LBB2_8:                                # %polly.loop_header12.loopexit
+                                        #   in Loop: Header=BB2_9 Depth=2
+	addq	$256, %rdx              # imm = 0x100
+	addq	$256, 24(%rsp)          # 8-byte Folded Spill
+                                        # imm = 0x100
+	addq	$64, %rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	je	.LBB2_5
+.LBB2_9:                                # %polly.loop_header17.preheader
+                                        #   Parent Loop BB2_6 Depth=1
+                                        # =>  This Loop Header: Depth=2
+                                        #       Child Loop BB2_11 Depth 3
+                                        #         Child Loop BB2_14 Depth 4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	leaq	63(%rcx), %rsi
+	xorl	%edi, %edi
+	movq	16(%rsp), %r8           # 8-byte Reload
+	movq	24(%rsp), %r9           # 8-byte Reload
+	jmp	.LBB2_11
+	.align	16, 0x90
+.LBB2_10:                               # %polly.loop_header17.loopexit
+                                        #   in Loop: Header=BB2_11 Depth=3
+	addq	$256, %r8               # imm = 0x100
+	addq	$393216, %r9            # imm = 0x60000
+	addq	$64, %rdi
+	cmpq	$1536, %rdi             # imm = 0x600
+	je	.LBB2_8
+.LBB2_11:                               # %polly.loop_body18
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        # =>    This Loop Header: Depth=3
+                                        #         Child Loop BB2_14 Depth 4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	cmpq	%rax, 32(%rsp)          # 8-byte Folded Reload
+	jg	.LBB2_10
+# BB#12:                                # %polly.loop_body23.lr.ph
+                                        #   in Loop: Header=BB2_11 Depth=3
+	leaq	63(%rdi), %r10
+	xorl	%r11d, %r11d
+	jmp	.LBB2_14
+	.align	16, 0x90
+.LBB2_13:                               # %polly.loop_header22.loopexit
+                                        #   in Loop: Header=BB2_14 Depth=4
+	addq	$6144, %r11             # imm = 0x1800
+	cmpq	$393216, %r11           # imm = 0x60000
+	je	.LBB2_10
+.LBB2_14:                               # %polly.loop_body23
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        #       Parent Loop BB2_11 Depth=3
+                                        # =>      This Loop Header: Depth=4
+                                        #           Child Loop BB2_18 Depth 5
+                                        #             Child Loop BB2_19 Depth 6
+	cmpq	%r10, %rdi
+	jg	.LBB2_13
+# BB#15:                                # %polly.loop_body23
+                                        #   in Loop: Header=BB2_14 Depth=4
+	cmpq	%rsi, %rcx
+	jg	.LBB2_13
+# BB#16:                                # %polly.loop_body33.lr.ph.preheader
+                                        #   in Loop: Header=BB2_14 Depth=4
+	leaq	(%rdx,%r11), %rbx
+	leaq	(%r8,%r11), %r14
+	xorl	%r15d, %r15d
+	movq	%r9, %r12
+	movq	%r15, %r13
+	jmp	.LBB2_18
+	.align	16, 0x90
+.LBB2_17:                               # %polly.loop_header27.loopexit
+                                        #   in Loop: Header=BB2_18 Depth=5
+	addq	$6144, %r12             # imm = 0x1800
+	incq	%r13
+	cmpq	$64, %r13
+	je	.LBB2_13
+.LBB2_18:                               # %polly.loop_body33.lr.ph
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        #       Parent Loop BB2_11 Depth=3
+                                        #         Parent Loop BB2_14 Depth=4
+                                        # =>        This Loop Header: Depth=5
+                                        #             Child Loop BB2_19 Depth 6
+	movss	(%r14,%r13,4), %xmm0
+	movq	%r15, %rbp
+	.align	16, 0x90
+.LBB2_19:                               # %polly.loop_body33
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        #       Parent Loop BB2_11 Depth=3
+                                        #         Parent Loop BB2_14 Depth=4
+                                        #           Parent Loop BB2_18 Depth=5
+                                        # =>          This Inner Loop Header: Depth=6
+	movss	(%r12,%rbp,4), %xmm1
+	mulss	%xmm0, %xmm1
+	addss	(%rbx,%rbp,4), %xmm1
+	movss	%xmm1, (%rbx,%rbp,4)
+	incq	%rbp
+	cmpq	$64, %rbp
+	jne	.LBB2_19
+	jmp	.LBB2_17
+.LBB2_7:                                # %polly.after_loop9
+	xorl	%eax, %eax
+	addq	$40, %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%r14
+	popq	%r15
+	popq	%rbp
+	ret
+.Ltmp2:
+	.size	main, .Ltmp2-main
+
+	.type	A, at object               # @A
+	.comm	A,9437184,16
+	.type	B, at object               # @B
+	.comm	B,9437184,16
+	.type	.L.str, at object          # @.str
+	.section	.rodata.str1.1,"aMS", at progbits,1
+.L.str:
+	.asciz	 "%lf "
+	.size	.L.str, 5
+
+	.type	C, at object               # @C
+	.comm	C,9437184,16
+
+	.section	".note.GNU-stack","", at progbits

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged.exe
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged.exe?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged.exe (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged.exe Mon May  2 02:48:29 2011 differ

Propchange: polly/trunk/www/experiments/matmul/matmul.polly.interchanged.exe
------------------------------------------------------------------------------
    svn:executable = *

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged.ll?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/matmul.polly.interchanged.ll (added) and polly/trunk/www/experiments/matmul/matmul.polly.interchanged.ll Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/matmul.polly.interchanged.s
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.polly.interchanged.s?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.polly.interchanged.s (added)
+++ polly/trunk/www/experiments/matmul/matmul.polly.interchanged.s Mon May  2 02:48:29 2011
@@ -0,0 +1,217 @@
+	.file	"matmul.polly.interchanged.ll"
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI0_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	init_array
+	.align	16, 0x90
+	.type	init_array, at function
+init_array:                             # @init_array
+# BB#0:                                 # %pollyBB
+	xorl	%eax, %eax
+	movsd	.LCPI0_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB0_2:                                # %polly.loop_header1.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB0_3 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB0_3:                                # %polly.loop_body2
+                                        #   Parent Loop BB0_2 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB0_3
+# BB#1:                                 # %polly.loop_header.loopexit
+                                        #   in Loop: Header=BB0_2 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB0_2
+# BB#4:                                 # %polly.after_loop
+	ret
+.Ltmp0:
+	.size	init_array, .Ltmp0-init_array
+
+	.globl	print_array
+	.align	16, 0x90
+	.type	print_array, at function
+print_array:                            # @print_array
+# BB#0:
+	pushq	%r14
+	pushq	%rbx
+	pushq	%rax
+	movq	$-9437184, %rbx         # imm = 0xFFFFFFFFFF700000
+	.align	16, 0x90
+.LBB1_1:                                # %.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB1_2 Depth 2
+	xorl	%r14d, %r14d
+	movq	stdout(%rip), %rdi
+	.align	16, 0x90
+.LBB1_2:                                #   Parent Loop BB1_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movss	C+9437184(%rbx,%r14,4), %xmm0
+	cvtss2sd	%xmm0, %xmm0
+	movl	$.L.str, %esi
+	movb	$1, %al
+	callq	fprintf
+	movslq	%r14d, %rax
+	imulq	$1717986919, %rax, %rcx # imm = 0x66666667
+	movq	%rcx, %rdx
+	shrq	$63, %rdx
+	sarq	$37, %rcx
+	addl	%edx, %ecx
+	imull	$80, %ecx, %ecx
+	subl	%ecx, %eax
+	cmpl	$79, %eax
+	jne	.LBB1_4
+# BB#3:                                 #   in Loop: Header=BB1_2 Depth=2
+	movq	stdout(%rip), %rsi
+	movl	$10, %edi
+	callq	fputc
+.LBB1_4:                                #   in Loop: Header=BB1_2 Depth=2
+	incq	%r14
+	movq	stdout(%rip), %rsi
+	cmpq	$1536, %r14             # imm = 0x600
+	movq	%rsi, %rdi
+	jne	.LBB1_2
+# BB#5:                                 #   in Loop: Header=BB1_1 Depth=1
+	movl	$10, %edi
+	callq	fputc
+	addq	$6144, %rbx             # imm = 0x1800
+	jne	.LBB1_1
+# BB#6:
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%r14
+	ret
+.Ltmp1:
+	.size	print_array, .Ltmp1-print_array
+
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	8
+.LCPI2_0:
+	.quad	4602678819172646912     # double 5.000000e-01
+	.text
+	.globl	main
+	.align	16, 0x90
+	.type	main, at function
+main:                                   # @main
+# BB#0:                                 # %pollyBB
+	pushq	%rax
+	xorl	%eax, %eax
+	movsd	.LCPI2_0(%rip), %xmm0
+	movq	%rax, %rcx
+	.align	16, 0x90
+.LBB2_1:                                # %polly.loop_header1.preheader.i
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_2 Depth 2
+	movq	$-1536, %rdx            # imm = 0xFFFFFFFFFFFFFA00
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB2_2:                                # %polly.loop_body2.i
+                                        #   Parent Loop BB2_1 Depth=1
+                                        # =>  This Inner Loop Header: Depth=2
+	movl	%esi, %edi
+	sarl	$31, %edi
+	shrl	$22, %edi
+	addl	%esi, %edi
+	andl	$-1024, %edi            # imm = 0xFFFFFFFFFFFFFC00
+	negl	%edi
+	leal	1(%rsi,%rdi), %edi
+	cvtsi2sd	%edi, %xmm1
+	mulsd	%xmm0, %xmm1
+	cvtsd2ss	%xmm1, %xmm1
+	movss	%xmm1, A+6144(%rax,%rdx,4)
+	movss	%xmm1, B+6144(%rax,%rdx,4)
+	addl	%ecx, %esi
+	incq	%rdx
+	jne	.LBB2_2
+# BB#3:                                 # %polly.loop_header.loopexit.i
+                                        #   in Loop: Header=BB2_1 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	incq	%rcx
+	cmpq	$1536, %rcx             # imm = 0x600
+	jne	.LBB2_1
+# BB#4:                                 # %polly.loop_header.preheader
+	movl	$C, %edi
+	xorl	%esi, %esi
+	movl	$9437184, %edx          # imm = 0x900000
+	callq	memset
+	xorl	%eax, %eax
+	jmp	.LBB2_6
+	.align	16, 0x90
+.LBB2_5:                                # %polly.loop_header7.loopexit
+                                        #   in Loop: Header=BB2_6 Depth=1
+	addq	$6144, %rax             # imm = 0x1800
+	cmpq	$9437184, %rax          # imm = 0x900000
+	je	.LBB2_7
+.LBB2_6:                                # %polly.loop_header12.preheader
+                                        # =>This Loop Header: Depth=1
+                                        #     Child Loop BB2_9 Depth 2
+                                        #       Child Loop BB2_10 Depth 3
+	leaq	A(%rax), %rcx
+	movq	$-9437184, %rdx         # imm = 0xFFFFFFFFFF700000
+	jmp	.LBB2_9
+	.align	16, 0x90
+.LBB2_8:                                # %polly.loop_header12.loopexit
+                                        #   in Loop: Header=BB2_9 Depth=2
+	addq	$4, %rcx
+	addq	$6144, %rdx             # imm = 0x1800
+	je	.LBB2_5
+.LBB2_9:                                # %polly.loop_header17.preheader
+                                        #   Parent Loop BB2_6 Depth=1
+                                        # =>  This Loop Header: Depth=2
+                                        #       Child Loop BB2_10 Depth 3
+	movss	(%rcx), %xmm0
+	xorl	%esi, %esi
+	.align	16, 0x90
+.LBB2_10:                               # %polly.loop_body18
+                                        #   Parent Loop BB2_6 Depth=1
+                                        #     Parent Loop BB2_9 Depth=2
+                                        # =>    This Inner Loop Header: Depth=3
+	movss	B+9437184(%rdx,%rsi,4), %xmm1
+	mulss	%xmm0, %xmm1
+	addss	C(%rax,%rsi,4), %xmm1
+	movss	%xmm1, C(%rax,%rsi,4)
+	incq	%rsi
+	cmpq	$1536, %rsi             # imm = 0x600
+	jne	.LBB2_10
+	jmp	.LBB2_8
+.LBB2_7:                                # %polly.after_loop9
+	xorl	%eax, %eax
+	popq	%rdx
+	ret
+.Ltmp2:
+	.size	main, .Ltmp2-main
+
+	.type	A, at object               # @A
+	.comm	A,9437184,16
+	.type	B, at object               # @B
+	.comm	B,9437184,16
+	.type	.L.str, at object          # @.str
+	.section	.rodata.str1.1,"aMS", at progbits,1
+.L.str:
+	.asciz	 "%lf "
+	.size	.L.str, 5
+
+	.type	C, at object               # @C
+	.comm	C,9437184,16
+
+	.section	".note.GNU-stack","", at progbits

Added: polly/trunk/www/experiments/matmul/matmul.preopt.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.preopt.ll?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.preopt.ll (added)
+++ polly/trunk/www/experiments/matmul/matmul.preopt.ll Mon May  2 02:48:29 2011
@@ -0,0 +1,180 @@
+; ModuleID = 'matmul.s'
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-unknown-linux-gnu"
+
+%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
+%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
+
+ at A = common global [1536 x [1536 x float]] zeroinitializer, align 16
+ at B = common global [1536 x [1536 x float]] zeroinitializer, align 16
+ at stdout = external global %struct._IO_FILE*
+ at .str = private unnamed_addr constant [5 x i8] c"%lf \00"
+ at C = common global [1536 x [1536 x float]] zeroinitializer, align 16
+ at .str1 = private unnamed_addr constant [2 x i8] c"\0A\00"
+
+define void @init_array() nounwind {
+; <label>:0
+  br label %1
+
+; <label>:1                                       ; preds = %18, %0
+  %2 = phi i64 [ %indvar.next2, %18 ], [ 0, %0 ]
+  %exitcond5 = icmp ne i64 %2, 1536
+  br i1 %exitcond5, label %3, label %19
+
+; <label>:3                                       ; preds = %1
+  br label %4
+
+; <label>:4                                       ; preds = %16, %3
+  %indvar = phi i64 [ %indvar.next, %16 ], [ 0, %3 ]
+  %scevgep4 = getelementptr [1536 x [1536 x float]]* @A, i64 0, i64 %2, i64 %indvar
+  %scevgep = getelementptr [1536 x [1536 x float]]* @B, i64 0, i64 %2, i64 %indvar
+  %tmp = mul i64 %2, %indvar
+  %tmp3 = trunc i64 %tmp to i32
+  %exitcond = icmp ne i64 %indvar, 1536
+  br i1 %exitcond, label %5, label %17
+
+; <label>:5                                       ; preds = %4
+  %6 = srem i32 %tmp3, 1024
+  %7 = add nsw i32 1, %6
+  %8 = sitofp i32 %7 to double
+  %9 = fdiv double %8, 2.000000e+00
+  %10 = fptrunc double %9 to float
+  store float %10, float* %scevgep4
+  %11 = srem i32 %tmp3, 1024
+  %12 = add nsw i32 1, %11
+  %13 = sitofp i32 %12 to double
+  %14 = fdiv double %13, 2.000000e+00
+  %15 = fptrunc double %14 to float
+  store float %15, float* %scevgep
+  br label %16
+
+; <label>:16                                      ; preds = %5
+  %indvar.next = add i64 %indvar, 1
+  br label %4
+
+; <label>:17                                      ; preds = %4
+  br label %18
+
+; <label>:18                                      ; preds = %17
+  %indvar.next2 = add i64 %2, 1
+  br label %1
+
+; <label>:19                                      ; preds = %1
+  ret void
+}
+
+define void @print_array() nounwind {
+; <label>:0
+  br label %1
+
+; <label>:1                                       ; preds = %19, %0
+  %indvar1 = phi i64 [ %indvar.next2, %19 ], [ 0, %0 ]
+  %exitcond3 = icmp ne i64 %indvar1, 1536
+  br i1 %exitcond3, label %2, label %20
+
+; <label>:2                                       ; preds = %1
+  br label %3
+
+; <label>:3                                       ; preds = %15, %2
+  %indvar = phi i64 [ %indvar.next, %15 ], [ 0, %2 ]
+  %scevgep = getelementptr [1536 x [1536 x float]]* @C, i64 0, i64 %indvar1, i64 %indvar
+  %j.0 = trunc i64 %indvar to i32
+  %exitcond = icmp ne i64 %indvar, 1536
+  br i1 %exitcond, label %4, label %16
+
+; <label>:4                                       ; preds = %3
+  %5 = load %struct._IO_FILE** @stdout, align 8
+  %6 = load float* %scevgep
+  %7 = fpext float %6 to double
+  %8 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %5, i8* getelementptr inbounds ([5 x i8]* @.str, i32 0, i32 0), double %7)
+  %9 = srem i32 %j.0, 80
+  %10 = icmp eq i32 %9, 79
+  br i1 %10, label %11, label %14
+
+; <label>:11                                      ; preds = %4
+  %12 = load %struct._IO_FILE** @stdout, align 8
+  %13 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %12, i8* getelementptr inbounds ([2 x i8]* @.str1, i32 0, i32 0))
+  br label %14
+
+; <label>:14                                      ; preds = %11, %4
+  br label %15
+
+; <label>:15                                      ; preds = %14
+  %indvar.next = add i64 %indvar, 1
+  br label %3
+
+; <label>:16                                      ; preds = %3
+  %17 = load %struct._IO_FILE** @stdout, align 8
+  %18 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %17, i8* getelementptr inbounds ([2 x i8]* @.str1, i32 0, i32 0))
+  br label %19
+
+; <label>:19                                      ; preds = %16
+  %indvar.next2 = add i64 %indvar1, 1
+  br label %1
+
+; <label>:20                                      ; preds = %1
+  ret void
+}
+
+declare i32 @fprintf(%struct._IO_FILE*, i8*, ...)
+
+define i32 @main() nounwind {
+; <label>:0
+  call void @init_array()
+  br label %1
+
+; <label>:1                                       ; preds = %16, %0
+  %indvar3 = phi i64 [ %indvar.next4, %16 ], [ 0, %0 ]
+  %exitcond9 = icmp ne i64 %indvar3, 1536
+  br i1 %exitcond9, label %2, label %17
+
+; <label>:2                                       ; preds = %1
+  br label %3
+
+; <label>:3                                       ; preds = %14, %2
+  %indvar1 = phi i64 [ %indvar.next2, %14 ], [ 0, %2 ]
+  %scevgep8 = getelementptr [1536 x [1536 x float]]* @C, i64 0, i64 %indvar3, i64 %indvar1
+  %exitcond6 = icmp ne i64 %indvar1, 1536
+  br i1 %exitcond6, label %4, label %15
+
+; <label>:4                                       ; preds = %3
+  store float 0.000000e+00, float* %scevgep8
+  br label %5
+
+; <label>:5                                       ; preds = %12, %4
+  %indvar = phi i64 [ %indvar.next, %12 ], [ 0, %4 ]
+  %scevgep5 = getelementptr [1536 x [1536 x float]]* @A, i64 0, i64 %indvar3, i64 %indvar
+  %scevgep = getelementptr [1536 x [1536 x float]]* @B, i64 0, i64 %indvar, i64 %indvar1
+  %exitcond = icmp ne i64 %indvar, 1536
+  br i1 %exitcond, label %6, label %13
+
+; <label>:6                                       ; preds = %5
+  %7 = load float* %scevgep8
+  %8 = load float* %scevgep5
+  %9 = load float* %scevgep
+  %10 = fmul float %8, %9
+  %11 = fadd float %7, %10
+  store float %11, float* %scevgep8
+  br label %12
+
+; <label>:12                                      ; preds = %6
+  %indvar.next = add i64 %indvar, 1
+  br label %5
+
+; <label>:13                                      ; preds = %5
+  br label %14
+
+; <label>:14                                      ; preds = %13
+  %indvar.next2 = add i64 %indvar1, 1
+  br label %3
+
+; <label>:15                                      ; preds = %3
+  br label %16
+
+; <label>:16                                      ; preds = %15
+  %indvar.next4 = add i64 %indvar3, 1
+  br label %1
+
+; <label>:17                                      ; preds = %1
+  ret i32 0
+}

Added: polly/trunk/www/experiments/matmul/matmul.s
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/matmul.s?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/matmul.s (added)
+++ polly/trunk/www/experiments/matmul/matmul.s Mon May  2 02:48:29 2011
@@ -0,0 +1,255 @@
+; ModuleID = 'matmul.c'
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-unknown-linux-gnu"
+
+%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
+%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
+
+ at A = common global [1536 x [1536 x float]] zeroinitializer, align 16
+ at B = common global [1536 x [1536 x float]] zeroinitializer, align 16
+ at stdout = external global %struct._IO_FILE*
+ at .str = private unnamed_addr constant [5 x i8] c"%lf \00"
+ at C = common global [1536 x [1536 x float]] zeroinitializer, align 16
+ at .str1 = private unnamed_addr constant [2 x i8] c"\0A\00"
+
+define void @init_array() nounwind {
+  %i = alloca i32, align 4
+  %j = alloca i32, align 4
+  store i32 0, i32* %i, align 4
+  br label %1
+
+; <label>:1                                       ; preds = %41, %0
+  %2 = load i32* %i, align 4
+  %3 = icmp slt i32 %2, 1536
+  br i1 %3, label %4, label %44
+
+; <label>:4                                       ; preds = %1
+  store i32 0, i32* %j, align 4
+  br label %5
+
+; <label>:5                                       ; preds = %37, %4
+  %6 = load i32* %j, align 4
+  %7 = icmp slt i32 %6, 1536
+  br i1 %7, label %8, label %40
+
+; <label>:8                                       ; preds = %5
+  %9 = load i32* %i, align 4
+  %10 = load i32* %j, align 4
+  %11 = mul nsw i32 %9, %10
+  %12 = srem i32 %11, 1024
+  %13 = add nsw i32 1, %12
+  %14 = sitofp i32 %13 to double
+  %15 = fdiv double %14, 2.000000e+00
+  %16 = fptrunc double %15 to float
+  %17 = load i32* %j, align 4
+  %18 = sext i32 %17 to i64
+  %19 = load i32* %i, align 4
+  %20 = sext i32 %19 to i64
+  %21 = getelementptr inbounds [1536 x [1536 x float]]* @A, i32 0, i64 %20
+  %22 = getelementptr inbounds [1536 x float]* %21, i32 0, i64 %18
+  store float %16, float* %22
+  %23 = load i32* %i, align 4
+  %24 = load i32* %j, align 4
+  %25 = mul nsw i32 %23, %24
+  %26 = srem i32 %25, 1024
+  %27 = add nsw i32 1, %26
+  %28 = sitofp i32 %27 to double
+  %29 = fdiv double %28, 2.000000e+00
+  %30 = fptrunc double %29 to float
+  %31 = load i32* %j, align 4
+  %32 = sext i32 %31 to i64
+  %33 = load i32* %i, align 4
+  %34 = sext i32 %33 to i64
+  %35 = getelementptr inbounds [1536 x [1536 x float]]* @B, i32 0, i64 %34
+  %36 = getelementptr inbounds [1536 x float]* %35, i32 0, i64 %32
+  store float %30, float* %36
+  br label %37
+
+; <label>:37                                      ; preds = %8
+  %38 = load i32* %j, align 4
+  %39 = add nsw i32 %38, 1
+  store i32 %39, i32* %j, align 4
+  br label %5
+
+; <label>:40                                      ; preds = %5
+  br label %41
+
+; <label>:41                                      ; preds = %40
+  %42 = load i32* %i, align 4
+  %43 = add nsw i32 %42, 1
+  store i32 %43, i32* %i, align 4
+  br label %1
+
+; <label>:44                                      ; preds = %1
+  ret void
+}
+
+define void @print_array() nounwind {
+  %i = alloca i32, align 4
+  %j = alloca i32, align 4
+  store i32 0, i32* %i, align 4
+  br label %1
+
+; <label>:1                                       ; preds = %32, %0
+  %2 = load i32* %i, align 4
+  %3 = icmp slt i32 %2, 1536
+  br i1 %3, label %4, label %35
+
+; <label>:4                                       ; preds = %1
+  store i32 0, i32* %j, align 4
+  br label %5
+
+; <label>:5                                       ; preds = %26, %4
+  %6 = load i32* %j, align 4
+  %7 = icmp slt i32 %6, 1536
+  br i1 %7, label %8, label %29
+
+; <label>:8                                       ; preds = %5
+  %9 = load %struct._IO_FILE** @stdout, align 8
+  %10 = load i32* %j, align 4
+  %11 = sext i32 %10 to i64
+  %12 = load i32* %i, align 4
+  %13 = sext i32 %12 to i64
+  %14 = getelementptr inbounds [1536 x [1536 x float]]* @C, i32 0, i64 %13
+  %15 = getelementptr inbounds [1536 x float]* %14, i32 0, i64 %11
+  %16 = load float* %15
+  %17 = fpext float %16 to double
+  %18 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %9, i8* getelementptr inbounds ([5 x i8]* @.str, i32 0, i32 0), double %17)
+  %19 = load i32* %j, align 4
+  %20 = srem i32 %19, 80
+  %21 = icmp eq i32 %20, 79
+  br i1 %21, label %22, label %25
+
+; <label>:22                                      ; preds = %8
+  %23 = load %struct._IO_FILE** @stdout, align 8
+  %24 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %23, i8* getelementptr inbounds ([2 x i8]* @.str1, i32 0, i32 0))
+  br label %25
+
+; <label>:25                                      ; preds = %22, %8
+  br label %26
+
+; <label>:26                                      ; preds = %25
+  %27 = load i32* %j, align 4
+  %28 = add nsw i32 %27, 1
+  store i32 %28, i32* %j, align 4
+  br label %5
+
+; <label>:29                                      ; preds = %5
+  %30 = load %struct._IO_FILE** @stdout, align 8
+  %31 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %30, i8* getelementptr inbounds ([2 x i8]* @.str1, i32 0, i32 0))
+  br label %32
+
+; <label>:32                                      ; preds = %29
+  %33 = load i32* %i, align 4
+  %34 = add nsw i32 %33, 1
+  store i32 %34, i32* %i, align 4
+  br label %1
+
+; <label>:35                                      ; preds = %1
+  ret void
+}
+
+declare i32 @fprintf(%struct._IO_FILE*, i8*, ...)
+
+define i32 @main() nounwind {
+  %1 = alloca i32, align 4
+  %i = alloca i32, align 4
+  %j = alloca i32, align 4
+  %k = alloca i32, align 4
+  %t_start = alloca double, align 8
+  %t_end = alloca double, align 8
+  store i32 0, i32* %1
+  call void @init_array()
+  store i32 0, i32* %i, align 4
+  br label %2
+
+; <label>:2                                       ; preds = %57, %0
+  %3 = load i32* %i, align 4
+  %4 = icmp slt i32 %3, 1536
+  br i1 %4, label %5, label %60
+
+; <label>:5                                       ; preds = %2
+  store i32 0, i32* %j, align 4
+  br label %6
+
+; <label>:6                                       ; preds = %53, %5
+  %7 = load i32* %j, align 4
+  %8 = icmp slt i32 %7, 1536
+  br i1 %8, label %9, label %56
+
+; <label>:9                                       ; preds = %6
+  %10 = load i32* %j, align 4
+  %11 = sext i32 %10 to i64
+  %12 = load i32* %i, align 4
+  %13 = sext i32 %12 to i64
+  %14 = getelementptr inbounds [1536 x [1536 x float]]* @C, i32 0, i64 %13
+  %15 = getelementptr inbounds [1536 x float]* %14, i32 0, i64 %11
+  store float 0.000000e+00, float* %15
+  store i32 0, i32* %k, align 4
+  br label %16
+
+; <label>:16                                      ; preds = %49, %9
+  %17 = load i32* %k, align 4
+  %18 = icmp slt i32 %17, 1536
+  br i1 %18, label %19, label %52
+
+; <label>:19                                      ; preds = %16
+  %20 = load i32* %j, align 4
+  %21 = sext i32 %20 to i64
+  %22 = load i32* %i, align 4
+  %23 = sext i32 %22 to i64
+  %24 = getelementptr inbounds [1536 x [1536 x float]]* @C, i32 0, i64 %23
+  %25 = getelementptr inbounds [1536 x float]* %24, i32 0, i64 %21
+  %26 = load float* %25
+  %27 = load i32* %k, align 4
+  %28 = sext i32 %27 to i64
+  %29 = load i32* %i, align 4
+  %30 = sext i32 %29 to i64
+  %31 = getelementptr inbounds [1536 x [1536 x float]]* @A, i32 0, i64 %30
+  %32 = getelementptr inbounds [1536 x float]* %31, i32 0, i64 %28
+  %33 = load float* %32
+  %34 = load i32* %j, align 4
+  %35 = sext i32 %34 to i64
+  %36 = load i32* %k, align 4
+  %37 = sext i32 %36 to i64
+  %38 = getelementptr inbounds [1536 x [1536 x float]]* @B, i32 0, i64 %37
+  %39 = getelementptr inbounds [1536 x float]* %38, i32 0, i64 %35
+  %40 = load float* %39
+  %41 = fmul float %33, %40
+  %42 = fadd float %26, %41
+  %43 = load i32* %j, align 4
+  %44 = sext i32 %43 to i64
+  %45 = load i32* %i, align 4
+  %46 = sext i32 %45 to i64
+  %47 = getelementptr inbounds [1536 x [1536 x float]]* @C, i32 0, i64 %46
+  %48 = getelementptr inbounds [1536 x float]* %47, i32 0, i64 %44
+  store float %42, float* %48
+  br label %49
+
+; <label>:49                                      ; preds = %19
+  %50 = load i32* %k, align 4
+  %51 = add nsw i32 %50, 1
+  store i32 %51, i32* %k, align 4
+  br label %16
+
+; <label>:52                                      ; preds = %16
+  br label %53
+
+; <label>:53                                      ; preds = %52
+  %54 = load i32* %j, align 4
+  %55 = add nsw i32 %54, 1
+  store i32 %55, i32* %j, align 4
+  br label %6
+
+; <label>:56                                      ; preds = %6
+  br label %57
+
+; <label>:57                                      ; preds = %56
+  %58 = load i32* %i, align 4
+  %59 = add nsw i32 %58, 1
+  store i32 %59, i32* %i, align 4
+  br label %2
+
+; <label>:60                                      ; preds = %2
+  ret i32 0
+}

Added: polly/trunk/www/experiments/matmul/runall.sh
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/runall.sh?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/runall.sh (added)
+++ polly/trunk/www/experiments/matmul/runall.sh Mon May  2 02:48:29 2011
@@ -0,0 +1,92 @@
+#!/bin/sh -a
+
+
+echo "--> 1. Create LLVM-IR from C"
+clang -S -emit-llvm matmul.c -o matmul.s
+
+echo "--> 2. Load Polly automatically when calling the 'opt' tool"
+export PATH_TO_POLLY_LIB="~/Projekte/polly/build_clang/lib/"
+alias opt="opt -load ${PATH_TO_POLLY_LIB}/LLVMPolly.so"
+
+echo "--> 3. Prepare the LLVM-IR for Polly"
+opt -S -mem2reg -loop-simplify -indvars matmul.s > matmul.preopt.ll
+
+echo "--> 4. Show the SCoPs detected by Polly"
+opt -basicaa -polly-cloog -analyze -q matmul.preopt.ll
+
+echo "--> 5.1 Highlight the detected SCoPs in the CFGs of the program"
+# We only create .dot files, as directly -view-scops directly calls graphviz
+# which would require user interaction to continue the script.
+# opt -basicaa -view-scops -disable-output matmul.preopt.ll
+opt -basicaa -dot-scops -disable-output matmul.preopt.ll
+
+echo "--> 5.2 Highlight the detected SCoPs in the CFGs of the program (print \
+no instructions)"
+# We only create .dot files, as directly -view-scops-only directly calls
+# graphviz which would require user interaction to continue the script.
+# opt -basicaa -view-scops-only -disable-output matmul.preopt.ll
+opt -basicaa -dot-scops-only -disable-output matmul.preopt.ll
+
+echo "--> 5.3 Create .png files from the .dot files"
+for i in `ls *.dot`; do dot -Tpng $i > $i.png; done
+
+echo "--> 6. View the polyhedral representation of the SCoPs"
+opt -basicaa -polly-scops -analyze matmul.preopt.ll
+
+echo "--> 7. Show the dependences for the SCoPs"
+opt -basicaa -polly-dependences -analyze matmul.preopt.ll
+
+echo "--> 8. Export jscop files"
+opt -basicaa -polly-export-jscop matmul.preopt.ll
+
+echo "--> 9. Import the updated jscop files and print the new SCoPs. (optional)"
+opt -basicaa -polly-import-jscop -polly-cloog -analyze matmul.preopt.ll \
+    -polly-import-jscop-postfix=interchanged
+opt -basicaa -polly-import-jscop -polly-cloog -analyze matmul.preopt.ll \
+    -polly-import-jscop-postfix=interchanged+tiled
+
+echo "--> 10. Codegenerate the SCoPs"
+opt -basicaa -polly-import-jscop -polly-import-jscop-postfix=interchanged \
+    -polly-codegen \
+    matmul.preopt.ll | opt -O3 > matmul.polly.interchanged.ll
+opt -basicaa -polly-import-jscop \
+    -polly-import-jscop-postfix=interchanged+tiled -polly-codegen \
+    matmul.preopt.ll | opt -O3 > matmul.polly.interchanged+tiled.ll
+opt -basicaa -polly-import-jscop \
+    -polly-import-jscop-postfix=interchanged+tiled+vector -polly-codegen \
+    matmul.preopt.ll -enable-polly-vector\
+    | opt -O3 > matmul.polly.interchanged+tiled+vector.ll
+opt -basicaa -polly-import-jscop \
+    -polly-import-jscop-postfix=interchanged+tiled+vector -polly-codegen \
+    matmul.preopt.ll -enable-polly-vector -enable-polly-openmp\
+    | opt -O3 > matmul.polly.interchanged+tiled+vector+openmp.ll
+opt matmul.preopt.ll | opt -O3 > matmul.normalopt.ll
+
+echo "--> 11. Create the executables"
+llc matmul.polly.interchanged.ll -o matmul.polly.interchanged.s && gcc matmul.polly.interchanged.s \
+    -o matmul.polly.interchanged.exe
+llc matmul.polly.interchanged+tiled.ll -o matmul.polly.interchanged+tiled.s && gcc matmul.polly.interchanged+tiled.s \
+    -o matmul.polly.interchanged+tiled.exe
+llc matmul.polly.interchanged+tiled+vector.ll \
+    -o matmul.polly.interchanged+tiled+vector.s \
+    && gcc matmul.polly.interchanged+tiled+vector.s \
+    -o matmul.polly.interchanged+tiled+vector.exe
+llc matmul.polly.interchanged+tiled+vector+openmp.ll \
+    -o matmul.polly.interchanged+tiled+vector+openmp.s \
+    && gcc -lgomp matmul.polly.interchanged+tiled+vector+openmp.s \
+    -o matmul.polly.interchanged+tiled+vector+openmp.exe
+llc matmul.normalopt.ll -o matmul.normalopt.s && gcc matmul.normalopt.s \
+    -o matmul.normalopt.exe
+
+echo "--> 12. Compare the runtime of the executables"
+
+echo "time ./matmul.normalopt.exe"
+time -f "%E real, %U user, %S sys" ./matmul.normalopt.exe
+echo "time ./matmul.polly.interchanged.exe"
+time -f "%E real, %U user, %S sys" ./matmul.polly.interchanged.exe
+echo "time ./matmul.polly.interchanged+tiled.exe"
+time -f "%E real, %U user, %S sys" ./matmul.polly.interchanged+tiled.exe
+echo "time ./matmul.polly.interchanged+tiled+vector.exe"
+time -f "%E real, %U user, %S sys" ./matmul.polly.interchanged+tiled+vector.exe
+echo "time ./matmul.polly.interchanged+tiled+vector+openmp.exe"
+time -f "%E real, %U user, %S sys" ./matmul.polly.interchanged+tiled+vector+openmp.exe

Propchange: polly/trunk/www/experiments/matmul/runall.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: polly/trunk/www/experiments/matmul/scops.init_array.dot
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scops.init_array.dot?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/scops.init_array.dot (added)
+++ polly/trunk/www/experiments/matmul/scops.init_array.dot Mon May  2 02:48:29 2011
@@ -0,0 +1,47 @@
+digraph "Scop Graph for 'init_array' function" {
+	label="Scop Graph for 'init_array' function";
+
+	Node0x26ade30 [shape=record,label="{%0:\l\l  br label %1\l}"];
+	Node0x26ade30 -> Node0x26acdd0;
+	Node0x26acdd0 [shape=record,label="{%1:\l\l  %2 = phi i64 [ %indvar.next2, %18 ], [ 0, %0 ]\l  %exitcond5 = icmp ne i64 %2, 1536\l  br i1 %exitcond5, label %3, label %19\l}"];
+	Node0x26acdd0 -> Node0x26acdf0;
+	Node0x26acdd0 -> Node0x26adce0;
+	Node0x26acdf0 [shape=record,label="{%3:\l\l  br label %4\l}"];
+	Node0x26acdf0 -> Node0x26addc0;
+	Node0x26addc0 [shape=record,label="{%4:\l\l  %indvar = phi i64 [ %indvar.next, %16 ], [ 0, %3 ]\l  %scevgep4 = getelementptr [1536 x [1536 x float]]* @A, i64 0, i64 %2, i64 %indvar\l  %scevgep = getelementptr [1536 x [1536 x float]]* @B, i64 0, i64 %2, i64 %indvar\l  %tmp = mul i64 %2, %indvar\l  %tmp3 = trunc i64 %tmp to i32\l  %exitcond = icmp ne i64 %indvar, 1536\l  br i1 %exitcond, label %5, label %17\l}"];
+	Node0x26addc0 -> Node0x26ace70;
+	Node0x26addc0 -> Node0x26ad010;
+	Node0x26ace70 [shape=record,label="{%5:\l\l  %6 = srem i32 %tmp3, 1024\l  %7 = add nsw i32 1, %6\l  %8 = sitofp i32 %7 to double\l  %9 = fdiv double %8, 2.000000e+00\l  %10 = fptrunc double %9 to float\l  store float %10, float* %scevgep4\l  %11 = srem i32 %tmp3, 1024\l  %12 = add nsw i32 1, %11\l  %13 = sitofp i32 %12 to double\l  %14 = fdiv double %13, 2.000000e+00\l  %15 = fptrunc double %14 to float\l  store float %15, float* %scevgep\l  br label %16\l}"];
+	Node0x26ace70 -> Node0x26ace90;
+	Node0x26ace90 [shape=record,label="{%16:\l\l  %indvar.next = add i64 %indvar, 1\l  br label %4\l}"];
+	Node0x26ace90 -> Node0x26addc0[constraint=false];
+	Node0x26ad010 [shape=record,label="{%17:\l\l  br label %18\l}"];
+	Node0x26ad010 -> Node0x26ad6c0;
+	Node0x26ad6c0 [shape=record,label="{%18:\l\l  %indvar.next2 = add i64 %2, 1\l  br label %1\l}"];
+	Node0x26ad6c0 -> Node0x26acdd0[constraint=false];
+	Node0x26adce0 [shape=record,label="{%19:\l\l  ret void\l}"];
+	colorscheme = "paired12"
+        subgraph cluster_0x26a94c0 {
+          label = "";
+          style = solid;
+          color = 1
+          subgraph cluster_0x26aa4e0 {
+            label = "";
+            style = filled;
+            color = 3            subgraph cluster_0x26a9780 {
+              label = "";
+              style = solid;
+              color = 5
+              Node0x26addc0;
+              Node0x26ace70;
+              Node0x26ace90;
+            }
+            Node0x26acdd0;
+            Node0x26acdf0;
+            Node0x26ad010;
+            Node0x26ad6c0;
+          }
+          Node0x26ade30;
+          Node0x26adce0;
+        }
+}

Added: polly/trunk/www/experiments/matmul/scops.init_array.dot.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scops.init_array.dot.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/scops.init_array.dot.png (added) and polly/trunk/www/experiments/matmul/scops.init_array.dot.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/scops.main.dot
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scops.main.dot?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/scops.main.dot (added)
+++ polly/trunk/www/experiments/matmul/scops.main.dot Mon May  2 02:48:29 2011
@@ -0,0 +1,65 @@
+digraph "Scop Graph for 'main' function" {
+	label="Scop Graph for 'main' function";
+
+	Node0x26ace10 [shape=record,label="{%0:\l\l  call void @init_array()\l  br label %1\l}"];
+	Node0x26ace10 -> Node0x26acd60;
+	Node0x26acd60 [shape=record,label="{%1:\l\l  %indvar3 = phi i64 [ %indvar.next4, %16 ], [ 0, %0 ]\l  %exitcond9 = icmp ne i64 %indvar3, 1536\l  br i1 %exitcond9, label %2, label %17\l}"];
+	Node0x26acd60 -> Node0x26acd80;
+	Node0x26acd60 -> Node0x26af2e0;
+	Node0x26acd80 [shape=record,label="{%2:\l\l  br label %3\l}"];
+	Node0x26acd80 -> Node0x26aee80;
+	Node0x26aee80 [shape=record,label="{%3:\l\l  %indvar1 = phi i64 [ %indvar.next2, %14 ], [ 0, %2 ]\l  %scevgep8 = getelementptr [1536 x [1536 x float]]* @C, i64 0, i64 %indvar3, i64 %indvar1\l  %exitcond6 = icmp ne i64 %indvar1, 1536\l  br i1 %exitcond6, label %4, label %15\l}"];
+	Node0x26aee80 -> Node0x26aeea0;
+	Node0x26aee80 -> Node0x26aeec0;
+	Node0x26aeea0 [shape=record,label="{%4:\l\l  store float 0.000000e+00, float* %scevgep8\l  br label %5\l}"];
+	Node0x26aeea0 -> Node0x26aced0;
+	Node0x26aced0 [shape=record,label="{%5:\l\l  %indvar = phi i64 [ %indvar.next, %12 ], [ 0, %4 ]\l  %scevgep5 = getelementptr [1536 x [1536 x float]]* @A, i64 0, i64 %indvar3, i64 %indvar\l  %scevgep = getelementptr [1536 x [1536 x float]]* @B, i64 0, i64 %indvar, i64 %indvar1\l  %exitcond = icmp ne i64 %indvar, 1536\l  br i1 %exitcond, label %6, label %13\l}"];
+	Node0x26aced0 -> Node0x26ace60;
+	Node0x26aced0 -> Node0x26af5e0;
+	Node0x26ace60 [shape=record,label="{%6:\l\l  %7 = load float* %scevgep8\l  %8 = load float* %scevgep5\l  %9 = load float* %scevgep\l  %10 = fmul float %8, %9\l  %11 = fadd float %7, %10\l  store float %11, float* %scevgep8\l  br label %12\l}"];
+	Node0x26ace60 -> Node0x26af640;
+	Node0x26af640 [shape=record,label="{%12:\l\l  %indvar.next = add i64 %indvar, 1\l  br label %5\l}"];
+	Node0x26af640 -> Node0x26aced0[constraint=false];
+	Node0x26af5e0 [shape=record,label="{%13:\l\l  br label %14\l}"];
+	Node0x26af5e0 -> Node0x26af6e0;
+	Node0x26af6e0 [shape=record,label="{%14:\l\l  %indvar.next2 = add i64 %indvar1, 1\l  br label %3\l}"];
+	Node0x26af6e0 -> Node0x26aee80[constraint=false];
+	Node0x26aeec0 [shape=record,label="{%15:\l\l  br label %16\l}"];
+	Node0x26aeec0 -> Node0x26af740;
+	Node0x26af740 [shape=record,label="{%16:\l\l  %indvar.next4 = add i64 %indvar3, 1\l  br label %1\l}"];
+	Node0x26af740 -> Node0x26acd60[constraint=false];
+	Node0x26af2e0 [shape=record,label="{%17:\l\l  ret i32 0\l}"];
+	colorscheme = "paired12"
+        subgraph cluster_0x26a8b20 {
+          label = "";
+          style = solid;
+          color = 1
+          subgraph cluster_0x26a9220 {
+            label = "";
+            style = filled;
+            color = 3            subgraph cluster_0x26ad500 {
+              label = "";
+              style = solid;
+              color = 5
+              subgraph cluster_0x26ad480 {
+                label = "";
+                style = solid;
+                color = 7
+                Node0x26aced0;
+                Node0x26ace60;
+                Node0x26af640;
+              }
+              Node0x26aee80;
+              Node0x26aeea0;
+              Node0x26af5e0;
+              Node0x26af6e0;
+            }
+            Node0x26acd60;
+            Node0x26acd80;
+            Node0x26aeec0;
+            Node0x26af740;
+          }
+          Node0x26ace10;
+          Node0x26af2e0;
+        }
+}

Added: polly/trunk/www/experiments/matmul/scops.main.dot.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scops.main.dot.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/scops.main.dot.png (added) and polly/trunk/www/experiments/matmul/scops.main.dot.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/scops.print_array.dot
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scops.print_array.dot?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/scops.print_array.dot (added)
+++ polly/trunk/www/experiments/matmul/scops.print_array.dot Mon May  2 02:48:29 2011
@@ -0,0 +1,60 @@
+digraph "Scop Graph for 'print_array' function" {
+	label="Scop Graph for 'print_array' function";
+
+	Node0x26ac9a0 [shape=record,label="{%0:\l\l  br label %1\l}"];
+	Node0x26ac9a0 -> Node0x26acd00;
+	Node0x26acd00 [shape=record,label="{%1:\l\l  %indvar1 = phi i64 [ %indvar.next2, %19 ], [ 0, %0 ]\l  %exitcond3 = icmp ne i64 %indvar1, 1536\l  br i1 %exitcond3, label %2, label %20\l}"];
+	Node0x26acd00 -> Node0x26a8ac0;
+	Node0x26acd00 -> Node0x26ac9c0;
+	Node0x26a8ac0 [shape=record,label="{%2:\l\l  br label %3\l}"];
+	Node0x26a8ac0 -> Node0x26ad940;
+	Node0x26ad940 [shape=record,label="{%3:\l\l  %indvar = phi i64 [ %indvar.next, %15 ], [ 0, %2 ]\l  %scevgep = getelementptr [1536 x [1536 x float]]* @C, i64 0, i64 %indvar1, i64 %indvar\l  %j.0 = trunc i64 %indvar to i32\l  %exitcond = icmp ne i64 %indvar, 1536\l  br i1 %exitcond, label %4, label %16\l}"];
+	Node0x26ad940 -> Node0x26acde0;
+	Node0x26ad940 -> Node0x26ad9e0;
+	Node0x26acde0 [shape=record,label="{%4:\l\l  %5 = load %struct._IO_FILE** @stdout, align 8\l  %6 = load float* %scevgep\l  %7 = fpext float %6 to double\l  %8 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %5, i8* getelementptr inbounds ([5 x i8]* @.str, i32 0, i32 0), double %7)\l  %9 = srem i32 %j.0, 80\l  %10 = icmp eq i32 %9, 79\l  br i1 %10, label %11, label %14\l}"];
+	Node0x26acde0 -> Node0x26ada40;
+	Node0x26acde0 -> Node0x26acfa0;
+	Node0x26ada40 [shape=record,label="{%11:\l\l  %12 = load %struct._IO_FILE** @stdout, align 8\l  %13 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %12, i8* getelementptr inbounds ([2 x i8]* @.str1, i32 0, i32 0))\l  br label %14\l}"];
+	Node0x26ada40 -> Node0x26acfa0;
+	Node0x26acfa0 [shape=record,label="{%14:\l\l  br label %15\l}"];
+	Node0x26acfa0 -> Node0x26ad6c0;
+	Node0x26ad6c0 [shape=record,label="{%15:\l\l  %indvar.next = add i64 %indvar, 1\l  br label %3\l}"];
+	Node0x26ad6c0 -> Node0x26ad940[constraint=false];
+	Node0x26ad9e0 [shape=record,label="{%16:\l\l  %17 = load %struct._IO_FILE** @stdout, align 8\l  %18 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %17, i8* getelementptr inbounds ([2 x i8]* @.str1, i32 0, i32 0))\l  br label %19\l}"];
+	Node0x26ad9e0 -> Node0x26ace00;
+	Node0x26ace00 [shape=record,label="{%19:\l\l  %indvar.next2 = add i64 %indvar1, 1\l  br label %1\l}"];
+	Node0x26ace00 -> Node0x26acd00[constraint=false];
+	Node0x26ac9c0 [shape=record,label="{%20:\l\l  ret void\l}"];
+	colorscheme = "paired12"
+        subgraph cluster_0x26adae0 {
+          label = "";
+          style = solid;
+          color = 1
+          subgraph cluster_0x26aa030 {
+            label = "";
+            style = solid;
+            color = 6
+            subgraph cluster_0x26a9fb0 {
+              label = "";
+              style = solid;
+              color = 5
+              subgraph cluster_0x26adb60 {
+                label = "";
+                style = solid;
+                color = 7
+                Node0x26acde0;
+                Node0x26ada40;
+              }
+              Node0x26ad940;
+              Node0x26acfa0;
+              Node0x26ad6c0;
+            }
+            Node0x26acd00;
+            Node0x26a8ac0;
+            Node0x26ad9e0;
+            Node0x26ace00;
+          }
+          Node0x26ac9a0;
+          Node0x26ac9c0;
+        }
+}

Added: polly/trunk/www/experiments/matmul/scops.print_array.dot.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scops.print_array.dot.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/scops.print_array.dot.png (added) and polly/trunk/www/experiments/matmul/scops.print_array.dot.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/scopsonly.init_array.dot
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scopsonly.init_array.dot?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/scopsonly.init_array.dot (added)
+++ polly/trunk/www/experiments/matmul/scopsonly.init_array.dot Mon May  2 02:48:29 2011
@@ -0,0 +1,47 @@
+digraph "Scop Graph for 'init_array' function" {
+	label="Scop Graph for 'init_array' function";
+
+	Node0x24dfca0 [shape=record,label="{%0}"];
+	Node0x24dfca0 -> Node0x24dfdf0;
+	Node0x24dfdf0 [shape=record,label="{%1}"];
+	Node0x24dfdf0 -> Node0x24dee50;
+	Node0x24dfdf0 -> Node0x24def50;
+	Node0x24dee50 [shape=record,label="{%3}"];
+	Node0x24dee50 -> Node0x24deec0;
+	Node0x24deec0 [shape=record,label="{%4}"];
+	Node0x24deec0 -> Node0x24dfdc0;
+	Node0x24deec0 -> Node0x24df0c0;
+	Node0x24dfdc0 [shape=record,label="{%5}"];
+	Node0x24dfdc0 -> Node0x24defb0;
+	Node0x24defb0 [shape=record,label="{%16}"];
+	Node0x24defb0 -> Node0x24deec0[constraint=false];
+	Node0x24df0c0 [shape=record,label="{%17}"];
+	Node0x24df0c0 -> Node0x24deee0;
+	Node0x24deee0 [shape=record,label="{%18}"];
+	Node0x24deee0 -> Node0x24dfdf0[constraint=false];
+	Node0x24def50 [shape=record,label="{%19}"];
+	colorscheme = "paired12"
+        subgraph cluster_0x24db4c0 {
+          label = "";
+          style = solid;
+          color = 1
+          subgraph cluster_0x24dc4e0 {
+            label = "";
+            style = filled;
+            color = 3            subgraph cluster_0x24db780 {
+              label = "";
+              style = solid;
+              color = 5
+              Node0x24deec0;
+              Node0x24dfdc0;
+              Node0x24defb0;
+            }
+            Node0x24dfdf0;
+            Node0x24dee50;
+            Node0x24df0c0;
+            Node0x24deee0;
+          }
+          Node0x24dfca0;
+          Node0x24def50;
+        }
+}

Added: polly/trunk/www/experiments/matmul/scopsonly.init_array.dot.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scopsonly.init_array.dot.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/scopsonly.init_array.dot.png (added) and polly/trunk/www/experiments/matmul/scopsonly.init_array.dot.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/scopsonly.main.dot
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scopsonly.main.dot?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/scopsonly.main.dot (added)
+++ polly/trunk/www/experiments/matmul/scopsonly.main.dot Mon May  2 02:48:29 2011
@@ -0,0 +1,65 @@
+digraph "Scop Graph for 'main' function" {
+	label="Scop Graph for 'main' function";
+
+	Node0x24deb60 [shape=record,label="{%0}"];
+	Node0x24deb60 -> Node0x24deaa0;
+	Node0x24deaa0 [shape=record,label="{%1}"];
+	Node0x24deaa0 -> Node0x24e12a0;
+	Node0x24deaa0 -> Node0x24e0e30;
+	Node0x24e12a0 [shape=record,label="{%2}"];
+	Node0x24e12a0 -> Node0x24e0e00;
+	Node0x24e0e00 [shape=record,label="{%3}"];
+	Node0x24e0e00 -> Node0x24e1410;
+	Node0x24e0e00 -> Node0x24e1470;
+	Node0x24e1410 [shape=record,label="{%4}"];
+	Node0x24e1410 -> Node0x24e1380;
+	Node0x24e1380 [shape=record,label="{%5}"];
+	Node0x24e1380 -> Node0x24deaf0;
+	Node0x24e1380 -> Node0x24e1620;
+	Node0x24deaf0 [shape=record,label="{%6}"];
+	Node0x24deaf0 -> Node0x24e1680;
+	Node0x24e1680 [shape=record,label="{%12}"];
+	Node0x24e1680 -> Node0x24e1380[constraint=false];
+	Node0x24e1620 [shape=record,label="{%13}"];
+	Node0x24e1620 -> Node0x24e16e0;
+	Node0x24e16e0 [shape=record,label="{%14}"];
+	Node0x24e16e0 -> Node0x24e0e00[constraint=false];
+	Node0x24e1470 [shape=record,label="{%15}"];
+	Node0x24e1470 -> Node0x24e01a0;
+	Node0x24e01a0 [shape=record,label="{%16}"];
+	Node0x24e01a0 -> Node0x24deaa0[constraint=false];
+	Node0x24e0e30 [shape=record,label="{%17}"];
+	colorscheme = "paired12"
+        subgraph cluster_0x24dfc10 {
+          label = "";
+          style = solid;
+          color = 1
+          subgraph cluster_0x24de570 {
+            label = "";
+            style = filled;
+            color = 3            subgraph cluster_0x24de7a0 {
+              label = "";
+              style = solid;
+              color = 5
+              subgraph cluster_0x24de720 {
+                label = "";
+                style = solid;
+                color = 7
+                Node0x24e1380;
+                Node0x24deaf0;
+                Node0x24e1680;
+              }
+              Node0x24e0e00;
+              Node0x24e1410;
+              Node0x24e1620;
+              Node0x24e16e0;
+            }
+            Node0x24deaa0;
+            Node0x24e12a0;
+            Node0x24e1470;
+            Node0x24e01a0;
+          }
+          Node0x24deb60;
+          Node0x24e0e30;
+        }
+}

Added: polly/trunk/www/experiments/matmul/scopsonly.main.dot.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scopsonly.main.dot.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/scopsonly.main.dot.png (added) and polly/trunk/www/experiments/matmul/scopsonly.main.dot.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/experiments/matmul/scopsonly.print_array.dot
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scopsonly.print_array.dot?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/experiments/matmul/scopsonly.print_array.dot (added)
+++ polly/trunk/www/experiments/matmul/scopsonly.print_array.dot Mon May  2 02:48:29 2011
@@ -0,0 +1,60 @@
+digraph "Scop Graph for 'print_array' function" {
+	label="Scop Graph for 'print_array' function";
+
+	Node0x24df2c0 [shape=record,label="{%0}"];
+	Node0x24df2c0 -> Node0x24df2a0;
+	Node0x24df2a0 [shape=record,label="{%1}"];
+	Node0x24df2a0 -> Node0x24dee90;
+	Node0x24df2a0 -> Node0x24dee20;
+	Node0x24dee90 [shape=record,label="{%2}"];
+	Node0x24dee90 -> Node0x24debd0;
+	Node0x24debd0 [shape=record,label="{%3}"];
+	Node0x24debd0 -> Node0x24df150;
+	Node0x24debd0 -> Node0x24de990;
+	Node0x24df150 [shape=record,label="{%4}"];
+	Node0x24df150 -> Node0x24df3a0;
+	Node0x24df150 -> Node0x24defb0;
+	Node0x24df3a0 [shape=record,label="{%11}"];
+	Node0x24df3a0 -> Node0x24defb0;
+	Node0x24defb0 [shape=record,label="{%14}"];
+	Node0x24defb0 -> Node0x24df530;
+	Node0x24df530 [shape=record,label="{%15}"];
+	Node0x24df530 -> Node0x24debd0[constraint=false];
+	Node0x24de990 [shape=record,label="{%16}"];
+	Node0x24de990 -> Node0x24df9a0;
+	Node0x24df9a0 [shape=record,label="{%19}"];
+	Node0x24df9a0 -> Node0x24df2a0[constraint=false];
+	Node0x24dee20 [shape=record,label="{%20}"];
+	colorscheme = "paired12"
+        subgraph cluster_0x24dbe40 {
+          label = "";
+          style = solid;
+          color = 1
+          subgraph cluster_0x24db6e0 {
+            label = "";
+            style = solid;
+            color = 6
+            subgraph cluster_0x24db660 {
+              label = "";
+              style = solid;
+              color = 5
+              subgraph cluster_0x24db5e0 {
+                label = "";
+                style = solid;
+                color = 7
+                Node0x24df150;
+                Node0x24df3a0;
+              }
+              Node0x24debd0;
+              Node0x24defb0;
+              Node0x24df530;
+            }
+            Node0x24df2a0;
+            Node0x24dee90;
+            Node0x24de990;
+            Node0x24df9a0;
+          }
+          Node0x24df2c0;
+          Node0x24dee20;
+        }
+}

Added: polly/trunk/www/experiments/matmul/scopsonly.print_array.dot.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/experiments/matmul/scopsonly.print_array.dot.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/experiments/matmul/scopsonly.print_array.dot.png (added) and polly/trunk/www/experiments/matmul/scopsonly.print_array.dot.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/get_started.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/get_started.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/get_started.html (added)
+++ polly/trunk/www/get_started.html Mon May  2 02:48:29 2011
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+          "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+  <title>Polly - Getting Started</title>
+  <link type="text/css" rel="stylesheet" href="menu.css" />
+  <link type="text/css" rel="stylesheet" href="content.css" />
+</head>
+<body>
+
+<!--#include virtual="menu.html.incl"-->
+
+<div id="content">
+
+<h1>Getting Started: Building and Installing Polly</h1>
+
+
+<h2 id="prerequisites"> Prerequisites </h2>
+
+The following prerequisites can be installed through the package management
+system of your operating system.
+
+<ul>
+<li>libgmp (library + developer package)</li>
+</ul>
+
+<h3> Install ISL / CLooG libraries </h3>
+
+Polly requires the latest versions of <a href="http://www.cloog.org">CLooG</a>
+and <a href="http://repo.or.cz/w/isl.git">isl</a> to be installed. The CLooG git
+repository contains both the latest version of CLooG and isl.
+
+<pre>
+git clone git://repo.or.cz/cloog.git
+cd cloog
+./get_submodules.sh
+./autogen.sh
+./configure --with-gmp-prefix=/path/to/gmp/installation --prefix=/path/to/cloog/installation
+make
+make install
+</pre>
+
+<h3> Install Pocc (Optional) </h3>
+
+Polly can use <a href="http://www.cse.ohio-state.edu/~pouchet/software/pocc">
+PoCC</a> as an external optimizer. PoCC provides an
+integrated version of <a href="http://pluto.sf.net">Pluto</a>, an advanced
+data-locality and tileability optimizer.  To enable this feature install PoCC
+1.0-rc3.1 (the one with Polly support) and add it to your PATH.
+
+<pre>
+wget <a
+href="http://www.cse.ohio-state.edu/~pouchet/software/pocc/download/pocc-1.0-rc3.1-full.tar.gz">http://www.cse.ohio-state.edu/~pouchet/software/pocc/download/pocc-1.0-rc3.1-full.tar.gz</a>
+tar xzf pocc-1.0-rc3.1-full.tar.gz
+cd pocc-1.0-rc3.1
+./install.sh
+export PATH=`pwd`/bin
+</pre>
+
+Furthermore, scoplib-0.2.0 has to be installed such that polly can link to
+it.
+
+<pre>
+wget <a
+href="http://www.cse.ohio-state.edu/~pouchet/software/pocc/download/modules/scoplib-0.2.0.tar.gz"
+>http://www.cse.ohio-state.edu/~pouchet/software/pocc/download/modules/scoplib-0.2.0.tar.gz</a>
+tar xzf  scoplib-0.2.0.tar.gz
+cd scoplib-0.2.0
+./configure --enable-mp-version --prefix=/path/to/scoplib/installation
+make && make install
+</pre>
+
+<h2 id="source"> Get the code </h2>
+
+<p>
+The Polly source code is available in the LLVM SVN repository. For convenience
+we also provide a git mirror. To build Polly we extract its source code into the
+<em>tools</em> directory of the llvm sources.</p>
+<b>A recent LLVM checkout is needed. Older versions may not work!</b>
+
+<h3>SVN</h3>
+<pre>
+export LLVM_SRC=`pwd`/llvm
+svn checkout http://llvm.org/svn/llvm-project/llvm/trunk ${LLVM_SRC}
+cd ${LLVM_SRC}/tools
+svn checkout http://llvm.org/svn/llvm-project/polly/trunk polly
+</pre>
+<h3>GIT</h3>
+<pre>
+export LLVM_SRC=`pwd`/llvm
+git clone http://llvm.org/git/llvm.git ${LLVM_SRC}
+cd ${LLVM_SRC}/tools
+git clone git://repo.or.cz/polly.git
+</pre>
+
+
+
+<h2 id="build">Build Polly</h2>
+
+To build Polly you can either use the autoconf or the cmake build system. At the
+moment only the autoconf build system allows to run the llvm test-suite and only
+the cmake build system allows to run 'make polly-test'.
+
+<h3>CMake</h3>
+
+<pre>
+mkdir build
+cd build
+cmake ${LLVM_SRC}
+
+# If CMAKE cannot find CLooG and ISL
+cmake -DCMAKE_PREFIX_PATH=/cloog/installation .
+
+# To point CMAKE to the scoplib source
+cmake -DCMAKE_PREFIX_PATH=/scoplib/installation .
+
+make
+</pre>
+
+<h3> Autoconf </h2>
+
+<pre>
+mkdir build
+cd build
+${LLVM_SRC}/configure --with-cloog=/cloog/installation --with-isl=/cloog/installation --with-scoplib=/scoplib/installation
+make
+</pre>
+
+<h2> Test Polly</h2>
+
+To check if Polly works correctly you can run <em>make polly-test</em>. This
+currently works only with a cmake build.
+</div>
+</body>
+</html>

Added: polly/trunk/www/images/architecture.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/architecture.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/architecture.png (added) and polly/trunk/www/images/architecture.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/iit-madras.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/iit-madras.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/iit-madras.png (added) and polly/trunk/www/images/iit-madras.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/osu.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/osu.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/osu.png (added) and polly/trunk/www/images/osu.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/performance/parallel-large.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/performance/parallel-large.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/performance/parallel-large.png (added) and polly/trunk/www/images/performance/parallel-large.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/performance/parallel-small.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/performance/parallel-small.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/performance/parallel-small.png (added) and polly/trunk/www/images/performance/parallel-small.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/performance/sequential-large.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/performance/sequential-large.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/performance/sequential-large.png (added) and polly/trunk/www/images/performance/sequential-large.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/performance/sequential-small.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/performance/sequential-small.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/performance/sequential-small.png (added) and polly/trunk/www/images/performance/sequential-small.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/sys-uni.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/sys-uni.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/sys-uni.png (added) and polly/trunk/www/images/sys-uni.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/images/uni-passau.png
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/images/uni-passau.png?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/images/uni-passau.png (added) and polly/trunk/www/images/uni-passau.png Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/index.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/index.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/index.html (added)
+++ polly/trunk/www/index.html Mon May  2 02:48:29 2011
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
+          "http://www.w3.org/TR/html4/strict.dtd">
+<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
+<html>
+<head>
+  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+  <title>Polly - Polyhedral optimizations for LLVM</title>
+  <link type="text/css" rel="stylesheet" href="menu.css">
+  <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+<body>
+<!--#include virtual="menu.html.incl"-->
+<div id="content">
+  <!--*********************************************************************-->
+  <h1>Polly: Polyhedral optimizations for LLVM</h1>
+  <!--*********************************************************************-->
+
+  <p>Polly is a project that works on advanced optimizations for data-locality
+  and parallelism. It uses the polyhedral model, a high-level mathematical
+  abstraction, to analyse and optimize the memory access pattern of a program.
+  Due to the use of a polyhedral representation Polly can easily calculate
+  detailed data dependency information which it uses to derive an optimized loop
+  structure. Polly can speed up sequential code by improving memory locality and
+  consequently the cache use.  Furthermore, Polly is able to expose different
+  kinds of parallelism which it exploits by introducing (basic) OpenMP and SIMD
+  code.  The automatic use of vector accelerators is planned and will take
+  avantage of the ongoing work on the LLVM PTX backend.
+  </p>
+
+  <em> Polly is still a research project, that is not production quality. We are
+  working on a robust implementation of Polly's core. You are invited to join us
+  by directly contributing to Polly or by using it for your own research.</em>
+
+  <!--=====================================================================-->
+  <h2>Major changes in Polly</h2>
+  <!--=====================================================================-->
+
+  <ul>
+  <li>April 2011 - Polly moves to the LLVM infrastructure </li>
+  <li>March 2011 - Polly is presented at <a
+  href="http://impact2011.inrialpes.fr/">CGO/IMPACT 2011</a>, Polly can compile
+  polybench 2.0 with vectorization and OpenMP code generation.  </li>
+  <li> Februar 2011 - pollycc - a script to automatically compile with
+  polyhedral optimizations </li>
+  <li> Januar 2011 - Basic OpenMP support, Alias analysis integration,
+  Pluto/POCC support </li>
+  <li> Dezember 2010 - Basic vectorization support </li>
+  <li> November 2010 - Talk about Polly at the <a
+  href="http://llvm.org/devmtg/2010-11/">LLVM Developer Meeting</a> </li>
+  <li> October 2010 - Added dependency analysis </li>
+  <li> October 2010 - Finished Phase 1 - Get something working </li>
+  <li> October 2010 - Support for scalar dependences and sequential SCoPs </li>
+  <li> August 2010 - RegionInfo pass committed to llvm </li>
+  <li> August 2010 - llvm-test suite compiles </li>
+  <li> July 2010 - Code generation works for normal SCoPs.  </li>
+  <li> June 2010 - OpenSCoP import/export works (as far as openscop is finished)
+  </li>
+  <li> May 2010 - The CLooG AST can be parsed </li>
+  <li> April 2010 - SCoPs can automatically be detected (WIP) </li>
+  <li> March 2010 - The RegionInfo framework is almost completed.  </li>
+  <li> February 2010 - Translating a simple loop to Polly-IR and passing it to
+  CLooG-isl to regenerate a loop structure works.  </li>
+  <li> February 2010 - ISL and CLooG are integrated.  </li>
+  <li> January 2010 - The RegionInfo pass is finished.  </li>
+  <li> End of 2009 - Work on the infrastructure started.  </li>
+  </ul>
+  <!--=====================================================================-->
+  <h2> The architecture of Polly</h2>
+  <!--=====================================================================-->
+  <img src='images/architecture.png' />
+</div>
+</body>
+</html>

Added: polly/trunk/www/menu.css
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/menu.css?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/menu.css (added)
+++ polly/trunk/www/menu.css Mon May  2 02:48:29 2011
@@ -0,0 +1,39 @@
+/***************/
+/* page layout */
+/***************/
+
+[id=menu] {
+	width:25ex;
+        float: left;
+}
+[id=content] {
+	/* *****  EDIT THIS VALUE IF CONTENT OVERLAPS MENU ***** */
+	position:absolute;
+  left:29ex;
+	padding-right:4ex;
+}
+
+/**************/
+/* menu style */
+/**************/
+
+#menu .submenu {
+	padding-top:1em;
+	display:block;
+}
+
+#menu label {
+	display:block;
+	font-weight: bold;
+	text-align: center;
+	background-color: rgb(192,192,192);
+}
+#menu a {
+	padding:0 .2em;
+	display:block;
+	text-align: center;
+	background-color: rgb(235,235,235);
+}
+#menu a:visited {
+	color:rgb(100,50,100);
+}

Added: polly/trunk/www/menu.html.incl
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/menu.html.incl?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/menu.html.incl (added)
+++ polly/trunk/www/menu.html.incl Mon May  2 02:48:29 2011
@@ -0,0 +1,36 @@
+<div id="menu">
+  <div>
+    <a href="http://llvm.org/">LLVM Home</a>
+  </div>
+
+  <div class="submenu">
+    <label>Polly Info</label>
+    <a href="index.html">About</a>
+    <a href="todo.html">Todo</a>
+    <a href="passes.html">LLVM Passes</a>
+<!--    <a href="examples.html">Examples</a> -->
+    <a href="performance.html">Performance</a>
+    <a href="publications.html">Publications</a>
+    <a href="contributors.html">Contributors</a>
+  </div>
+
+  <div class="submenu">
+    <label>Communication</label>
+    <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">
+      llvm-commits List
+    </a>
+    <a href="http://groups.google.com/group/polly-dev">polly-dev List</a>
+    <a href="http://llvm.org/bugs/">Bug Reports</a>
+  </div>
+
+  <div class="submenu">
+    <label>The Code</label>
+    <a href="get_started.html#prerequisites">Prerequisites</a>
+    <a href="get_started.html#source">Download</a>
+    <a href="get_started.html#build">Build</a>
+    <a href="http://llvm.org/viewvc/llvm-project/polly/trunk/">
+      Browse (ViewVC)
+    </a>
+    <a href="http://repo.or.cz/w/polly-mirror.git">Browse (GitWeb)</a>
+  </div>
+</div>

Added: polly/trunk/www/passes.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/passes.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/passes.html (added)
+++ polly/trunk/www/passes.html Mon May  2 02:48:29 2011
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
+          "http://www.w3.org/TR/html4/strict.dtd">
+<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
+<html>
+<head>
+  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+  <title>Polly - The available LLVM passes</title>
+  <link type="text/css" rel="stylesheet" href="menu.css">
+  <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+<body>
+<!--#include virtual="menu.html.incl"-->
+<div id="content">
+  <!--*********************************************************************-->
+  <h1>Polly: The available LLVM passes</h1>
+  <!--*********************************************************************-->
+
+  <p>Polly consists of a set of LLVM passes.  </p>
+
+<h2>Front End</h2>
+<ul>
+<li><em>polly-prepare</em> Prepare code for Polly</li>
+<li><em>polly-region-simplify</em> Transform refined regions into simple regions</li>
+<li><em>polly-detect</em> Detect SCoPs in functions</li>
+<li><em>polly-analyze-ir</em> Analyse the LLVM-IR in the detected SCoPs</li>
+<li><em>polly-independent</em> Create independent blocks</li>
+<li><em>polly-scops</em> Create polyhedral description of SCoPs</li>
+</ul>
+<h2>Middle End</h2>
+<ul>
+<li><em>polly-dependences</em> Calculate the dependences in a SCoPs</li>
+<li><em>polly-interchange</em> Perform loop interchange (work in progress)</li>
+<li><em>polly-optimize</em> Optimize the SCoP using PoCC</li>
+<li>Import/Export
+<ul>
+<li><em>polly-export-cloog</em> Export the CLooG input file
+(Writes a .cloog file for each SCoP)</li>
+<li><em>polly-export</em> Export SCoPs with OpenScop library
+(Writes a .scop file for each SCoP)</li>
+<li><em>polly-import</em> Import SCoPs with OpenScop library
+(Reads a .scop file for each SCoP)</li>
+<li><em>polly-export-scoplib</em> Export SCoPs with ScopLib library
+(Writes a .scoplib file for each SCoP)</li>
+<li><em>polly-import-scoplib</em> Import SCoPs with ScopLib library
+(Reads a .scoplib file for each SCoP)</li>
+<li><em>polly-export-jscop</em> Export SCoPs as JSON
+(Writes a .jscop file for each SCoP)</li>
+<li><em>polly-import-jscop</em> Import SCoPs from JSON
+(Reads a .jscop file for each SCoP)</li>
+</ul>
+</li>
+<li>Graphviz
+<ul>
+<li><em>dot-scops</em> Print SCoPs of function</li>
+<li><em>dot-scops-only</em> Print SCoPs of function (without function bodies)</li>
+<li><em>view-scops</em> View SCoPs of function</li>
+<li><em>view-scops-only</em> View SCoPs of function (without function bodies)</li>
+</ul></li>
+</ul>
+<h2>Back End</h2>
+<ul>
+<li><em>polly-cloog</em> Execute CLooG code generation</li>
+<li><em>polly-codegen</em> Create LLVM-IR from the polyhedral information</li>
+</ul>
+
+</div>
+</body>
+</html>

Added: polly/trunk/www/performance.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/performance.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/performance.html (added)
+++ polly/trunk/www/performance.html Mon May  2 02:48:29 2011
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
+          "http://www.w3.org/TR/html4/strict.dtd">
+<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
+<html>
+<head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+  <title>Polly - Performance</title>
+  <link type="text/css" rel="stylesheet" href="menu.css">
+  <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+<body>
+<!--#include virtual="menu.html.incl"-->
+<div id="content">
+<h1>Polly: Performance</h1>
+
+<p>To evaluate the performance benefits Polly currently provides we compiled the
+<a href="http://www.cse.ohio-state.edu/~pouchet/software/polybench/">Polybench
+2.0</a> benchmark suite.  Each benchmark was run with double precision floating
+point values on an Intel Core Xeon X5670 CPU @ 2.93GHz (12 cores, 24 thread)
+system. We used <a href="http://pocc.sf.net">PoCC</a> and the included <a
+href="http://pluto-compiler.sf.net">Pluto</a> transformations to optimize the
+code. The source code of Polly and LLVM/clang was checked out on 
+25/03/2011.</p>
+
+<p>The results shown were created fully automatically without manual
+interaction. We did not yet spend any time to tune the results. Hence
+further improvments may be achieved by tuning the code generated by Polly, the
+heuristics used by Pluto or by investigating if more code could be optimized.
+As Pluto was never used at such a low level, its heuristics are probably
+far from perfect. Another area where we expect larger performance improvements
+is the SIMD vector code generation. At the moment, it rarely yields to
+performance improvements, as we did not yet include vectorization in our
+heuristics. By changing this we should be able to significantly increase the
+number of test cases that show improvements.</p>
+
+<p>The polybench test suite contains computation kernels from linear algebra
+routines, stencil computations, image processing and data mining. Polly
+recognices the majority of them and is able to show good speedup. However,
+to show similar speedup on larger examples like the SPEC CPU benchmarks Polly
+still misses support for integer casts, variable-sized multi-dimensional arrays
+and probably several other construts. This support is necessary as such
+constructs appear in larger programs, but not in our limited test suite.
+
+<h2> Sequential runs</h2>
+
+For the sequential runs we used Polly to create a program structure that is
+optimized for data-locality. One of the major optimizations performed is tiling.
+The speedups shown are without the use of any multi-core parallelism. No
+additional hardware is used, but the single available core is used more
+efficiently.
+<h3> Small data size</h3>
+<img src="images/performance/sequential-small.png" /><br />
+<h3> Large data size</h3>
+<img src="images/performance/sequential-large.png" />
+<h2> Parallel runs</h2>
+For the parallel runs we used Polly to expose parallelism and to add calls to an
+OpenMP runtime library. With OpenMP we can use all 12 hardware cores
+instead of the single core that was used before. We can see that in several
+cases we obtain more than linear speedup. This additional speedup is due to
+improved data-locality.
+<h3> Small data size</h3>
+<img src="images/performance/parallel-small.png" /><br />
+<h3> Large data size</h3>
+<img src="images/performance/parallel-large.png" />
+</div>
+</body>
+</html>

Added: polly/trunk/www/publications.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/publications.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/publications.html (added)
+++ polly/trunk/www/publications.html Mon May  2 02:48:29 2011
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
+          "http://www.w3.org/TR/html4/strict.dtd">
+<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
+<html>
+<head>
+  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+  <title>Polly - Publications</title>
+  <link type="text/css" rel="stylesheet" href="menu.css">
+  <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+<body>
+<!--#include virtual="menu.html.incl"-->
+<div id="content">
+  <!--*********************************************************************-->
+  <h1>Polly: Publications</h1>
+  <!--*********************************************************************-->
+
+  <h2> 2011 </h2>
+  <ul>
+  <li>Polly - Polyhedral Optimization in LLVM<br />
+  Tobias Grosser, Hongbin Zheng, Ragesh Aloor, Andreas Simbürger, Armin
+  Größlinger, Louis-Noël Pouchet<br />
+  IMPACT at CGO 2011 <br />
+  <a
+  href="publications/grosser-impact-2011.pdf">Paper</a>, <a
+  href="publications/grosser-impact-2011-slides.pdf">Slides
+  </a>
+  </li>
+  </ul>
+  <h2> 2010 </h2>
+  <ul>
+  <li>Polly - Polyhedral Transformations for LLVM<br />
+  Tobias Grosser, Hongbin Zheng<br />
+  LLVM Developer Metting <br /><a
+  href="http://llvm.org/devmtg/2010-11/Grosser-Polly.pdf">Slides</a>, <a
+  href="http://llvm.org/devmtg/2010-11/videos/Grosser_Polly-desktop.mp4">Video
+  (Computer)</a>, <a
+  href="http://llvm.org/devmtg/2010-11/videos/Grosser_Polly-mobile.mp4">Video
+  (Mobile)</a></li>
+  </ul>
+</div>
+</body>
+</html>

Added: polly/trunk/www/publications/grosser-impact-2011-slides.pdf
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/publications/grosser-impact-2011-slides.pdf?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/publications/grosser-impact-2011-slides.pdf (added) and polly/trunk/www/publications/grosser-impact-2011-slides.pdf Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/publications/grosser-impact-2011.pdf
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/publications/grosser-impact-2011.pdf?rev=130689&view=auto
==============================================================================
Binary files polly/trunk/www/publications/grosser-impact-2011.pdf (added) and polly/trunk/www/publications/grosser-impact-2011.pdf Mon May  2 02:48:29 2011 differ

Added: polly/trunk/www/todo.html
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/www/todo.html?rev=130689&view=auto
==============================================================================
--- polly/trunk/www/todo.html (added)
+++ polly/trunk/www/todo.html Mon May  2 02:48:29 2011
@@ -0,0 +1,363 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
+          "http://www.w3.org/TR/html4/strict.dtd">
+<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
+<html>
+<head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+  <title>Polly - Todo</title>
+  <link type="text/css" rel="stylesheet" href="menu.css">
+  <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+<body>
+<!--#include virtual="menu.html.incl"-->
+<div id="content">
+<h3> Setup infrastructure at LLVM </h3>
+
+<p>We are currently moving to the LLVM infrastructure
+</p>
+<table class="wikitable" cellpadding="2">
+
+<tbody><tr>
+<th width="400px"> Task
+</th><th width="150px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Move to LLVM svn
+</th><td align="center"> done
+</td><td> Tobias
+
+</td></tr>
+<tr>
+<th align="left"> Get git mirror at llvm.org/git/polly.git
+</th><td align="center"> done
+</td><td> Tobias
+</td></tr>
+<tr>
+<th align="left"> Setup on commit mails
+</th><td align="center">
+</td><td> Tobias
+</td></tr>
+<tr>
+
+<th align="left"> Add LLVM Bugzilla category
+</th></tr>
+<tr>
+<th align="left"> Create polly.llvm.org website
+</th><td>
+</td></tr>
+<tr>
+<th align="left"> Add Polly buildbot that runs 'polly-test'
+</th><td>
+</td></tr>
+<tr>
+<th align="left"> Run nightly performance/coverage tests with the llvm
+test-suite
+</th><td>
+
+</td></tr>
+</tbody></table>
+<h3> Phase 2 </h3>
+<p>The second phase of Polly can build on a robust, but very limited framework.
+In this phase work on removing limitations and extending the framework is
+planned. Also we plan the first very simple transformations. Furthermore the
+build system will be improved to simplify deployment.
+</p>
+<table class="wikitable" cellpadding="2">
+
+<tbody><tr>
+
+<th colspan="3" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> Frontend
+</th></tr>
+<tr>
+<th width="400px"> Task
+</th><th width="150px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Support for casts in expressions
+</th><td>
+</td><td>
+</td><td>
+</td></tr>
+
+<tr>
+<th align="left"> Support multi dimensional arrays.
+</th><td align="center"> planning
+</td><td> Tobias
+</td></tr>
+<tr>
+<th align="left"> Alias sets
+</th></tr>
+<tr>
+<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> Middle end
+</th></tr>
+<tr>
+
+<th width="400px"> Task
+</th><th width="80px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Implement ISL dependency analysis pass
+</th><td align="center"> working
+</td><td> Tobias
+</td></tr>
+<tr>
+<th align="left"> Connect pocc/pluto
+
+</th><td align="center"> working
+</td><td> Tobias
+</td></tr>
+<tr>
+<th align="left"> Finish OpenSCoP support
+</th><td>
+</td><td>
+</td><td>
+</td></tr>
+
+<tr>
+<th align="left"> Add SCoPLib 0.2 support to connect pocc
+</th><td align="center">done
+
+</td><td> Tobias
+</td></tr>
+<tr>
+<th align="left"> Write simple loop blocking
+</th><td>
+</td><td>
+</td><td>
+</td></tr>
+<tr>
+<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> Backend
+</th></tr>
+<tr>
+<th width="400px"> Task
+
+</th><th width="80px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Code generation for non 64bit targets
+</th><td>
+</td><td>
+</td><td>
+</td></tr>
+<tr>
+<th align="left"> Add write support for data access functions
+</th><td>
+</td><td>
+</td><td>
+
+</td></tr>
+<tr>
+<th align="left"> Create vector loops
+</th><td align="center">70% done
+</td><td>Tobias
+</td></tr>
+<tr>
+<th align="left">Create OpenMP
+loops
+</th><td align="center">90% done
+</td><td> Raghesh & Tobias
+
+</td></tr>
+<tr>
+<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> General tasks
+</th></tr>
+<tr>
+<th width="300px"> Task
+</th><th width="80px"> Status
+</th><th>Owner
+</th></tr>
+
+<tr>
+<th align="left"> Commit RegionPass patch upstream
+</th><td align="center"> done
+
+</td><td> Tobias
+</td></tr>
+<tr>
+<th align="left"> Build against an installed LLVM
+</th><td> works for cmake
+</td><td> ether
+</td></tr>
+<tr>
+<th align="left"> Setup buildbot regression testers using LNT
+</th><td>
+</td><td>
+</td><td>
+
+</td></tr>
+</tbody></table>
+<h3>Phase 1 - Get something
+working (Finished October 2010)</span></h3>
+<p>The first iteration of this project aims to create a minimal working version
+of this framework, that is capable to transform an LLVM-IR program to the
+polyhedral model
+and back to LLVM-IR without applying any transformations.
+</p>
+<table class="wikitable" cellpadding="2">
+
+<tbody><tr>
+<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> Frontend
+</th></tr>
+
+<tr>
+<th width="300px"> Task
+</th><th width="150px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Region detection
+</td><td> works + Committed upstream
+</td><td>Ether
+</td></tr>
+<tr>
+<th align="left"> Access Functions
+</td><td> Working
+</td><td> John + Ether
+</td></tr>
+<tr>
+<th align="left"> Alias sets
+</td><td> Still open
+</td></tr>
+<tr>
+<th align="left"> Scalar evolution to affine expression
+</td><td> Done
+
+</td><td>
+Ether
+</td></tr>
+<tr>
+<th align="left"> SCoP extraction
+</td><td> Working
+</td><td>Tobias + Ether
+
+</td></tr>
+<tr>
+<th align="left"> SCoPs to polyhedral model
+</td><td> Working
+</td><td>Tobias + Ether
+</td></tr>
+<tr>
+<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> Middle end
+
+</th></tr>
+<tr>
+<th width="300px"> Task
+</th><th width="80px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Define polyhedral description
+</td><td> Working
+</td><td>Tobias
+
+</td></tr>
+<tr>
+<th align="left"> Import/Export using openscop
+</td><td> working
+</td><td>Tobias
+</td></tr>
+<tr>
+<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> Backend
+</th></tr>
+<tr>
+
+<th width="300px"> Task
+</th><th width="80px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Create LLVM-IR using CLooG
+</td><td> Working
+</td><td> Tobias
+
+</td></tr>
+<tr>
+<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
+239);"> General tasks
+</th></tr>
+<tr>
+<th width="300px"> Task
+</th><th width="80px"> Status
+</th><th>Owner
+</th></tr>
+<tr>
+<th align="left"> Setup git repositories
+
+</td><td> Done
+</td><td> Tobias
+</td></tr>
+<tr>
+<th align="left"> Add CLooG/isl to build system
+</td><td> Works on Unix
+</td><td> Tobias
+
+</td></tr></tbody></table>
+<h3>Further projects </h3>
+<p>There are several great projects related to polly that can already be started
+or are possible in the near future.  </p>
+<h4>Extend the post dominance analysis for infinite loops (small)</h4>
+
+<p>At the moment the post dominance analysis cannot handle infinite loops. All
+basic blocks in the CFG that do not return are - at the moment - not part of the
+post dominance tree.
+However by adding some virtual edges, they could be added to the post dominator
+tree. Where to add the edges needs some research.
+</p><p>This is a small project, that is is well defined. As it is directly in
+LLVM it can be easily committed upstream. It is useful for polly, as the
+RegionInfo pass will be able to detect regions in parts of the CFG that never
+return.
+</p><p><i>A good starter to get into LLVM</i>
+</p>
+<h4>Vectorization </h4>
+<p>It is planned to use Polly to support vectorization in LLVM.
+</p><p>The basic idea is to use Polly and the polyhedral tools to transform code
+such that the innermost loops can be executed in parallel. Afterwards during
+code generation in LLVM the loops will be created using vector instructions.
+</p><p>To start we plan to use <a href="http://pluto-compiler.sf.net"
+class="external text" title="http://pluto-compiler.sf.net"
+rel="nofollow">Pluto</a> to transform the loop nests. Pluto can generate vector
+parallel code and annotate the vector parallel loops. Some impressive results
+were shown on code that was afterwards vectorized by the icc enforcing
+vectorization. We believe LLVM can do even better, as it can interact directly
+with the polyhedral information.
+
+</p><p>As an example simple matrix multiplication:
+</p>
+<pre>
+for(i=0; i<M; i++)
+  for(j=0; j<N; j++)
+    for(k=0; k<K; k++)
+      C[i][j] = beta*C[i][j] + alpha*A[i][k] * B[k][j];
+</pre>
+<p>After plutos transformations with added tiling and
+vectorization hints:
+</p>
+<pre>
+if ((K >= 1) && (M >= 1) && (N >= 1))
+  for (t1=0;t1<=floord(M-1,32);t1++)
+    for (t2=0;t2<=floord(N-1,32);t2++)
+      for (t3=0;t3<=floord(K-1,32);t3++)
+        for (t4=32*t1;t4<=min(M-1,32*t1+31);t4++)
+          for (t5=32*t3;t5<=min(K-1,32*t3+31);t5++) {
+            lbv=32*t2;
+            ubv=min(N-1,32*t2+31);
+            #pragma ivdep
+            #pragma vector always
+            for (t6=lbv; t6<=ubv; t6++)
+              C[t4][t6]=beta*C[t4][t6]+alpha*A[t4][t5]*B[t5][t6];;
+         }
+</pre>
+<p>In this example the innermost loop is parallel without any dependencies. </p>
+</div>
+</body>
+</html>





More information about the llvm-commits mailing list