<div id="head" style="position: relative">
<h1><span><a href="/">Polly</a></span></h1>
<h2><span>LLVM Framework for High-Level Loop and Data-Locality
Optimizations</span></h2>


<p> Hexagonal tiling in 3D</p>

</div>
<div id="menu">
  <a href="http://llvm.org">llvm.org</a>
  <div class="submenu">
    <label>Information</label>
    <a href="/index.html">Overview and News</a>
    <a href="/get_started.html">Get and Install</a>
    </a>
    <a href="/docs">Documentation</a>
    <a href="/performance.html">Performance</a>
    <a href="/publications.html">Publications</a>
    <a href="/contributors.html">Contributors</a>
    <a href="/todo.html">TODO</a>
    <a href="/changelog.html">ChangeLog</a>
    <a href="/projects.html">Open Projects</a>
  </div>

  <div class="submenu">
    <label>Development </label>
    <a href="http://lists.llvm.org/mailman/listinfo/llvm-commits">
      Mailing List (patches)
    </a>
    <a href="http://groups.google.com/group/polly-dev">Mailing List (discussion)</a>
    <a href="/bugs.html">Bug Reports</a>
    <a href="http://lab.llvm.org:8011/console?category=polly">Buildbot</a>
    <a href="http://lab.llvm.org:8080/coverage/coverage-reports/polly/index.html">Code Coverage</a>
    <a href="http://llvm.org/reports/scan-build/">Static analysis</a>
    <a href="/doxygen/">Doxygen</a>
    <a href="https://github.com/llvm/llvm-project/tree/master/polly">Source @ GitHub</a>
  </div>

  <div class="submenu">
    <label>Resources</label>
    <br>
    <a href="https://www.pollylabs.org"><img style="padding-left: 3.5em;
    padding-right: 1em; width:10em" src="/images/pollylabs.png" /></a>
    <div class="container" style="width: 240px">
      <div class="inner_pollylabs" style="width: 240px"></div>
    </div>
    <a href="https://www.polyhedral.info">polyhedral.info</a>
    <div class="container" style="width: 240px">
      <div class="inner_polyinfo" style="width: 240px"></div>
    </div>
    <br>
  </div>
</div>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-66123869-2', 'auto');
  ga('send', 'pageview');

</script>

<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script>

$(document).ready(function() {
    
    var yql =
    "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20rss%20where%20url%3D%22http%3A%2F%2Fpollylabs.org%2Frss.xml%22%20LIMIT%205&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
    
    $.getJSON(yql, function(res) {
	str = "<div class=\"rss-box\"><ul>";
	for (var i = 0; i < res.query.count; i++) {
	  var it = res.query.results.item[i];
          var date = it.pubDate.substr(5, 11);
	  str = str + "<li class=\"rss-item\" ><a href=\"" + it.link + "\">";
	  str = str + "<span class=\"rss-title\">" + res.query.results.item[i].title + "</span> ";
	  str = str + "<span class=\"rss-date\">(" + date + ")</span>";
          str = str + "</a></li>";
	}
	str = str + "<li class=\"rss-item\"><a href=\"http://pollylabs.org/blog.html\"><span class=\"rss-title\"> ...  more news </span></a></li>";
	str = str + "</ul></div>";
	$( ".inner_pollylabs" ).append(str);
    }, "jsonp");

    var yql_polyinfo =
    "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20rss%20where%20url%3D%22http%3A%2F%2Fpolyhedral.info%2Frss.xml%22%20LIMIT%205&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
    
    $.getJSON(yql_polyinfo, function(res) {
	str = "<div class=\"rss-box\"><ul>";
	for (var i = 0; i < res.query.count; i++) {
	  var it = res.query.results.item[i];
          var date = it.pubDate.substr(5, 11);
	  str = str + "<li class=\"rss-item\" ><a href=\"" + it.link + "\">";
	  str = str + "<span class=\"rss-title\">" + res.query.results.item[i].title + "</span> ";
	  str = str + "<span class=\"rss-date\">(" + date + ")</span>";
          str = str + "</a></li>";
	}
	str = str + "<li class=\"rss-item\"><a href=\"http://polyhedral.info/blog.html\"><span class=\"rss-title\"> ...  more news </span></a></li>";
	str = str + "</ul></div>";
	$( ".inner_polyinfo" ).append(str);
	console.log(str);
    }, "jsonp");
    
});

</script>
