<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm/test/Transforms, branch master</title>
<subtitle>http://llvm.org</subtitle>
<id>https://git.amat.us/llvm/atom/test/Transforms?h=master</id>
<link rel='self' href='https://git.amat.us/llvm/atom/test/Transforms?h=master'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/'/>
<updated>2013-05-14T00:21:18Z</updated>
<entry>
<title>LoopVectorize: Handle loops with multiple forward inductions</title>
<updated>2013-05-14T00:21:18Z</updated>
<author>
<name>Arnold Schwaighofer</name>
<email>aschwaighofer@apple.com</email>
</author>
<published>2013-05-14T00:21:18Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=123f18bcb9baeb6dc177cb642126a3a4d9ca8b43'/>
<id>urn:sha1:123f18bcb9baeb6dc177cb642126a3a4d9ca8b43</id>
<content type='text'>
We used to give up if we saw two integer inductions. After this patch, we base
further induction variables on the chosen one like we do in the reverse
induction and pointer induction case.

Fixes PR15720.

radar://13851975

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181746 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>[objc-arc-opts] In the presense of an alloca unconditionally remove RR pairs if and only if we are both KnownSafeBU/KnownSafeTD rather than just either or.</title>
<updated>2013-05-13T23:49:42Z</updated>
<author>
<name>Michael Gottesman</name>
<email>mgottesman@apple.com</email>
</author>
<published>2013-05-13T23:49:42Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=acfb3584c58159ec20a8379c864c9d644f8d967e'/>
<id>urn:sha1:acfb3584c58159ec20a8379c864c9d644f8d967e</id>
<content type='text'>
In the presense of a block being initialized, the frontend will emit the
objc_retain on the original pointer and the release on the pointer loaded from
the alloca. The optimizer will through the provenance analysis realize that the
two are related (albiet different), but since we only require KnownSafe in one
direction, will match the inner retain on the original pointer with the guard
release on the original pointer. This is fixed by ensuring that in the presense
of allocas we only unconditionally remove pointers if both our retain and our
release are KnownSafe (i.e. we are KnownSafe in both directions) since we must
deal with the possibility that the frontend will emit what (to the optimizer)
appears to be unbalanced retain/releases.

An example of the miscompile is:

  %A = alloca
  retain(%x)
  retain(%x) &lt;--- Inner Retain
  store %x, %A
  %y = load %A
  ... DO STUFF ...
  release(%y)
  call void @use(%x)
  release(%x) &lt;--- Guarding Release

getting optimized to:

  %A = alloca
  retain(%x)
  store %x, %A
  %y = load %A
  ... DO STUFF ...
  release(%y)
  call void @use(%x)

rdar://13750319

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181743 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>SLPVectorizer: Fix a bug in the code that generates extracts for values with multiple users.</title>
<updated>2013-05-12T22:58:45Z</updated>
<author>
<name>Nadav Rotem</name>
<email>nrotem@apple.com</email>
</author>
<published>2013-05-12T22:58:45Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=507b9242ed3cbac13a1c4c58fe28188e1a0d6fa6'/>
<id>urn:sha1:507b9242ed3cbac13a1c4c58fe28188e1a0d6fa6</id>
<content type='text'>
The external user does not have to be in lane #0. We have to save the lane for each scalar so that we know which vector lane to extract.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181674 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>InstCombine: Flip the order of two urem transforms</title>
<updated>2013-05-12T00:07:05Z</updated>
<author>
<name>David Majnemer</name>
<email>david.majnemer@gmail.com</email>
</author>
<published>2013-05-12T00:07:05Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=fa49d7d6e4384381e4307a0d2495e6e5b15821e3'/>
<id>urn:sha1:fa49d7d6e4384381e4307a0d2495e6e5b15821e3</id>
<content type='text'>
There are two transforms in visitUrem that conflict with each other.

*) One, if a divisor is a power of two, subtracts one from the divisor
   and turns it into a bitwise-and.
*) The other unwraps both operands if they are surrounded by zext
   instructions.

