<div dir="ltr">FWIW, this commit broke the Halide buildbots too. One of the tests started producing a different output. I don't *think* there's undefined behavior in the test, but I could be wrong. I'll investigate further and open a bug if appropriate.<div><br></div><div>- Andrew</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 21, 2017 at 10:12 AM, Dehao Chen via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This is weird:<br>
<br>
* comparing with<br>
<a href="http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/3128" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/<wbr>builders/clang-ppc64le-linux-<wbr>lnt/builds/3128</a><br>
and <a href="http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/3129" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/<wbr>builders/clang-ppc64le-linux-<wbr>lnt/builds/3129</a>,<br>
step #10 fails at 3128, while fixed at 3129<br>
* oggenc was not built O3, so my patch should not change the codegen<br>
of that binary.<br>
* comparing at test.log between 2 builds yields very different log data.<br>
* this is the only failing report for this patch.<br>
<br>
So my question is, is it possible that there is some configuration<br>
change for that bot between 3128 and 3129?<br>
<br>
Thanks,<br>
Dehao<br>
<div class="HOEnZb"><div class="h5"><br>
On Mon, Feb 20, 2017 at 1:40 PM, Bill Seurer <<a href="mailto:seurer@linux.vnet.ibm.com">seurer@linux.vnet.ibm.com</a>> wrote:<br>
> This change breaks one of the tests from the testsuite when run by lnt on<br>
> powerpcle.  See<br>
> <a href="http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/3129" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/<wbr>builders/clang-ppc64le-linux-<wbr>lnt/builds/3129</a><br>
><br>
> Some info from a local run I did:<br>
><br>
> ------------------------------<wbr>------------------------------<wbr>---<br>
>>>> =========<br>
>>>> '/home/seurer/sandbox/test-<wbr>2017-02-20_19-32-13/<wbr>MultiSource/Applications/<wbr>oggenc/oggenc'<br>
>>>> Program<br>
> ------------------------------<wbr>------------------------------<wbr>---<br>
><br>
> TEST-PASS: compile<br>
> /home/seurer/sandbox/test-<wbr>2017-02-20_19-32-13/<wbr>MultiSource/Applications/<wbr>oggenc/oggenc<br>
> TEST-RESULT-compile-success: pass<br>
> TEST-RESULT-compile-hash: de7b7004f7c0796635bcfacf44886a<wbr>6a<br>
> TEST-RESULT-compile-time: user 19.615300<br>
> TEST-RESULT-compile-real-time: real 19.785200<br>
><br>
> TEST-FAIL: exec<br>
> /home/seurer/sandbox/test-<wbr>2017-02-20_19-32-13/<wbr>MultiSource/Applications/<wbr>oggenc/oggenc<br>
> TEST-RESULT-exec-time: user       0.1646<br>
> TEST-RESULT-exec-real-time: real       0.1680<br>
><br>
><br>
><br>
> On 02/17/2017 08:46 PM, Dehao Chen via llvm-commits wrote:<br>
>><br>
>> Author: dehao<br>
>> Date: Fri Feb 17 21:46:51 2017<br>
>> New Revision: 295538<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=295538&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=295538&view=rev</a><br>
>> Log:<br>
>> Increases full-unroll threshold.<br>
>><br>
>> Summary:<br>
>> The default threshold for fully unroll is too conservative. This patch<br>
>> doubles the full-unroll threshold<br>
>><br>
>> This change will affect the following speccpu2006 benchmarks (performance<br>
>> numbers were collected from Intel Sandybridge):<br>
>><br>
>> Performance:<br>
>><br>
>> 403     0.11%<br>
>> 433     0.51%<br>
>> 445     0.48%<br>
>> 447     3.50%<br>
>> 453     1.49%<br>
>> 464     0.75%<br>
>><br>
>> Code size:<br>
>><br>
>> 403     0.56%<br>
>> 433     0.96%<br>
>> 445     2.16%<br>
>> 447     2.96%<br>
>> 453     0.94%<br>
>> 464     8.02%<br>
>><br>
>> The compiler time overhead is similar with code size.<br>
>><br>
>> Reviewers: davidxl, mkuper, mzolotukhin, hfinkel, chandlerc<br>
>><br>
>> Reviewed By: hfinkel, chandlerc<br>
>><br>
>> Subscribers: mehdi_amini, zzheng, efriedma, haicheng, hfinkel,<br>
>> llvm-commits<br>
>><br>
>> Differential Revision: <a href="https://reviews.llvm.org/D28368" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D28368</a><br>
>><br>
>> Modified:<br>
>>      llvm/trunk/include/llvm/<wbr>Transforms/Scalar.h<br>
>>      llvm/trunk/include/llvm/<wbr>Transforms/Scalar/<wbr>LoopUnrollPass.h<br>
>>      llvm/trunk/lib/Passes/<wbr>PassBuilder.cpp<br>
>>      llvm/trunk/lib/Transforms/IPO/<wbr>PassManagerBuilder.cpp<br>
>>      llvm/trunk/lib/Transforms/<wbr>Scalar/LoopUnrollPass.cpp<br>
>>      llvm/trunk/test/Transforms/<wbr>LoopVectorize/X86/metadata-<wbr>enable.ll<br>
>><br>
>> Modified: llvm/trunk/include/llvm/<wbr>Transforms/Scalar.h<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar.h?rev=295538&r1=295537&r2=295538&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Transforms/Scalar.h?rev=<wbr>295538&r1=295537&r2=295538&<wbr>view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/include/llvm/<wbr>Transforms/Scalar.h (original)<br>
>> +++ llvm/trunk/include/llvm/<wbr>Transforms/Scalar.h Fri Feb 17 21:46:51 2017<br>
>> @@ -181,11 +181,11 @@ Pass *createLoopInstSimplifyPass();<br>
>>   //<br>
>>   // LoopUnroll - This pass is a simple loop unrolling pass.<br>
>>   //<br>
>> -Pass *createLoopUnrollPass(int Threshold = -1, int Count = -1,<br>
>> +Pass *createLoopUnrollPass(int OptLevel = 2, int Threshold = -1, int<br>
>> Count = -1,<br>
>>                              int AllowPartial = -1, int Runtime = -1,<br>
>>                              int UpperBound = -1);<br>
>>   // Create an unrolling pass for full unrolling that uses exact trip<br>
>> count only.<br>
>> -Pass *createSimpleLoopUnrollPass();<br>
>> +Pass *createSimpleLoopUnrollPass(<wbr>int OptLevel);<br>
>><br>
>> //===-------------------------<wbr>------------------------------<wbr>---------------===//<br>
>>   //<br>
>><br>
>> Modified: llvm/trunk/include/llvm/<wbr>Transforms/Scalar/<wbr>LoopUnrollPass.h<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar/LoopUnrollPass.h?rev=295538&r1=295537&r2=295538&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Transforms/Scalar/<wbr>LoopUnrollPass.h?rev=295538&<wbr>r1=295537&r2=295538&view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/include/llvm/<wbr>Transforms/Scalar/<wbr>LoopUnrollPass.h (original)<br>
>> +++ llvm/trunk/include/llvm/<wbr>Transforms/Scalar/<wbr>LoopUnrollPass.h Fri Feb 17<br>
>> 21:46:51 2017<br>
>> @@ -18,9 +18,10 @@ namespace llvm {<br>
>>     class LoopUnrollPass : public PassInfoMixin<LoopUnrollPass> {<br>
>>     const bool AllowPartialUnrolling;<br>
>> +  const int OptLevel;<br>
>>   -  explicit LoopUnrollPass(bool AllowPartialUnrolling)<br>
>> -      : AllowPartialUnrolling(<wbr>AllowPartialUnrolling) {}<br>
>> +  explicit LoopUnrollPass(bool AllowPartialUnrolling, int OptLevel)<br>
>> +      : AllowPartialUnrolling(<wbr>AllowPartialUnrolling), OptLevel(OptLevel)<br>
>> {}<br>
>>     public:<br>
>>     /// Create an instance of the loop unroll pass that will support both<br>
>> full<br>
>> @@ -28,16 +29,16 @@ public:<br>
>>     ///<br>
>>     /// This uses the target information (or flags) to control the<br>
>> thresholds for<br>
>>     /// different unrolling stategies but supports all of them.<br>
>> -  static LoopUnrollPass create() {<br>
>> -    return LoopUnrollPass(/*<wbr>AllowPartialUnrolling*/ true);<br>
>> +  static LoopUnrollPass create(int OptLevel = 2) {<br>
>> +    return LoopUnrollPass(/*<wbr>AllowPartialUnrolling*/ true, OptLevel);<br>
>>     }<br>
>>       /// Create an instance of the loop unroll pass that only does full<br>
>> loop<br>
>>     /// unrolling.<br>
>>     ///<br>
>>     /// This will disable any runtime or partial unrolling.<br>
>> -  static LoopUnrollPass createFull() {<br>
>> -    return LoopUnrollPass(/*<wbr>AllowPartialUnrolling*/ false);<br>
>> +  static LoopUnrollPass createFull(int OptLevel = 2) {<br>
>> +    return LoopUnrollPass(/*<wbr>AllowPartialUnrolling*/ false, OptLevel);<br>
>>     }<br>
>>       PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,<br>
>><br>
>> Modified: llvm/trunk/lib/Passes/<wbr>PassBuilder.cpp<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=295538&r1=295537&r2=295538&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Passes/<wbr>PassBuilder.cpp?rev=295538&r1=<wbr>295537&r2=295538&view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/lib/Passes/<wbr>PassBuilder.cpp (original)<br>
>> +++ llvm/trunk/lib/Passes/<wbr>PassBuilder.cpp Fri Feb 17 21:46:51 2017<br>
>> @@ -334,7 +334,7 @@ PassBuilder::<wbr>buildFunctionSimplification<br>
>>     LPM2.addPass(<wbr>IndVarSimplifyPass());<br>
>>     LPM2.addPass(<wbr>LoopIdiomRecognizePass());<br>
>>     LPM2.addPass(LoopDeletionPass(<wbr>));<br>
>> -  LPM2.addPass(LoopUnrollPass::<wbr>createFull());<br>
>> +  LPM2.addPass(LoopUnrollPass::<wbr>createFull(Level));<br>
>>       // We provide the opt remark emitter pass for LICM to use. We only<br>
>> need to do<br>
>>     // this once as it is immutable.<br>
>> @@ -605,7 +605,7 @@ PassBuilder::<wbr>buildPerModuleDefaultPipeli<br>
>>     // FIXME: It would be really good to use a loop-integrated instruction<br>
>>     // combiner for cleanup here so that the unrolling and LICM can be<br>
>> pipelined<br>
>>     // across the loop nests.<br>
>> -<br>
>> OptimizePM.addPass(<wbr>createFunctionToLoopPassAdapto<wbr>r(LoopUnrollPass::create()));<br>
>> +<br>
>> OptimizePM.addPass(<wbr>createFunctionToLoopPassAdapto<wbr>r(LoopUnrollPass::create(<wbr>Level)));<br>
>>     OptimizePM.addPass(<wbr>InstCombinePass());<br>
>><br>
>> OptimizePM.addPass(<wbr>RequireAnalysisPass<<wbr>OptimizationRemarkEmitterAnaly<wbr>sis,<br>
>> Function>());<br>
>>     OptimizePM.addPass(<wbr>createFunctionToLoopPassAdapto<wbr>r(LICMPass()));<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/<wbr>PassManagerBuilder.cpp<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=295538&r1=295537&r2=295538&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/IPO/<wbr>PassManagerBuilder.cpp?rev=<wbr>295538&r1=295537&r2=295538&<wbr>view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/lib/Transforms/IPO/<wbr>PassManagerBuilder.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/<wbr>PassManagerBuilder.cpp Fri Feb 17<br>
>> 21:46:51 2017<br>
>> @@ -320,7 +320,7 @@ void PassManagerBuilder::<wbr>addFunctionSimp<br>
>>       MPM.add(<wbr>createCFGSimplificationPass())<wbr>;<br>
>>     }<br>
>>     if (!DisableUnrollLoops)<br>
>> -    MPM.add(<wbr>createSimpleLoopUnrollPass());    // Unroll small loops<br>
>> +    MPM.add(<wbr>createSimpleLoopUnrollPass(<wbr>OptLevel));    // Unroll small<br>
>> loops<br>
>>     addExtensionsToPM(EP_<wbr>LoopOptimizerEnd, MPM);<br>
>>       if (OptLevel > 1) {<br>
>> @@ -366,7 +366,7 @@ void PassManagerBuilder::<wbr>addFunctionSimp<br>
>>           // BBVectorize may have significantly shortened a loop body;<br>
>> unroll again.<br>
>>         if (!DisableUnrollLoops)<br>
>> -        MPM.add(createLoopUnrollPass()<wbr>);<br>
>> +        MPM.add(createLoopUnrollPass(<wbr>OptLevel));<br>
>>       }<br>
>>     }<br>
>>   @@ -612,7 +612,7 @@ void PassManagerBuilder::<wbr>populateModuleP<br>
>>           // BBVectorize may have significantly shortened a loop body;<br>
>> unroll again.<br>
>>         if (!DisableUnrollLoops)<br>
>> -        MPM.add(createLoopUnrollPass()<wbr>);<br>
>> +        MPM.add(createLoopUnrollPass(<wbr>OptLevel));<br>
>>       }<br>
>>     }<br>
>>   @@ -621,7 +621,7 @@ void PassManagerBuilder::<wbr>populateModuleP<br>
>>     addInstructionCombiningPass(<wbr>MPM);<br>
>>       if (!DisableUnrollLoops) {<br>
>> -    MPM.add(createLoopUnrollPass()<wbr>);    // Unroll small loops<br>
>> +    MPM.add(createLoopUnrollPass(<wbr>OptLevel));    // Unroll small loops<br>
>>         // LoopUnroll may generate some redundency to cleanup.<br>
>>       addInstructionCombiningPass(<wbr>MPM);<br>
>> @@ -772,11 +772,11 @@ void PassManagerBuilder::<wbr>addLTOOptimizat<br>
>>       PM.add(<wbr>createLoopInterchangePass());<br>
>>       if (!DisableUnrollLoops)<br>
>> -    PM.add(<wbr>createSimpleLoopUnrollPass());   // Unroll small loops<br>
>> +    PM.add(<wbr>createSimpleLoopUnrollPass(<wbr>OptLevel));   // Unroll small loops<br>
>>     PM.add(<wbr>createLoopVectorizePass(true, LoopVectorize));<br>
>>     // The vectorizer may have significantly shortened a loop body; unroll<br>
>> again.<br>
>>     if (!DisableUnrollLoops)<br>
>> -    PM.add(createLoopUnrollPass())<wbr>;<br>
>> +    PM.add(createLoopUnrollPass(<wbr>OptLevel));<br>
>>       // Now that we've optimized loops (in particular loop induction<br>
>> variables),<br>
>>     // we may have exposed more scalar opportunities. Run parts of the<br>
>> scalar<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/<wbr>Scalar/LoopUnrollPass.cpp<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp?rev=295538&r1=295537&r2=295538&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/Scalar/<wbr>LoopUnrollPass.cpp?rev=295538&<wbr>r1=295537&r2=295538&view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/lib/Transforms/<wbr>Scalar/LoopUnrollPass.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/<wbr>Scalar/LoopUnrollPass.cpp Fri Feb 17<br>
>> 21:46:51 2017<br>
>> @@ -131,13 +131,14 @@ static const unsigned NoThreshold = UINT<br>
>>   /// Gather the various unrolling parameters based on the defaults,<br>
>> compiler<br>
>>   /// flags, TTI overrides and user specified parameters.<br>
>>   static TargetTransformInfo::<wbr>UnrollingPreferences<br>
>> gatherUnrollingPreferences(<br>
>> -    Loop *L, const TargetTransformInfo &TTI, Optional<unsigned><br>
>> UserThreshold,<br>
>> -    Optional<unsigned> UserCount, Optional<bool> UserAllowPartial,<br>
>> -    Optional<bool> UserRuntime, Optional<bool> UserUpperBound) {<br>
>> +    Loop *L, const TargetTransformInfo &TTI, int OptLevel,<br>
>> +    Optional<unsigned> UserThreshold, Optional<unsigned> UserCount,<br>
>> +    Optional<bool> UserAllowPartial, Optional<bool> UserRuntime,<br>
>> +    Optional<bool> UserUpperBound) {<br>
>>     TargetTransformInfo::<wbr>UnrollingPreferences UP;<br>
>>       // Set up the defaults<br>
>> -  UP.Threshold = 150;<br>
>> +  UP.Threshold = OptLevel > 2 ? 300 : 150;<br>
>>     UP.MaxPercentThresholdBoost = 400;<br>
>>     UP.OptSizeThreshold = 0;<br>
>>     UP.PartialThreshold = 150;<br>
>> @@ -927,7 +928,7 @@ static bool computeUnrollCount(<br>
>>   static bool tryToUnrollLoop(Loop *L, DominatorTree &DT, LoopInfo *LI,<br>
>>                               ScalarEvolution *SE, const<br>
>> TargetTransformInfo &TTI,<br>
>>                               AssumptionCache &AC,<br>
>> OptimizationRemarkEmitter &ORE,<br>
>> -                            bool PreserveLCSSA,<br>
>> +                            bool PreserveLCSSA, int OptLevel,<br>
>>                               Optional<unsigned> ProvidedCount,<br>
>>                               Optional<unsigned> ProvidedThreshold,<br>
>>                               Optional<bool> ProvidedAllowPartial,<br>
>> @@ -947,7 +948,7 @@ static bool tryToUnrollLoop(Loop *L, Dom<br>
>>     bool NotDuplicatable;<br>
>>     bool Convergent;<br>
>>     TargetTransformInfo::<wbr>UnrollingPreferences UP =<br>
>> gatherUnrollingPreferences(<br>
>> -      L, TTI, ProvidedThreshold, ProvidedCount, ProvidedAllowPartial,<br>
>> +      L, TTI, OptLevel, ProvidedThreshold, ProvidedCount,<br>
>> ProvidedAllowPartial,<br>
>>         ProvidedRuntime, ProvidedUpperBound);<br>
>>     // Exit early if unrolling is disabled.<br>
>>     if (UP.Threshold == 0 && (!UP.Partial || UP.PartialThreshold == 0))<br>
>> @@ -1047,16 +1048,17 @@ namespace {<br>
>>   class LoopUnroll : public LoopPass {<br>
>>   public:<br>
>>     static char ID; // Pass ID, replacement for typeid<br>
>> -  LoopUnroll(Optional<unsigned> Threshold = None,<br>
>> +  LoopUnroll(int OptLevel = 2, Optional<unsigned> Threshold = None,<br>
>>                Optional<unsigned> Count = None,<br>
>>                Optional<bool> AllowPartial = None, Optional<bool> Runtime<br>
>> = None,<br>
>>                Optional<bool> UpperBound = None)<br>
>> -      : LoopPass(ID), ProvidedCount(std::move(Count)<wbr>),<br>
>> +      : LoopPass(ID), OptLevel(OptLevel),<br>
>> ProvidedCount(std::move(Count)<wbr>),<br>
>>           ProvidedThreshold(Threshold),<br>
>> ProvidedAllowPartial(<wbr>AllowPartial),<br>
>>           ProvidedRuntime(Runtime), ProvidedUpperBound(UpperBound) {<br>
>>       initializeLoopUnrollPass(*<wbr>PassRegistry::getPassRegistry(<wbr>));<br>
>>     }<br>
>>   +  int OptLevel;<br>
>>     Optional<unsigned> ProvidedCount;<br>
>>     Optional<unsigned> ProvidedThreshold;<br>
>>     Optional<bool> ProvidedAllowPartial;<br>
>> @@ -1081,7 +1083,7 @@ public:<br>
>>       OptimizationRemarkEmitter ORE(&F);<br>
>>       bool PreserveLCSSA = mustPreserveAnalysisID(<wbr>LCSSAID);<br>
>>   -    return tryToUnrollLoop(L, DT, LI, SE, TTI, AC, ORE, PreserveLCSSA,<br>
>> +    return tryToUnrollLoop(L, DT, LI, SE, TTI, AC, ORE, PreserveLCSSA,<br>
>> OptLevel,<br>
>>                              ProvidedCount, ProvidedThreshold,<br>
>>                              ProvidedAllowPartial, ProvidedRuntime,<br>
>>                              ProvidedUpperBound);<br>
>> @@ -1107,21 +1109,22 @@ INITIALIZE_PASS_DEPENDENCY(<wbr>LoopPass)<br>
>>   INITIALIZE_PASS_DEPENDENCY(<wbr>TargetTransformInfoWrapperPass<wbr>)<br>
>>   INITIALIZE_PASS_END(<wbr>LoopUnroll, "loop-unroll", "Unroll loops", false,<br>
>> false)<br>
>>   -Pass *llvm::createLoopUnrollPass(<wbr>int Threshold, int Count, int<br>
>> AllowPartial,<br>
>> -                                 int Runtime, int UpperBound) {<br>
>> +Pass *llvm::createLoopUnrollPass(<wbr>int OptLevel, int Threshold, int Count,<br>
>> +                                 int AllowPartial, int Runtime,<br>
>> +                                 int UpperBound) {<br>
>>     // TODO: It would make more sense for this function to take the<br>
>> optionals<br>
>>     // directly, but that's dangerous since it would silently break out of<br>
>> tree<br>
>>     // callers.<br>
>> -  return new LoopUnroll(Threshold == -1 ? None :<br>
>> Optional<unsigned>(Threshold),<br>
>> -                        Count == -1 ? None : Optional<unsigned>(Count),<br>
>> -                        AllowPartial == -1 ? None<br>
>> -                                           :<br>
>> Optional<bool>(AllowPartial),<br>
>> -                        Runtime == -1 ? None : Optional<bool>(Runtime),<br>
>> -                        UpperBound == -1 ? None :<br>
>> Optional<bool>(UpperBound));<br>
>> +  return new LoopUnroll(<br>
>> +      OptLevel, Threshold == -1 ? None : Optional<unsigned>(Threshold),<br>
>> +      Count == -1 ? None : Optional<unsigned>(Count),<br>
>> +      AllowPartial == -1 ? None : Optional<bool>(AllowPartial),<br>
>> +      Runtime == -1 ? None : Optional<bool>(Runtime),<br>
>> +      UpperBound == -1 ? None : Optional<bool>(UpperBound));<br>
>>   }<br>
>>   -Pass *llvm::<wbr>createSimpleLoopUnrollPass() {<br>
>> -  return llvm::createLoopUnrollPass(-1, -1, 0, 0, 0);<br>
>> +Pass *llvm::<wbr>createSimpleLoopUnrollPass(int OptLevel) {<br>
>> +  return llvm::createLoopUnrollPass(<wbr>OptLevel, -1, -1, 0, 0, 0);<br>
>>   }<br>
>>     PreservedAnalyses LoopUnrollPass::run(Loop &L, LoopAnalysisManager<br>
>> &AM,<br>
>> @@ -1153,10 +1156,10 @@ PreservedAnalyses LoopUnrollPass::run(Lo<br>
>>     Optional<bool> AllowPartialParam, RuntimeParam, UpperBoundParam;<br>
>>     if (!AllowPartialUnrolling)<br>
>>       AllowPartialParam = RuntimeParam = UpperBoundParam = false;<br>
>> -  bool Changed = tryToUnrollLoop(&L, AR.DT, &<a href="http://AR.LI" rel="noreferrer" target="_blank">AR.LI</a>, &<a href="http://AR.SE" rel="noreferrer" target="_blank">AR.SE</a>, AR.TTI,<br>
>> <a href="http://AR.AC" rel="noreferrer" target="_blank">AR.AC</a>, *ORE,<br>
>> -                                 /*PreserveLCSSA*/ true, /*Count*/ None,<br>
>> -                                 /*Threshold*/ None, AllowPartialParam,<br>
>> -                                 RuntimeParam, UpperBoundParam);<br>
>> +  bool Changed = tryToUnrollLoop(<br>
>> +      &L, AR.DT, &<a href="http://AR.LI" rel="noreferrer" target="_blank">AR.LI</a>, &<a href="http://AR.SE" rel="noreferrer" target="_blank">AR.SE</a>, AR.TTI, <a href="http://AR.AC" rel="noreferrer" target="_blank">AR.AC</a>, *ORE,<br>
>> +      /*PreserveLCSSA*/ true, OptLevel, /*Count*/ None,<br>
>> +      /*Threshold*/ None, AllowPartialParam, RuntimeParam,<br>
>> UpperBoundParam);<br>
>>     if (!Changed)<br>
>>       return PreservedAnalyses::all();<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/<wbr>LoopVectorize/X86/metadata-<wbr>enable.ll<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/X86/metadata-enable.ll?rev=295538&r1=295537&r2=295538&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/LoopVectorize/X86/<wbr>metadata-enable.ll?rev=295538&<wbr>r1=295537&r2=295538&view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/test/Transforms/<wbr>LoopVectorize/X86/metadata-<wbr>enable.ll<br>
>> (original)<br>
>> +++ llvm/trunk/test/Transforms/<wbr>LoopVectorize/X86/metadata-<wbr>enable.ll Fri<br>
>> Feb 17 21:46:51 2017<br>
>> @@ -1,13 +1,14 @@<br>
>>   ; RUN: opt < %s -mcpu=corei7 -O1 -S -unroll-allow-partial=0 | FileCheck<br>
>> %s --check-prefix=O1<br>
>>   ; RUN: opt < %s -mcpu=corei7 -O2 -S -unroll-allow-partial=0 | FileCheck<br>
>> %s --check-prefix=O2<br>
>> -; RUN: opt < %s -mcpu=corei7 -O3 -S -unroll-allow-partial=0 | FileCheck<br>
>> %s --check-prefix=O3<br>
>> +; RUN: opt < %s -mcpu=corei7 -O3 -S -unroll-threshold=150<br>
>> -unroll-allow-partial=0 | FileCheck %s --check-prefix=O3<br>
>> +; RUN: opt < %s -mcpu=corei7 -O3 -S -unroll-allow-partial=0 | FileCheck<br>
>> %s --check-prefix=O3DEFAULT<br>
>>   ; RUN: opt < %s -mcpu=corei7 -Os -S -unroll-allow-partial=0 | FileCheck<br>
>> %s --check-prefix=Os<br>
>>   ; RUN: opt < %s -mcpu=corei7 -Oz -S -unroll-allow-partial=0 | FileCheck<br>
>> %s --check-prefix=Oz<br>
>>   ; RUN: opt < %s -mcpu=corei7 -O1 -vectorize-loops -S<br>
>> -unroll-allow-partial=0 | FileCheck %s --check-prefix=O1VEC<br>
>>   ; RUN: opt < %s -mcpu=corei7 -Oz -vectorize-loops -S<br>
>> -unroll-allow-partial=0 | FileCheck %s --check-prefix=OzVEC<br>
>>   ; RUN: opt < %s -mcpu=corei7 -O1 -loop-vectorize -S<br>
>> -unroll-allow-partial=0 | FileCheck %s --check-prefix=O1VEC2<br>
>>   ; RUN: opt < %s -mcpu=corei7 -Oz -loop-vectorize -S<br>
>> -unroll-allow-partial=0 | FileCheck %s --check-prefix=OzVEC2<br>
>> -; RUN: opt < %s -mcpu=corei7 -O3 -disable-loop-vectorization -S<br>
>> -unroll-allow-partial=0 | FileCheck %s --check-prefix=O3DIS<br>
>> +; RUN: opt < %s -mcpu=corei7 -O3 -unroll-threshold=150<br>
>> -disable-loop-vectorization -S -unroll-allow-partial=0 | FileCheck %s<br>
>> --check-prefix=O3DIS<br>
>>     ; This file tests the llvm.loop.vectorize.enable metadata forcing<br>
>>   ; vectorization even when optimization levels are too low, or when<br>
>> @@ -25,6 +26,9 @@ target triple = "x86_64-unknown-linux-gn<br>
>>   ; O3-LABEL: @enabled(<br>
>>   ; O3: store <4 x i32><br>
>>   ; O3: ret i32<br>
>> +; O3DEFAULT-LABEL: @enabled(<br>
>> +; O3DEFAULT: store <4 x i32><br>
>> +; O3DEFAULT: ret i32<br>
>>   ; Pragma always wins!<br>
>>   ; O3DIS-LABEL: @enabled(<br>
>>   ; O3DIS: store <4 x i32><br>
>> @@ -77,6 +81,9 @@ for.end:<br>
>>   ; O3-LABEL: @nopragma(<br>
>>   ; O3: store <4 x i32><br>
>>   ; O3: ret i32<br>
>> +; O3DEFAULT-LABEL: @nopragma(<br>
>> +; O3DEFAULT: store <4 x i32><br>
>> +; O3DEFAULT: ret i32<br>
>>   ; O3DIS-LABEL: @nopragma(<br>
>>   ; O3DIS-NOT: store <4 x i32><br>
>>   ; O3DIS: ret i32<br>
>> @@ -128,6 +135,9 @@ for.end:<br>
>>   ; O3-LABEL: @disabled(<br>
>>   ; O3-NOT: store <4 x i32><br>
>>   ; O3: ret i32<br>
>> +; O3DEFAULT-LABEL: @disabled(<br>
>> +; O3DEFAULT: store <4 x i32><br>
>> +; O3DEFAULT: ret i32<br>
>>   ; O3DIS-LABEL: @disabled(<br>
>>   ; O3DIS-NOT: store <4 x i32><br>
>>   ; O3DIS: ret i32<br>
>><br>
>><br>
>> ______________________________<wbr>_________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
><br>
><br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>