<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm/test/Transforms/LoopIdiom, branch release_29</title>
<subtitle>http://llvm.org</subtitle>
<id>https://git.amat.us/llvm/atom/test/Transforms/LoopIdiom?h=release_29</id>
<link rel='self' href='https://git.amat.us/llvm/atom/test/Transforms/LoopIdiom?h=release_29'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/'/>
<updated>2011-03-07T22:43:45Z</updated>
<entry>
<title>Preserve line no. info.</title>
<updated>2011-03-07T22:43:45Z</updated>
<author>
<name>Devang Patel</name>
<email>dpatel@apple.com</email>
</author>
<published>2011-03-07T22:43:45Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=cd77a50e638be5e7153ebe2a8ba875de7df48bea'/>
<id>urn:sha1:cd77a50e638be5e7153ebe2a8ba875de7df48bea</id>
<content type='text'>
Radar 9097659


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127182 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>rewrite the memset_pattern pattern generation stuff to accept any 2/4/8/16-byte</title>
<updated>2011-02-19T19:56:44Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-02-19T19:56:44Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=80e8b506b8134d63dc3cb6211cccc34be4b19d40'/>
<id>urn:sha1:80e8b506b8134d63dc3cb6211cccc34be4b19d40</id>
<content type='text'>
constant, including globals.  This makes us generate much more "pretty" pattern
globals as well because it doesn't break it down to an array of bytes all the
time.

This enables us to handle stores of relocatable globals.  This kicks in about
48 times in 254.gap, giving us stuff like this:

@.memset_pattern40 = internal constant [2 x %struct.TypHeader* (%struct.TypHeader*, %struct.TypHeader*)*] [%struct.TypHeader* (%struct.TypHeader*, %struct
.TypHeader*)* @IsFalse, %struct.TypHeader* (%struct.TypHeader*, %struct.TypHeader*)* @IsFalse], align 16

...
  call void @memset_pattern16(i8* %scevgep5859, i8* bitcast ([2 x %struct.TypHeader* (%struct.TypHeader*, %struct.TypHeader*)*]* @.memset_pattern40 to i8*
), i64 %tmp75) nounwind



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126044 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Stores of null pointers should turn into memset, we weren't recognizing</title>
<updated>2011-02-19T19:35:49Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-02-19T19:35:49Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=41bfbb0a8776674c486682cbf2aa80f15abfef68'/>
<id>urn:sha1:41bfbb0a8776674c486682cbf2aa80f15abfef68</id>
<content type='text'>
them as splat values.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126041 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Implement rdar://9009151, transforming strided loop stores of</title>
<updated>2011-02-19T19:31:39Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-02-19T19:31:39Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=3a393728a62122d7009d8e2cbe52a221874e576a'/>
<id>urn:sha1:3a393728a62122d7009d8e2cbe52a221874e576a</id>
<content type='text'>
unsplatable values into memset_pattern16 when it is available
(recent darwins).  This transforms lots of strided loop stores
of ints for example, like 5 in vpr:

  Formed memset:   call void @memset_pattern16(i8* %4, i8* getelementptr inbounds ([16 x i8]* @.memset_pattern9, i32 0, i32 0), i64 %tmp25)
    from store to: {%3,+,4}&lt;%11&gt; at:   store i32 3, i32* %scevgep, align 4, !tbaa !4




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126040 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Teach loop-idiom to turn a loop containing a memset into a larger memset</title>
<updated>2011-01-04T07:46:33Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-01-04T07:46:33Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=e41d3c015ce5cafde305d9a6d9baaae1c41bf46a'/>
<id>urn:sha1:e41d3c015ce5cafde305d9a6d9baaae1c41bf46a</id>
<content type='text'>
when safe.

The testcase is basically this nested loop:
void foo(char *X) {
  for (int i = 0; i != 100; ++i) 
    for (int j = 0; j != 100; ++j)
      X[j+i*100] = 0;
}

which gets turned into a single memset now.  clang -O3 doesn't optimize
this yet though due to a phase ordering issue I haven't analyzed yet.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122806 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>fix a miscompilation of tramp3d-v4: when forming a memcpy, we have to make</title>
<updated>2011-01-02T21:14:18Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-01-02T21:14:18Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=63f9c3c49ac7011e6366fbec42716f3f70f1beee'/>
<id>urn:sha1:63f9c3c49ac7011e6366fbec42716f3f70f1beee</id>
<content type='text'>
sure that the loop we're promoting into a memcpy doesn't mutate the input
of the memcpy.  Before we were just checking that the dest of the memcpy
wasn't mod/ref'd by the loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122712 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>If a loop iterates exactly once (has backedge count = 0) then don't</title>
<updated>2011-01-02T20:24:21Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-01-02T20:24:21Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=8e08e73f0e12c9e669f2d7d0a5c9213df3046c01'/>
<id>urn:sha1:8e08e73f0e12c9e669f2d7d0a5c9213df3046c01</id>
<content type='text'>
mess with it.  We'd rather peel/unroll it than convert all of its 
stores into memsets.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122711 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>enhance loop idiom recognition to scan *all* unconditionally executed</title>
<updated>2011-01-02T19:01:03Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-01-02T19:01:03Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=62c50fdf69064c0d086aedfadb6ceb7c303bbcb9'/>
<id>urn:sha1:62c50fdf69064c0d086aedfadb6ceb7c303bbcb9</id>
<content type='text'>
blocks in a loop, instead of just the header block.  This makes it more
aggressive, able to handle Duncan's Ada examples.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122704 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Allow loop-idiom to run on multiple BB loops, but still only scan the loop </title>
<updated>2011-01-02T07:58:36Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-01-02T07:58:36Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=cf078f2b20899a3a19fb2044cc08dff409f13276'/>
<id>urn:sha1:cf078f2b20899a3a19fb2044cc08dff409f13276</id>
<content type='text'>
header for now for memset/memcpy opportunities.  It turns out that loop-rotate
is successfully rotating loops, but *DOESN'T MERGE THE BLOCKS*, turning "for 
loops" into 2 basic block loops that loop-idiom was ignoring.

With this fix, we form many *many* more memcpy and memsets than before, including
on the "history" loops in the viterbi benchmark, which look like this:

        for (j=0; j&lt;MAX_history; ++j) {
          history_new[i][j+1] = history[2*i][j];
        }

Transforming these loops into memcpy's speeds up the viterbi benchmark from
11.98s to 3.55s on my machine.  Woo.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122685 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>teach loop idiom recognition to form memcpy's from simple loops.</title>
<updated>2011-01-02T03:37:56Z</updated>
<author>
<name>Chris Lattner</name>
<email>sabre@nondot.org</email>
</author>
<published>2011-01-02T03:37:56Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=e2c43920919c6fe376613d1d8331897dc1ba3d57'/>
<id>urn:sha1:e2c43920919c6fe376613d1d8331897dc1ba3d57</id>
<content type='text'>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122678 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
</feed>
