<div dir="ltr">Nadav,<div><br></div><div style>Yes, thank you, this works for me as well. One final related question I hope you can educate me on:</div><div style><br></div><div style>I'm trying to apply code vectorization within the context of the JIT execution engine. I've tried to initialize my module and execution engine with information about the target triple and the cpu akin to what worked from the command line. Unfortunately, I'm still encountering the same error I mentioned in my first post:</div>
<div style><br></div><div style>// Pseudo code InitializeNativeTarget();</div><div style>Module *m = new Module("test", getGlobalContext());</div><div style>m->setTargetTriple(sys::getProcessTriple()); // also tried "x86_64"</div>
<div style>ExecutionEngine *ee = EngineBuilder(m).setMCPU(sys::getHostCPUName()).setEngineKind(EngineKind::JIT); // also tried MCPU = "corei7-avx"</div><div style>initializeScalarOpts(*PassRegistry::getPassRegistry());</div>
<div style>FunctionPassManager *fpm = new FunctionPassManager(m);</div><div style>fpm->add(createVerifierPass(PrintMessageAction));</div><div style>fpm->add(new DataLayout(*ee->getDataLayout())); // Is this the correct idiom?</div>
<div style>fpm->add(createBasicAliasAnalysisPass());</div><div style>fpm->add(createLICMPass());</div><div style>fpm->add(createLoopVectorizePass());</div><div style>fpm->add(createPrintFunctionPass());</div><div style>
DebugFlag = true;</div><div style>Function *f = // Build function with IRBuilder (IR code included in first post)</div><div style>fpm->run(*f);</div><div style><br></div><div style>Do you notice anything obviously wrong with this? Would a complete minimal reproducing example be helpful?<br>
</div><div style><br></div><div style>Thanks again,</div><div style>Josh</div><div style><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 10, 2013 at 1:27 AM, Nadav Rotem <span dir="ltr"><<a href="mailto:nrotem@apple.com" target="_blank">nrotem@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>Hi Josh, </div><div><br></div><div>This line works for me:</div><div><br></div><div>
opt file.ll -loop-vectorize -S -o - -mtriple=x86_64 -mcpu=corei7-avx -debug<br><br></div><div>You need to specify the triple on the command line if it is not inside the module. </div><div><br></div><div>Thanks,</div><div>
Nadav</div><div><div class="h5"><div><br></div><div><br></div><br><div><div>On May 9, 2013, at 5:53 PM, Joshua Klontz <<a href="mailto:josh.klontz@gmail.com" target="_blank">josh.klontz@gmail.com</a>> wrote:</div><br>
<blockquote type="cite"><div style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div dir="ltr">Nadav,<div><br></div><div>Please forgive my ignorance, but 'opt -mcpu=corei7 -loop-vectorize -S -debug double.ll' doesn't appear to make a difference. In fact it seems to be ignored as garbage values for -mcpu don't raise an error. Am I overlooking something else also?</div>
<div><br></div><div>Many Thanks,</div><div>Josh</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 9, 2013 at 6:06 PM, Nadav Rotem<span> </span><span dir="ltr"><<a href="mailto:nrotem@apple.com" target="_blank">nrotem@apple.com</a>></span><span> </span>wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Josh, <div><br></div>
<div>Your modules does not have a triple, so the target machine and TargetTransformInfo have no way of knowing if you are running on a machine with vector registers.  Try adding the '-mcpu=XXXX' to opt and see what happens. </div>
<div><br></div><div>Thanks,</div><div>Nadav</div><div><br><div><div>On May 9, 2013, at 1:42 PM, Josh Klontz <<a href="mailto:josh.klontz@gmail.com" target="_blank">josh.klontz@gmail.com</a>> wrote:</div><br><blockquote type="cite">
<div style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Hi! I am trying to get the loop vectorizer to work on a simple example<br>(<a href="http://pastebin.com/tGhpc4y0" target="_blank">http://pastebin.com/tGhpc4y0</a>) that doubles every element in a vector.<br>
<br>I've found that 'opt -loop-vectorize -force-vector-width=4 -S -debug<br>double.ll' works as expected. However, removing the -force-vector-width flag<br>results in no vectorization. From the debug output I can see that the issue<br>
boils down to:<br><br>LV: The Widest type: 32 bits.<br>LV: The Widest register is:32bits.<br><br>I tried to work back through the source code to figure out why the widest<br>register is incorrect, though I get lost following the code logic for how<br>
TargetTransformInfo gets initialized. Therefore, I have two questions:<br><br>1) Can -force-vector-width be specified from the C++ API? And if so, how?<br>2) What am I neglecting to do so that TargetTransformInfo is set correctly<br>
and vectorization happens without forcing a vector width? Ultimately I would<br>like use vectorization in conjunction with the JIT ExecutionEngine.<br><br>Thank you to those of you who have answered my questions in the past, the<br>
answers have helped tremendously and I am extremely grateful!<br><br>Kindly,<br>Josh<br><br><br><br><span><font color="#888888"><br>--<br>View this message in context:<span> </span><a href="http://llvm.1065342.n5.nabble.com/Simple-Loop-Vectorize-Question-tp57584.html" target="_blank">http://llvm.1065342.n5.nabble.com/Simple-Loop-Vectorize-Question-tp57584.html</a><br>
Sent from the LLVM - Dev mailing list archive at<span> </span><a href="http://nabble.com/" target="_blank">Nabble.com</a>.<br>_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a><span> </span>        <a href="http://llvm.cs.uiuc.edu/" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></font></span></div></blockquote></div></div></div></blockquote></div></div></div></blockquote>
</div><br></div></div></div></blockquote></div><br></div>