<div dir="ltr">The patch is likely just exposed preexisting issue.<div>Fixed with r303581.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 22, 2017 at 1:56 PM, Vitaly Buka <span dir="ltr"><<a href="mailto:vitalybuka@google.com" target="_blank">vitalybuka@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">It's started in the range with the patch <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/1355" target="_blank">http://lab.llvm.org:8011/<wbr>builders/sanitizer-x86_64-<wbr>linux-bootstrap/builds/1355</a><div>And I can locally reproduce it.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 22, 2017 at 1:54 PM, Vitaly Buka <span dir="ltr"><<a href="mailto:vitalybuka@google.com" target="_blank">vitalybuka@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>This is also caused by the patch:<br></div><div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/1393/steps/check-llvm%20check-clang%20stage3%2Fmsan/logs/stdio" target="_blank">http://lab.llvm.org:8011/build<wbr>ers/sanitizer-x86_64-linux-<wbr>bootstrap/builds/1393/steps/<wbr>check-llvm%20check-clang%<wbr>20stage3%2Fmsan/logs/stdio</a><br></div><div><br></div><div><span style="color:rgb(0,0,0);font-family:"Courier New",courier,monotype,monospace;font-size:medium">FAILED: tools/llvm-xray/CMakeFiles/llv<wbr>m-xray.dir/xray-color-helper.<wbr>cc.o </span><br></div><div><pre style="font-family:"Courier New",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium"><span class="m_-8143543462498639705m_2209759062630024903gmail-stdout">/mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm_build_msan/bin/<wbr>clang++   -DGTEST_HAS_RTTI=0 -DLLVM_BUILD_GLOBAL_ISEL -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Itools/llvm-xray -I/mnt/b/sanitizer-buildbot2/s<wbr>anitizer-x86_64-linux-bootstra<wbr>p/build/llvm/tools/llvm-xray -Iinclude -I/mnt/b/sanitizer-buildbot2/s<wbr>anitizer-x86_64-linux-bootstra<wbr>p/build/llvm/include -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fcolor-diagnostics -ffunction-sections -fdata-sections -O3    -UNDEBUG  -fno-exceptions -fno-rtti -MD -MT tools/llvm-xray/CMakeFiles/llv<wbr>m-xray.dir/xray-color-helper.<wbr>cc.o -MF tools/llvm-xray/CMakeFiles/llv<wbr>m-xray.dir/xray-color-helper.<wbr>cc.o.d -o tools/llvm-xray/CMakeFiles/llv<wbr>m-xray.dir/xray-color-helper.<wbr>cc.o -c /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/llvm-xray/<wbr>xray-color-helper.cc
==7293==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x2f6e6c8 in llvm::X86InstrInfo::AnalyzeBra<wbr>nchImpl(llvm::MachineBasicBloc<wbr>k&, llvm::MachineBasicBlock*&, llvm::MachineBasicBlock*&, llvm::SmallVectorImpl<llvm::Ma<wbr>chineOperand>&, llvm::SmallVectorImpl<llvm::Ma<wbr>chineInstr*>&, bool) const /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/Target/X86/<wbr>X86InstrInfo.cpp:6093:22
    #1 0x2f6e7ad in llvm::X86InstrInfo::analyzeBra<wbr>nch(llvm::MachineBasicBlock&, llvm::MachineBasicBlock*&, llvm::MachineBasicBlock*&, llvm::SmallVectorImpl<llvm::Ma<wbr>chineOperand>&, bool) const /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/Target/X86/<wbr>X86InstrInfo.cpp:6133:10
    #2 0x3d390dc in llvm::TailDuplicator::tailDupl<wbr>icate(bool, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::SmallVectorImpl<llvm::Ma<wbr>chineBasicBlock*>&, llvm::SmallVectorImpl<llvm::Ma<wbr>chineInstr*>&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGe</span><span class="m_-8143543462498639705m_2209759062630024903gmail-stdout">n/<wbr>TailDuplicator.cpp:837:10
