<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[176890] trunk/Source/JavaScriptCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/176890">176890</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-12-05 16:29:18 -0800 (Fri, 05 Dec 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[JSC][FTL] Add the data layout to the module and fix the pass order.
https://bugs.webkit.org/show_bug.cgi?id=138748

Patch by Juergen Ributzka &lt;juergen@apple.com&gt; on 2014-12-05
Reviewed by Oliver Hunt.

This adds the data layout to the module, so it can be used by all
optimization passes in the LLVM optimizer pipeline. This also allows
FastISel to select more instructions, because less non-legal types are
generated.

Also fix the order of the alias analysis passes in the optimization
pipeline.

* ftl/FTLCompile.cpp:
(JSC::FTL::mmAllocateDataSection):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLCompilecpp">trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (176889 => 176890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-12-06 00:28:49 UTC (rev 176889)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-12-06 00:29:18 UTC (rev 176890)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2014-12-05  Juergen Ributzka  &lt;juergen@apple.com&gt;
+
+        [JSC][FTL] Add the data layout to the module and fix the pass order.
+        https://bugs.webkit.org/show_bug.cgi?id=138748
+
+        Reviewed by Oliver Hunt.
+
+        This adds the data layout to the module, so it can be used by all
+        optimization passes in the LLVM optimizer pipeline. This also allows
+        FastISel to select more instructions, because less non-legal types are
+        generated.
+        
+        Also fix the order of the alias analysis passes in the optimization
+        pipeline.
+
+        * ftl/FTLCompile.cpp:
+        (JSC::FTL::mmAllocateDataSection):
+
</ins><span class="cx"> 2014-12-05  Geoffrey Garen  &lt;ggaren@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Removed an unused function.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLCompilecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp (176889 => 176890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2014-12-06 00:28:49 UTC (rev 176889)
+++ trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2014-12-06 00:29:18 UTC (rev 176890)
</span><span class="lines">@@ -633,33 +633,35 @@
</span><span class="cx">             CRASH();
</span><span class="cx">         }
</span><span class="cx"> 
</span><ins>+        // The data layout also has to be set in the module. Get the data layout from the MCJIT and apply
+        // it to the module.
+        LLVMTargetMachineRef targetMachine = llvm-&gt;GetExecutionEngineTargetMachine(engine);
+        LLVMTargetDataRef targetData = llvm-&gt;GetExecutionEngineTargetData(engine);
+        llvm-&gt;SetDataLayout(state.module, llvm-&gt;CopyStringRepOfTargetData(targetData));
+
</ins><span class="cx">         LLVMPassManagerRef functionPasses = 0;
</span><span class="cx">         LLVMPassManagerRef modulePasses;
</span><del>-    
</del><ins>+
</ins><span class="cx">         if (Options::llvmSimpleOpt()) {
</span><span class="cx">             modulePasses = llvm-&gt;CreatePassManager();
</span><del>-            llvm-&gt;AddTargetData(llvm-&gt;GetExecutionEngineTargetData(engine), modulePasses);
-
-            LLVMTargetMachineRef targetMachine = llvm-&gt;GetExecutionEngineTargetMachine(engine);
-             
</del><ins>+            llvm-&gt;AddTargetData(targetData, modulePasses);
</ins><span class="cx">             llvm-&gt;AddAnalysisPasses(targetMachine, modulePasses);
</span><span class="cx">             llvm-&gt;AddPromoteMemoryToRegisterPass(modulePasses);
</span><del>- 
</del><span class="cx">             llvm-&gt;AddGlobalOptimizerPass(modulePasses);
</span><del>- 
</del><span class="cx">             llvm-&gt;AddFunctionInliningPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddPruneEHPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddGlobalDCEPass(modulePasses);
</span><del>-             
</del><span class="cx">             llvm-&gt;AddConstantPropagationPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddAggressiveDCEPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddInstructionCombiningPass(modulePasses);
</span><ins>+            // BEGIN - DO NOT CHANGE THE ORDER OF THE ALIAS ANALYSIS PASSES
+            llvm-&gt;AddTypeBasedAliasAnalysisPass(modulePasses);
</ins><span class="cx">             llvm-&gt;AddBasicAliasAnalysisPass(modulePasses);
</span><del>-            llvm-&gt;AddTypeBasedAliasAnalysisPass(modulePasses);
</del><ins>+            // END - DO NOT CHANGE THE ORDER OF THE ALIAS ANALYSIS PASSES
</ins><span class="cx">             llvm-&gt;AddGVNPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddCFGSimplificationPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddDeadStoreEliminationPass(modulePasses);
</span><del>- 
</del><ins>+
</ins><span class="cx">             llvm-&gt;RunPassManager(modulePasses, state.module);
</span><span class="cx">         } else {
</span><span class="cx">             LLVMPassManagerBuilderRef passBuilder = llvm-&gt;PassManagerBuilderCreate();
</span></span></pre>
</div>
</div>

</body>
</html>