<feed xmlns='http://www.w3.org/2005/Atom'>
<title>bcm5719-llvm/llvm/lib/Analysis/MustExecute.cpp, branch meklort-10.0.1</title>
<subtitle>Project Ortega BCM5719 LLVM</subtitle>
<id>https://git.raptorcs.com/git/bcm5719-llvm/atom?h=meklort-10.0.1</id>
<link rel='self' href='https://git.raptorcs.com/git/bcm5719-llvm/atom?h=meklort-10.0.1'/>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/'/>
<updated>2019-11-14T00:34:37+00:00</updated>
<entry>
<title>Sink all InitializePasses.h includes</title>
<updated>2019-11-14T00:34:37+00:00</updated>
<author>
<name>Reid Kleckner</name>
<email>rnk@google.com</email>
</author>
<published>2019-11-13T21:15:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=05da2fe52162c80dfa18aedf70cf73cb11201811'/>
<id>urn:sha1:05da2fe52162c80dfa18aedf70cf73cb11201811</id>
<content type='text'>
This file lists every pass in LLVM, and is included by Pass.h, which is
very popular. Every time we add, remove, or rename a pass in LLVM, it
caused lots of recompilation.

I found this fact by looking at this table, which is sorted by the
number of times a file was changed over the last 100,000 git commits
multiplied by the number of object files that depend on it in the
current checkout:
  recompiles    touches affected_files  header
  342380        95      3604    llvm/include/llvm/ADT/STLExtras.h
  314730        234     1345    llvm/include/llvm/InitializePasses.h
  307036        118     2602    llvm/include/llvm/ADT/APInt.h
  213049        59      3611    llvm/include/llvm/Support/MathExtras.h
  170422        47      3626    llvm/include/llvm/Support/Compiler.h
  162225        45      3605    llvm/include/llvm/ADT/Optional.h
  158319        63      2513    llvm/include/llvm/ADT/Triple.h
  140322        39      3598    llvm/include/llvm/ADT/StringRef.h
  137647        59      2333    llvm/include/llvm/Support/Error.h
  131619        73      1803    llvm/include/llvm/Support/FileSystem.h

Before this change, touching InitializePasses.h would cause 1345 files
to recompile. After this change, touching it only causes 550 compiles in
an incremental rebuild.

Reviewers: bkramer, asbirlea, bollu, jdoerfert

Differential Revision: https://reviews.llvm.org/D70211
</content>
</entry>
<entry>
<title>[FIX] Make LSan happy by *not* leaking memory</title>
<updated>2019-10-31T17:16:54+00:00</updated>
<author>
<name>Johannes Doerfert</name>
<email>johannes@jdoerfert.de</email>
</author>
<published>2019-10-31T17:06:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=cb19ea45a71b74c72ad5e8ceaa42a0b6c8168576'/>
<id>urn:sha1:cb19ea45a71b74c72ad5e8ceaa42a0b6c8168576</id>
<content type='text'>
I left a memory leak in a printer pass which made LSan sad so I remove
the memory leak now to make LSan happy.

Reported and tested by vlad.tsyrklevich.
</content>
</entry>
<entry>
<title>[MustExecute] Silence clang warning about unused captured 'this'</title>
<updated>2019-10-31T08:41:05+00:00</updated>
<author>
<name>Mikael Holmen</name>
<email>mikael.holmen@ericsson.com</email>
</author>
<published>2019-10-31T08:40:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=c9504954052a7630a6e760006297b5fc73a03e4a'/>
<id>urn:sha1:c9504954052a7630a6e760006297b5fc73a03e4a</id>
<content type='text'>
New code introduced in fe799c97fa caused clang to complain with