</span><span class="m_-8143543462498639705m_2209759062630024903gmail-stdout">    #3 0x3d35e4a in llvm::TailDuplicator::tailDupl<wbr>icateAndUpdate(bool, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::SmallVectorImpl<llvm::Ma<wbr>chineBasicBlock*>*, llvm::function_ref<void (llvm::MachineBasicBlock*)>*) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGen/<wbr>TailDuplicator.cpp:148:8
    #4 0x3f2451b in (anonymous namespace)::MachineBlockPlacem<wbr>ent::maybeTailDuplicateBlock(<wbr>llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, (anonymous namespace)::BlockChain&, llvm::SmallSetVector<llvm::Mac<wbr>hineBasicBlock const*, 16u>*, llvm::ilist_iterator<llvm::ili<wbr>st_detail::node_options<llvm::<wbr>MachineBasicBlock, true, false, void>, false, false>&, bool&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGen/<wbr>MachineBlockPlacement.cpp:<wbr>2620:11
    #5 0x3f0a25d in repeatedlyTailDuplicateBlock /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGen/<wbr>MachineBlockPlacement.cpp:<wbr>2501:13
    #6 0x3f0a25d in (anonymous namespace)::MachineBlockPlacem<wbr>ent::buildChain(llvm::MachineB<wbr>asicBlock const*, (anonymous namespace)::BlockChain&, llvm::SmallSetVector<llvm::Mac<wbr>hineBasicBlock const*, 16u>*) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGen/<wbr>MachineBlockPlacement.cpp:1699
    #7 0x3ef1c70 in (anonymous namespace)::MachineBlockPlacem<wbr>ent::buildCFGChains() /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGen/<wbr>MachineBlockPlacement.cpp:<wbr>2278:3
    #8 0x3eec7a9 in (anonymous namespace)::MachineBlockPlacem<wbr>ent::runOnMachineFunction(<wbr>llvm::MachineFunction&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGen/<wbr>MachineBlockPlacement.cpp:<wbr>2696:3
    #9 0x39a8ffc in llvm::MachineFunctionPass::run<wbr>OnFunction(llvm::Function&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/CodeGen/<wbr>MachineFunctionPass.cpp:62:13
    #10 0x431de6e in llvm::FPPassManager::runOnFunc<wbr>tion(llvm::Function&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/IR/LegacyPassMa<wbr>nager.cpp:1519:27
    #11 0x431e534 in llvm::FPPassManager::runOnModu<wbr>le(llvm::Module&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/IR/LegacyPassMa<wbr>nager.cpp:1540:16
    #12 0x431f853 in runOnModule /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/IR/LegacyPassMa<wbr>nager.cpp:1596:27
    #13 0x431f853 in llvm::legacy::PassManagerImpl:<wbr>:run(llvm::Module&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/lib/IR/LegacyPassMa<wbr>nager.cpp:1699
    #14 0x577960e in EmitAssembly /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/lib/<wbr>CodeGen/BackendUtil.cpp:792:19
    #15 0x577960e in clang::EmitBackendOutput(clang<wbr>::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::__1::unique_ptr<llvm::raw<wbr>_pwrite_stream, std::__1::default_delete<llvm:<wbr>:raw_pwrite_stream> >) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/lib/<wbr>CodeGen/BackendUtil.cpp:1101
    #16 0x6f1b90e in clang::BackendConsumer::Handle<wbr>TranslationUnit(clang::ASTCont<wbr>ext&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/lib/<wbr>CodeGen/CodeGenAction.cpp:258:<wbr>7
    #17 0x7ec96b6 in clang::ParseAST(clang::Sema&, bool, bool) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/lib/<wbr>Parse/ParseAST.cpp:159:13
    #18 0x64339ba in clang::FrontendAction::Execute<wbr>() /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/lib/<wbr>Frontend/FrontendAction.cpp:<wbr>837:8
    #19 0x637572c in clang::CompilerInstance::Execu<wbr>teAction(clang::FrontendAction<wbr>&) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/lib/<wbr>Frontend/CompilerInstance.cpp:<wbr>970:11
    #20 0x65fedd5 in clang::ExecuteCompilerInvocati<wbr>on(clang::CompilerInstance*) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/lib/<wbr>FrontendTool/ExecuteCompilerIn<wbr>vocation.cpp:249:25
    #21 0x977555 in cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/tools/<wbr>driver/cc1_main.cpp:221:13
    #22 0x971417 in ExecuteCC1Tool /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/tools/<wbr>driver/driver.cpp:299:12
    #23 0x971417 in main /mnt/b/sanitizer-buildbot2/san<wbr>itizer-x86_64-linux-bootstrap/<wbr>build/llvm/tools/clang/tools/<wbr>driver/driver.cpp:380
    #24 0x7fee6047d82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so<wbr>.6+0x2082f)
    #25 0x8f1468 in _start (/mnt/b/sanitizer-buildbot2/sa<wbr>nitizer-x86_64-linux-bootstrap<wbr>/build/llvm_build_msan/bin/<wbr>clang-5.0+0x8f1468)