Flipping the order allows the subtraction to go beneath the sign
extension.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181668 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>LoopVectorize: Use the widest induction variable type</title>
<updated>2013-05-11T23:04:28Z</updated>
<author>
<name>Arnold Schwaighofer</name>
<email>aschwaighofer@apple.com</email>
</author>
<published>2013-05-11T23:04:28Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=9b5d70f07630f99f1ec5589aeaba96c6d8ab0aee'/>
<id>urn:sha1:9b5d70f07630f99f1ec5589aeaba96c6d8ab0aee</id>
<content type='text'>
Use the widest induction type encountered for the cannonical induction variable.

We used to turn the following loop into an empty loop because we used i8 as
induction variable type and truncated 1024 to 0 as trip count.

int a[1024];
void fail() {
  int reverse_induction = 1023;
  unsigned char forward_induction = 0;
  while ((reverse_induction) &gt;= 0) {
    forward_induction++;
    a[reverse_induction] = forward_induction;
    --reverse_induction;
  }
}

radar://13862901

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181667 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>InstCombine: Turn urem to bitwise-and more often</title>
<updated>2013-05-11T09:01:28Z</updated>
<author>
<name>David Majnemer</name>
<email>david.majnemer@gmail.com</email>
</author>
<published>2013-05-11T09:01:28Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=a8ccefc0a31c868c79cfc028e2a957269de5aba6'/>
<id>urn:sha1:a8ccefc0a31c868c79cfc028e2a957269de5aba6</id>
<content type='text'>
Use isKnownToBeAPowerOfTwo in visitUrem so that we may more aggressively
fold away urem instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181661 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>SLPVectorizer: Add support for trees with external users.</title>
<updated>2013-05-10T22:59:33Z</updated>
<author>
<name>Nadav Rotem</name>
<email>nrotem@apple.com</email>
</author>
<published>2013-05-10T22:59:33Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=9bba9f630005409f43bc3b0480e18fa9f8d43e69'/>
<id>urn:sha1:9bba9f630005409f43bc3b0480e18fa9f8d43e69</id>
<content type='text'>
For example:
bar() {
  int a = A[i];
  int b = A[i+1];
  B[i] = a;
  B[i+1] = b;
  foo(a);  &lt;--- a is used outside the vectorized expression.
}



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181648 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>Add an additional testcase for PR15882.</title>
<updated>2013-05-10T22:55:44Z</updated>
<author>
<name>Nadav Rotem</name>
<email>nrotem@apple.com</email>
</author>
<published>2013-05-10T22:55:44Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=ef3e423e2313ee05ba136aafc1e34c45a2702577'/>
<id>urn:sha1:ef3e423e2313ee05ba136aafc1e34c45a2702577</id>
<content type='text'>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181646 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>InstCombine: Don't claim to be able to evaluate any shl in a zexted type.</title>
<updated>2013-05-10T16:26:37Z</updated>
<author>
<name>Benjamin Kramer</name>
<email>benny.kra@googlemail.com</email>
</author>
<published>2013-05-10T16:26:37Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=7159a307b9a0a53f9a33e416d24b9308ef547d97'/>
<id>urn:sha1:7159a307b9a0a53f9a33e416d24b9308ef547d97</id>
<content type='text'>
The shift amount may be larger than the type leading to undefined behavior.
Limit the transform to constant shift amounts. While there update the bits to
clear in the result which may enable additional optimizations.

PR15959.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181604 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
<entry>
<title>InstCombine: Verify the type before transforming uitofp into select.</title>
<updated>2013-05-10T09:16:52Z</updated>
<author>
<name>Benjamin Kramer</name>
<email>benny.kra@googlemail.com</email>
</author>
<published>2013-05-10T09:16:52Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/llvm/commit/?id=51dab6e3945a6d06a713869967ced3a8f9fb6294'/>
<id>urn:sha1:51dab6e3945a6d06a713869967ced3a8f9fb6294</id>
<content type='text'>
PR15952.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181586 91177308-0d34-0410-b5e6-96231b3b80d8
</content>
</entry>
</feed>