../lib/Analysis/MustExecute.cpp:360:34: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
  GetterTy&lt;LoopInfo&gt; LIGetter = [this](const Function &amp;F) {
                                 ^~~~
../lib/Analysis/MustExecute.cpp:365:44: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
  GetterTy&lt;PostDominatorTree&gt; PDTGetter = [this](const Function &amp;F) {
                                           ^~~~
2 errors generated.
</content>
</entry>
<entry>
<title>[MustExecute] Forward iterate over conditional branches</title>
<updated>2019-10-31T05:06:43+00:00</updated>
<author>
<name>Johannes Doerfert</name>
<email>johannes@jdoerfert.de</email>
</author>
<published>2019-10-13T01:46:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=fe799c97fae0729e5952c6a8edf41e67bf60048f'/>
<id>urn:sha1:fe799c97fae0729e5952c6a8edf41e67bf60048f</id>
<content type='text'>
Summary:
If a conditional branch is encountered we can try to find a join block
where the execution is known to continue. This means finding a suitable
block, e.g., the immediate post dominator of the conditional branch, and
proofing control will always reach that block.

This patch implements different techniques that work with and without
provided analysis.

Reviewers: uenoku, sstefan1, hfinkel

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68933
</content>
</entry>
<entry>
<title>[MustExec] Add a generic "must-be-executed-context" explorer</title>
<updated>2019-08-23T15:17:27+00:00</updated>
<author>
<name>Johannes Doerfert</name>
<email>jdoerfert@anl.gov</email>
</author>
<published>2019-08-23T15:17:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=a5b10b464e5e45cbc156119ba48f24677576d022'/>
<id>urn:sha1:a5b10b464e5e45cbc156119ba48f24677576d022</id>
<content type='text'>
Given an instruction I, the MustBeExecutedContextExplorer allows to
easily traverse instructions that are guaranteed to be executed whenever
I is. For now, these instruction have to be statically "after" I, in
the same or different basic blocks.

This patch also adds a pass which prints the must-be-executed-context
for each instruction in a module. It is used to test the
MustBeExecutedContextExplorer, for now on the examples given in the
class comment of the MustBeExecutedIterator.

Differential Revision: https://reviews.llvm.org/D65186

llvm-svn: 369765
</content>
</entry>
<entry>
<title>[MustExecute] Improve MustExecute to correctly handle loop nest</title>
<updated>2019-05-27T13:57:28+00:00</updated>
<author>
<name>Xing Xue</name>
<email>xingxue@outlook.com</email>
</author>
<published>2019-05-27T13:57:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=3860aad6e7f0c261512ece251a6796dd71450e90'/>
<id>urn:sha1:3860aad6e7f0c261512ece251a6796dd71450e90</id>
<content type='text'>
Summary:
for.outer:
  br for.inner
for.inner:
  LI &lt;loop invariant load instruction&gt;
for.inner.latch:
  br for.inner, for.outer.latch
for.outer.latch:
  br for.outer, for.outer.exit

LI is a loop invariant load instruction that post dominate for.outer, so LI should be able to move out of the loop nest. However, there is a bug in allLoopPathsLeadToBlock().

Current algorithm of allLoopPathsLeadToBlock()

  1. get all the transitive predecessors of the basic block LI belongs to (for.inner) ==&gt; for.outer, for.inner.latch
  2. if any successors of any of the predecessors are not for.inner or for.inner's predecessors, then return false
  3. return true

Although for.inner.latch is for.inner's predecessor, but for.inner dominates for.inner.latch, which means if for.inner.latch is ever executed, for.inner should be as well. It should not return false for cases like this.

Author: Whitney (committed by xingxue)

Reviewers: kbarton, jdoerfert, Meinersbur, hfinkel, fhahn

Reviewed By: jdoerfert

Subscribers: hiraditya, jsji, llvm-commits, etiotto, bmahjour

Tags: #LLVM

Differential Revision: https://reviews.llvm.org/D62418

llvm-svn: 361762
</content>
</entry>
<entry>
<title>Update the file headers across all of the LLVM projects in the monorepo</title>
<updated>2019-01-19T08:50:56+00:00</updated>
<author>
<name>Chandler Carruth</name>
<email>chandlerc@gmail.com</email>
</author>
<published>2019-01-19T08:50:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=2946cd701067404b99c39fb29dc9c74bd7193eb3'/>
<id>urn:sha1:2946cd701067404b99c39fb29dc9c74bd7193eb3</id>
<content type='text'>
to reflect the new license.

We understand that people may be surprised that we're moving the header
entirely to discuss the new license. We checked this carefully with the
Foundation's lawyer and we believe this is the correct approach.

Essentially, all code in the project is now made available by the LLVM
project under our new license, so you will see that the license headers
include that license only. Some of our contributors have contributed
code under our old license, and accordingly, we have retained a copy of
our old license notice in the top-level files in each project and
repository.

llvm-svn: 351636
</content>
</entry>
<entry>
<title>[IPT] Drop cache less eagerly in GVN and LoopSafetyInfo</title>
<updated>2019-01-09T07:28:13+00:00</updated>
<author>
<name>Max Kazantsev</name>
<email>max.kazantsev@azul.com</email>
</author>
<published>2019-01-09T07:28:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=4615a505f869f1c9ab3e7016c1ad792b67991cee'/>
<id>urn:sha1:4615a505f869f1c9ab3e7016c1ad792b67991cee</id>
<content type='text'>
Current strategy of dropping `InstructionPrecedenceTracking` cache is to
invalidate the entire basic block whenever we change its contents. In fact,
`InstructionPrecedenceTracking` has 2 internal strictures: `OrderedInstructions`
that is needed to be invalidated whenever the contents changes, and the map
with first special instructions in block. This second map does not need an
update if we add/remove a non-special instuction because it cannot
affect the contents of this map.

This patch changes API of `InstructionPrecedenceTracking` so that it now
accounts for reasons under which we invalidate blocks. This should lead
to much less recalculations of the map and should save us some compile time
because in practice we don't typically add/remove special instructions.

Differential Revision: https://reviews.llvm.org/D54462
Reviewed By: efriedma

llvm-svn: 350694
</content>
</entry>
<entry>
<title>[LICM] Hoist guards from non-header blocks</title>
<updated>2018-11-12T09:29:58+00:00</updated>
<author>
<name>Max Kazantsev</name>
<email>max.kazantsev@azul.com</email>
</author>
<published>2018-11-12T09:29:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=7d49a3a81698a2a9508084b6cb9a8daf5d617252'/>
<id>urn:sha1:7d49a3a81698a2a9508084b6cb9a8daf5d617252</id>
<content type='text'>
This patch relaxes overconservative checks on whether or not we could write
memory before we execute an instruction. This allows us to hoist guards out of
loops even if they are not in the header block.

Differential Revision: https://reviews.llvm.org/D50891
Reviewed By: fedor.sergeev

llvm-svn: 346643
</content>
</entry>
<entry>
<title>[NFC] Turn collectTransitivePredecessors into a static function</title>
<updated>2018-11-06T09:07:03+00:00</updated>
<author>
<name>Max Kazantsev</name>
<email>max.kazantsev@azul.com</email>
</author>
<published>2018-11-06T09:07:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.raptorcs.com/git/bcm5719-llvm/commit/?id=4855b74f8bbcb996dfb7f28174c4d8777843bab0'/>
<id>urn:sha1:4855b74f8bbcb996dfb7f28174c4d8777843bab0</id>
<content type='text'>
llvm-svn: 346217
</content>
</entry>
</feed>