</span></pre></div></div><div class="m_-8143543462498639705HOEnZb"><div class="m_-8143543462498639705h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 15, 2017 at 7:20 PM, Vitaly Buka <span dir="ltr"><<a href="mailto:vitalybuka@google.com" target="_blank">vitalybuka@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks, I've updated the test in r303136</div><div class="m_-8143543462498639705m_2209759062630024903HOEnZb"><div class="m_-8143543462498639705m_2209759062630024903h5"><br><div class="gmail_quote"><div dir="ltr">On Mon, May 15, 2017 at 7:14 PM Dmitry Vyukov <<a href="mailto:dvyukov@google.com" target="_blank">dvyukov@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I've benchmarks this change on the tsan benchmark:<br>
projects/compiler-rt/lib/tsan/<wbr>tests/rtl/TsanRtlTest<br>
--gtest_also_run_disabled_test<wbr>s --gtest_filter=DISABLED_BENCH.<wbr>Mop*<br>
(some numbers below)<br>
<br>
So let's just update check_analyze for the new reality.<br>
<br>
<br>
$ egrep "OK.*Mop1Read" /tmp/old<br>
[       OK ] DISABLED_BENCH.Mop1Read (5317 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5907 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5356 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5376 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5339 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5226 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5261 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5464 ms)<br>
$ egrep "OK.*Mop1Read" /tmp/new<br>
[       OK ] DISABLED_BENCH.Mop1Read (5324 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5238 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5344 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5327 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5373 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5208 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5332 ms)<br>
[       OK ] DISABLED_BENCH.Mop1Read (5351 ms)<br>
<br>
<br>
$ egrep "OK.*Mop8Write" /tmp/old<br>
[       OK ] DISABLED_BENCH.Mop8Write (1624 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1623 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1575 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1625 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1619 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1585 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1586 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1627 ms)<br>
$ egrep "OK.*Mop8Write" /tmp/new<br>
[       OK ] DISABLED_BENCH.Mop8Write (1760 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1634 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1630 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1632 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1601 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1599 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1589 ms)<br>
[       OK ] DISABLED_BENCH.Mop8Write (1625 ms)<br>
<br>
<br>
<br>
On Mon, May 15, 2017 at 5:10 PM, Vitaly Buka <<a href="mailto:vitalybuka@google.com" target="_blank">vitalybuka@google.com</a>> wrote:<br>
> +Dmitry Vyukov<br>
><br>
> On Mon, May 15, 2017 at 5:09 PM Vitaly Buka <<a href="mailto:vitalybuka@google.com" target="_blank">vitalybuka@google.com</a>> wrote:<br>
>><br>
>> This test is broken after the patch:<br>
>> <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/8452/steps/tsan%20analyze/logs/stdio" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/build<wbr>ers/sanitizer-x86_64-linux-aut<wbr>oconf/builds/8452/steps/tsan%<wbr>20analyze/logs/stdio</a><br>
>><br>
>> On Mon, May 15, 2017 at 10:44 AM Kyle Butt via llvm-commits<br>
>> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
>>><br>
>>> Author: iteratee<br>
>>> Date: Mon May 15 12:30:47 2017<br>
>>> New Revision: 303084<br>
>>><br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=303084&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=303084&view=rev</a><br>
>>> Log:<br>
>>> CodeGen: BlockPlacement: Increase tail duplication size for O3.<br>
>>><br>
>>> At O3 we are more willing to increase size if we believe it will improve<br>
>>> performance. The current threshold for tail-duplication of 2 instructions<br>
>>> is<br>
>>> conservative, and can be relaxed at O3.<br>
>>><br>
>>> Benchmark results:<br>
>>> llvm test-suite:<br>
>>> 6% improvement in aha, due to duplication of loop latch<br>
>>> 3% improvement in hexxagon<br>
>>><br>
>>> 2% slowdown in lpbench. Seems related, but couldn't completely diagnose.<br>
>>><br>
>>> Internal google benchmark:<br>
>>> Produces 4% improvement on internal google protocol buffer serialization<br>
>>> benchmarks.<br>
>>><br>
>>> Differential-Revision: <a href="https://reviews.llvm.org/D32324" rel="noreferrer" target="_blank">https://reviews.llvm.org/D3232<wbr>4</a><br>
>>><br>
>>> Modified:<br>
>>>     llvm/trunk/lib/CodeGen/Machin<wbr>eBlockPlacement.cpp<br>
>>>     llvm/trunk/test/CodeGen/Power<wbr>PC/tail-dup-layout.ll<br>
>>>     llvm/trunk/test/CodeGen/X86/s<wbr>se1.ll<br>
>>><br>
>>> Modified: llvm/trunk/lib/CodeGen/Machine<wbr>BlockPlacement.cpp<br>
>>> URL:<br>
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp?rev=303084&r1=303083&r2=303084&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/lib/CodeGen/M<wbr>achineBlockPlacement.cpp?rev=3<wbr>03084&r1=303083&r2=303084&view<wbr>=diff</a><br>
>>><br>
>>> ==============================<wbr>==============================<wbr>==================<br>
>>> --- llvm/trunk/lib/CodeGen/Machine<wbr>BlockPlacement.cpp (original)<br>
>>> +++ llvm/trunk/lib/CodeGen/Machine<wbr>BlockPlacement.cpp Mon May 15 12:30:47<br>
>>> 2017<br>
>>> @@ -133,6 +133,14 @@ static cl::opt<unsigned> TailDupPlacemen<br>
>>>               "that won't conflict."), cl::init(2),<br>
>>>      cl::Hidden);<br>
>>><br>
>>> +// Heuristic for aggressive tail duplication.<br>
>>> +static cl::opt<unsigned> TailDupPlacementAggressiveThre<wbr>shold(<br>
>>> +    "tail-dup-placement-aggressive<wbr>-threshold",<br>
>>> +    cl::desc("Instruction cutoff for aggressive tail duplication during<br>
>>> "<br>
>>> +             "layout. Used at -O3. Tail merging during layout is forced<br>
>>> to "<br>
>>> +             "have a threshold that won't conflict."), cl::init(3),<br>
>>> +    cl::Hidden);<br>
>>> +<br>
>>>  // Heuristic for tail duplication.<br>
>>>  static cl::opt<unsigned> TailDupPlacementPenalty(<br>
>>>      "tail-dup-placement-penalty",<br>
>>> @@ -2646,9 +2654,26 @@ bool MachineBlockPlacement::runOnMa<wbr>chine<br>
>>>    assert(BlockToChain.empty());<br>
>>>    assert(ComputedEdges.empty());<br>
>>><br>
>>> +  unsigned TailDupSize = TailDupPlacementThreshold;<br>
>>> +  // If only the aggressive threshold is explicitly set, use it.<br>
>>> +  if (TailDupPlacementAggressiveThr<wbr>eshold.getNumOccurrences() != 0 &&<br>
>>> +      TailDupPlacementThreshold.getN<wbr>umOccurrences() == 0)<br>
>>> +    TailDupSize = TailDupPlacementAggressiveThre<wbr>shold;<br>
>>> +<br>
>>> +  TargetPassConfig *PassConfig = &getAnalysis<TargetPassConfig><wbr>();<br>
>>> +  // For agressive optimization, we can adjust some thresholds to be<br>
>>> less<br>
>>> +  // conservative.<br>
>>> +  if (PassConfig->getOptLevel() >= CodeGenOpt::Aggressive) {<br>
>>> +    // At O3 we should be more willing to copy blocks for tail<br>
>>> duplication. This<br>
>>> +    // increases size pressure, so we only do it at O3<br>
>>> +    // Do this unless only the regular threshold is explicitly set.<br>
>>> +    if (TailDupPlacementThreshold.get<wbr>NumOccurrences() == 0 ||<br>
>>> +        TailDupPlacementAggressiveThre<wbr>shold.getNumOccurrences() != 0)<br>
>>> +      TailDupSize = TailDupPlacementAggressiveThre<wbr>shold;<br>
>>> +  }<br>
>>> +<br>
>>>    if (TailDupPlacement) {<br>
>>>      MPDT = &getAnalysis<MachinePostDomina<wbr>torTree>();<br>
>>> -    unsigned TailDupSize = TailDupPlacementThreshold;<br>
>>>      if (MF.getFunction()->optForSize(<wbr>))<br>
>>>        TailDupSize = 1;<br>
>>>      TailDup.initMF(MF, MBPI, /* LayoutMode */ true, TailDupSize);<br>
>>> @@ -2658,7 +2683,6 @@ bool MachineBlockPlacement::runOnMa<wbr>chine<br>
>>>    buildCFGChains();<br>
>>><br>
>>>    // Changing the layout can create new tail merging opportunities.<br>
>>> -  TargetPassConfig *PassConfig = &getAnalysis<TargetPassConfig><wbr>();<br>
>>>    // TailMerge can create jump into if branches that make CFG<br>
>>> irreducible for<br>
>>>    // HW that requires structured CFG.<br>
>>>    bool EnableTailMerge = !MF.getTarget().requiresStruct<wbr>uredCFG() &&<br>
>>> @@ -2666,7 +2690,7 @@ bool MachineBlockPlacement::runOnMa<wbr>chine<br>
>>>                           BranchFoldPlacement;<br>
>>>    // No tail merging opportunities if the block number is less than<br>
>>> four.<br>
>>>    if (MF.size() > 3 && EnableTailMerge) {<br>
>>> -    unsigned TailMergeSize = TailDupPlacementThreshold + 1;<br>
>>> +    unsigned TailMergeSize = TailDupSize + 1;<br>
>>>      BranchFolder BF(/*EnableTailMerge=*/true, /*CommonHoist=*/false,<br>
>>> *MBFI,<br>
>>>                      *MBPI, TailMergeSize);<br>
>>><br>
>>><br>
>>> Modified: llvm/trunk/test/CodeGen/PowerP<wbr>C/tail-dup-layout.ll<br>
>>> URL:<br>
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/tail-dup-layout.ll?rev=303084&r1=303083&r2=303084&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>PowerPC/tail-dup-layout.ll?rev<wbr>=303084&r1=303083&r2=303084&<wbr>view=diff</a><br>
>>><br>
>>> ==============================<wbr>==============================<wbr>==================<br>
>>> --- llvm/trunk/test/CodeGen/PowerP<wbr>C/tail-dup-layout.ll (original)<br>
>>> +++ llvm/trunk/test/CodeGen/PowerP<wbr>C/tail-dup-layout.ll Mon May 15<br>
>>> 12:30:47 2017<br>
>>> @@ -1,4 +1,5 @@<br>
>>> -; RUN: llc -O2 < %s | FileCheck %s<br>
>>> +; RUN: llc -O2 -o - %s | FileCheck --check-prefix=CHECK<br>
>>> --check-prefix=CHECK-O2 %s<br>
>>> +; RUN: llc -O3 -o - %s | FileCheck --check-prefix=CHECK<br>
>>> --check-prefix=CHECK-O3 %s<br>
>>>  target datalayout = "e-m:e-i64:64-n32:64"<br>
>>>  target triple = "powerpc64le-grtev4-linux-gnu"<br>
>>><br>
>>> @@ -99,11 +100,9 @@ exit:<br>
>>>  ; test1<br>
>>>  ; test2<br>
>>>  ; test3<br>
>>> -; test4<br>
>>>  ; optional1<br>
>>>  ; optional2<br>
>>>  ; optional3<br>
>>> -; optional4<br>
>>>  ; exit<br>
>>>  ; even for 50/50 branches.<br>
>>>  ; Tail duplication puts test n+1 at the end of optional n<br>
>>> @@ -157,6 +156,98 @@ test3:<br>
>>>    br i1 %tagbit3eq0, label %exit, label %optional3, !prof !1<br>
>>>  optional3:<br>
>>>    call void @c()<br>
>>> +  br label %exit<br>
>>> +exit:<br>
>>> +  ret void<br>
>>> +}<br>
>>> +<br>
>>> +; Intended layout:<br>
>>> +; The chain-of-triangles based duplicating produces the layout when 3<br>
>>> +; instructions are allowed for tail-duplication.<br>
>>> +; test1<br>
>>> +; test2<br>
>>> +; test3<br>
>>> +; optional1<br>
>>> +; optional2<br>
>>> +; optional3<br>
>>> +; exit<br>
>>> +;<br>
>>> +; Otherwise it produces the layout:<br>
>>> +; test1<br>
>>> +; optional1<br>
>>> +; test2<br>
>>> +; optional2<br>
>>> +; test3<br>
>>> +; optional3<br>
>>> +; exit<br>
>>> +<br>
>>> +;CHECK-LABEL: straight_test_3_instr_test:<br>
>>> +; test1 may have been merged with entry<br>
>>> +;CHECK: mr [[TAGREG:[0-9]+]], 3<br>
>>> +;CHECK: clrlwi {{[0-9]+}}, [[TAGREG]], 30<br>
>>> +;CHECK-NEXT: cmplwi {{[0-9]+}}, 2<br>
>>> +<br>
>>> +;CHECK-O3-NEXT: bne 0, .[[OPT1LABEL:[_0-9A-Za-z]+]]<br>
>>> +;CHECK-O3-NEXT: # %test2<br>
>>> +;CHECK-O3-NEXT: rlwinm {{[0-9]+}}, [[TAGREG]], 0, 28, 29<br>
>>> +;CHECK-O3-NEXT: cmplwi {{[0-9]+}}, 8<br>
>>> +;CHECK-O3-NEXT: bne 0, .[[OPT2LABEL:[_0-9A-Za-z]+]]<br>
>>> +;CHECK-O3-NEXT: .[[TEST3LABEL:[_0-9A-Za-z]+]]: # %test3<br>
>>> +;CHECK-O3-NEXT: rlwinm {{[0-9]+}}, [[TAGREG]], 0, 26, 27<br>
>>> +;CHECK-O3-NEXT: cmplwi {{[0-9]+}}, 32<br>
>>> +;CHECK-O3-NEXT: bne 0, .[[OPT3LABEL:[_0-9A-Za-z]+]]<br>
>>> +;CHECK-O3-NEXT: .[[EXITLABEL:[_0-9A-Za-z]+]]: # %exit<br>
>>> +;CHECK-O3: blr<br>
>>> +;CHECK-O3-NEXT: .[[OPT1LABEL]]:<br>
>>> +;CHECK-O3: rlwinm {{[0-9]+}}, [[TAGREG]], 0, 28, 29<br>
>>> +;CHECK-O3-NEXT: cmplwi {{[0-9]+}}, 8<br>
>>> +;CHECK-O3-NEXT: beq 0, .[[TEST3LABEL]]<br>
>>> +;CHECK-O3-NEXT: .[[OPT2LABEL]]:<br>
>>> +;CHECK-O3: rlwinm {{[0-9]+}}, [[TAGREG]], 0, 26, 27<br>
>>> +;CHECK-O3-NEXT: cmplwi {{[0-9]+}}, 32<br>
>>> +;CHECK-O3-NEXT: beq 0, .[[EXITLABEL]]<br>
>>> +;CHECK-O3-NEXT: .[[OPT3LABEL]]:<br>
>>> +;CHECK-O3: b .[[EXITLABEL]]<br>
>>> +<br>
>>> +;CHECK-O2-NEXT: beq 0, .[[TEST2LABEL:[_0-9A-Za-z]+]]<br>
>>> +;CHECK-O2-NEXT: # %optional1<br>
>>> +;CHECK-O2: .[[TEST2LABEL]]: # %test2<br>
>>> +;CHECK-O2-NEXT: rlwinm {{[0-9]+}}, [[TAGREG]], 0, 28, 29<br>
>>> +;CHECK-O2-NEXT: cmplwi {{[0-9]+}}, 8<br>
>>> +;CHECK-O2-NEXT: beq 0, .[[TEST3LABEL:[_0-9A-Za-z]+]]<br>
>>> +;CHECK-O2-NEXT: # %optional2<br>
>>> +;CHECK-O2: .[[TEST3LABEL]]: # %test3<br>
>>> +;CHECK-O2-NEXT: rlwinm {{[0-9]+}}, [[TAGREG]], 0, 26, 27<br>
>>> +;CHECK-O2-NEXT: cmplwi {{[0-9]+}}, 32<br>
>>> +;CHECK-O2-NEXT: beq 0, .[[EXITLABEL:[_0-9A-Za-z]+]]<br>
>>> +;CHECK-O2-NEXT: # %optional3<br>
>>> +;CHECK-O2: .[[EXITLABEL:[_0-9A-Za-z]+]]: # %exit<br>
>>> +;CHECK-O2: blr<br>
>>> +<br>
>>> +<br>
>>> +define void @straight_test_3_instr_test(i3<wbr>2 %tag) {<br>
>>> +entry:<br>
>>> +  br label %test1<br>
>>> +test1:<br>
>>> +  %tagbit1 = and i32 %tag, 3<br>
>>> +  %tagbit1eq0 = icmp eq i32 %tagbit1, 2<br>
>>> +  br i1 %tagbit1eq0, label %test2, label %optional1, !prof !2<br>
>>> +optional1:<br>
>>> +  call void @a()<br>
>>> +  br label %test2<br>
>>> +test2:<br>
>>> +  %tagbit2 = and i32 %tag, 12<br>
>>> +  %tagbit2eq0 = icmp eq i32 %tagbit2, 8<br>
>>> +  br i1 %tagbit2eq0, label %test3, label %optional2, !prof !2<br>
>>> +optional2:<br>
>>> +  call void @b()<br>
>>> +  br label %test3<br>
>>> +test3:<br>
>>> +  %tagbit3 = and i32 %tag, 48<br>
>>> +  %tagbit3eq0 = icmp eq i32 %tagbit3, 32<br>
>>> +  br i1 %tagbit3eq0, label %exit, label %optional3, !prof !1<br>
>>> +optional3:<br>
>>> +  call void @c()<br>
>>>    br label %exit<br>
>>>  exit:<br>
>>>    ret void<br>
>>><br>
>>> Modified: llvm/trunk/test/CodeGen/X86/ss<wbr>e1.ll<br>
>>> URL:<br>
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/sse1.ll?rev=303084&r1=303083&r2=303084&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/sse1.ll?rev=303084&r1=3030<wbr>83&r2=303084&view=diff</a><br>
>>><br>
>>> ==============================<wbr>==============================<wbr>==================<br>
>>> --- llvm/trunk/test/CodeGen/X86/ss<wbr>e1.ll (original)<br>
>>> +++ llvm/trunk/test/CodeGen/X86/ss<wbr>e1.ll Mon May 15 12:30:47 2017<br>
>>> @@ -66,7 +66,10 @@ define <4 x float> @vselect(<4 x float>*<br>
>>>  ; X32-NEXT:    jne .LBB1_8<br>
>>>  ; X32-NEXT:  .LBB1_7:<br>
>>>  ; X32-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero<br>
>>> -; X32-NEXT:    jmp .LBB1_9<br>
>>> +; X32-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1<wbr>]<br>
>>> +; X32-NEXT:    cmpl $0, {{[0-9]+}}(%esp)<br>
>>> +; X32-NEXT:    je .LBB1_10<br>
>>> +; X32-NEXT:    jmp .LBB1_11<br>
>>>  ; X32-NEXT:  .LBB1_1:<br>
>>>  ; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero<br>
>>>  ; X32-NEXT:    cmpl $0, {{[0-9]+}}(%esp)<br>
>>> @@ -77,11 +80,10 @@ define <4 x float> @vselect(<4 x float>*<br>
>>>  ; X32-NEXT:    je .LBB1_7<br>
>>>  ; X32-NEXT:  .LBB1_8: # %entry<br>
>>>  ; X32-NEXT:    xorps %xmm3, %xmm3<br>
>>> -; X32-NEXT:  .LBB1_9: # %entry<br>
>>>  ; X32-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1<wbr>]<br>
>>>  ; X32-NEXT:    cmpl $0, {{[0-9]+}}(%esp)<br>
>>>  ; X32-NEXT:    jne .LBB1_11<br>
>>> -; X32-NEXT:  # BB#10:<br>
>>> +; X32-NEXT:  .LBB1_10:<br>
>>>  ; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
>>>  ; X32-NEXT:  .LBB1_11: # %entry<br>
>>>  ; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1<wbr>]<br>
>>> @@ -103,7 +105,10 @@ define <4 x float> @vselect(<4 x float>*<br>
>>>  ; X64-NEXT:    jne .LBB1_8<br>
>>>  ; X64-NEXT:  .LBB1_7:<br>
>>>  ; X64-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero<br>
>>> -; X64-NEXT:    jmp .LBB1_9<br>
>>> +; X64-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1<wbr>]<br>
>>> +; X64-NEXT:    testl %esi, %esi<br>
>>> +; X64-NEXT:    je .LBB1_10<br>
>>> +; X64-NEXT:    jmp .LBB1_11<br>
>>>  ; X64-NEXT:  .LBB1_1:<br>
>>>  ; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero<br>
>>>  ; X64-NEXT:    testl %edx, %edx<br>
>>> @@ -114,11 +119,10 @@ define <4 x float> @vselect(<4 x float>*<br>
>>>  ; X64-NEXT:    je .LBB1_7<br>
>>>  ; X64-NEXT:  .LBB1_8: # %entry<br>
>>>  ; X64-NEXT:    xorps %xmm3, %xmm3<br>
>>> -; X64-NEXT:  .LBB1_9: # %entry<br>
>>>  ; X64-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1<wbr>]<br>
>>>  ; X64-NEXT:    testl %esi, %esi<br>
>>>  ; X64-NEXT:    jne .LBB1_11<br>
>>> -; X64-NEXT:  # BB#10:<br>
>>> +; X64-NEXT:  .LBB1_10:<br>
>>>  ; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
>>>  ; X64-NEXT:  .LBB1_11: # %entry<br>
>>>  ; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1<wbr>]<br>
>>><br>
>>><br>
>>> ______________________________<wbr>_________________<br>
>>> llvm-commits mailing list<br>
>>> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">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>
</blockquote></div></div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>